или что означают знаки "?" и ":" в кодах JavaScript
JavaScript для начинающих
Содержание.
Принцип работы тернарного оператора. Примеры использования тернарного оператора.
Изменить размер изображения .
Изменить размер несколько раз.
Изменить цвет фона.
Изменить цвет строки.
Изменить шрифт.
Заменить один рисунок другим.
С элементами анимации.
Альтернатива тернарному оператору в JavaScript
Простой счетчик кликов.
Для последовательного запуска событий сценария применяют код, использующий знаки "?" и ":". Этот код носит название тернарного оператора. Он позволяет заменить кнопки простыми кликами по экрану. Тогда при каждом клике будет происходить переход к новому событию. При этом возможен возврат к исходному событию (также по клику) без перезагрузки программы.
Ниже разбирается принцип работы тернарного оператора и приводятся примеры его использования для программирования различных событий (изменение размера изображения, изображения другим, изменения цвета фона, изменения цвета строки, выбора типа шрифта и др.).
Принцип работы тернарного оператора
Рассмотрим принцип работы тернарного оператора на простейшем примере:
по клику сменить квадрат на круг, а по другому клику вернуться снова к квадрату.
Приведем скрипт.
<style>
.a {
width:150px;
height: 150px;
background: #f00;
margin-left:20;
}
.b {
border-radius: 150px; width: 150px; height: 150px;
background-color: #0000ff; margin-left:20; margin-top:12;
}
</style>
<body>
<div class="a" onclick="this.className = (this.className == 'a' ? 'b' : 'a' )">
<p align=center><img src='223.jpg'></div>
Здесь классами .a и .b задаются квадрат и круг. Замена одной фигуры на другую
происходит за счет смены класса. Функция, которая по клику меняет один класс на другой,
(выделена красным цветом) содержит тернарный оператор.
Кликни по квадрату
Кодировка
this.className = (this.className == 'a' ? 'b' : 'a')
есть не что иное, как сокращенная запись условного оператора ( в таком виде он
называется тернарным оператором). По сути тернарный оператор
является сокращенной записью оператора if-else, записанного в форме:
if (условие) переменная = первое выражение;
else переменная = второе выражение
Тернарный оператор содержит условие, за которым следует знак вопроса (?),
затем выражение, которое выполняется, если условие истинно (первое выражение),
далее следует двоеточие (:), и, наконец, выражение, которое нужно выполнить, если
условие ложно (второе выражение). Знак ? соответствует русскому «то», знак :
соответствует русскому «иначе». Кодировку
(this.className == 'a' ? 'b' : 'a' )
можно произнести так: ЕСЛИ класс элемента, по которому щелкает курсор, имеет
имя `a`, ТО выполняется действие после знака ? (класс `а` заменяется классом `b`),
ИНАЧЕ выполняется действие после знака : то-есть, класс `b` заменяется классом `а`.
Другими словами, при первом клике на картинку она заменяется на другую,
при втором клике происходит возвращение к исходной фигуре.
Примеры использования тернарного оператора
Изменить размер изображения
С помощью тернарного оператора можно реализовать простейший способ переход от
малого размера изображения к ЛЮБОМУ размеру. Клик - увеличение размера, другой
клик - возврат к исходному размеру. Приведем скрипт.<style>
.a img{
width:100px;
}
.b img{
width:600px;
}
</style>
<body>
<div class="a" onclick="this.className = (this.className == 'a' ? 'b' : 'a' )"
><img src='223.jpg'></div>
При первом клике на картинку ее первоначальный размер (width:100px)
заменяется на другой (width:600px), при втором клике размер возвращается к исходному.
Изменить размер несколько раз
(код тернарного оператора с несколькими условиями)
Приведенный ниже код позволяет 3 раза увеличивать размер изображения, последовательно
кликая на фото 3 раза. Возврат к исходному размеру - по четвертому клику.
<style>
.f img{
width:100px;
}
.g img{
width:300px;
}
.h img{
width:500px;
}
.j img{
width:700px;
}
</style>
<body><div class="f" onclick="this.className =(this.className == 'f' ? 'g':
this.className == 'g' ? 'h' : this.className == 'h' ? 'j': 'f')"><img src='223.jpg' ></div>
Для увеличения количества событий (размеров) код нужно дополнять строками, содержащими ДВА класса, последняя строка должна содержать ТРИ класса.
Изменить цвет фона
Кликнуть по фону квадрата. Потом еще раз - для возврата. Смотрим код
<style>
.aw {
width:150px;
height: 150px;
background: #f00;
margin-bottom:200px;
}
.bw {
width:150px;
height: 150px;
background: #00f;
margin-bottom:200px;
}
</style>
<div class="aw" onclick="this.className = (this.className == 'aw' ? 'bw' : 'aw' )"></div>
Изменить цвет строки
Кликнуть по строке . Потом еще раз - для возврата.Смотрим код
<style>
.as {
color: blue;
font-family: Arial;
font-size:60px; font-weight: bold;
}
.bs {
font-family: Arial;
font-size:60px; font-weight: bold;
color: red;
}
</style>
<div class="as" onclick="this.className = (this.className == 'as' ? 'bs' : 'as' )"></div>
щелкни по строке
Изменить шрифт
Тремя кликами можно просмотреть три типа шрифта. Для возврата - двойной клик.
Щелкни! Кроме шрифта 'Arial' можно увидеть
еще три типа шрифта (возврат - двойной клик)
Заменить один рисунок другим
Для смены рисунка используется код
<style>
.ab img{position: absolute;
width:450px;
height:300px;
}
.bb img{opacity:0;position: absolute;
}
</style>
<div class="ab" onclick="this.className = (this.className == 'ab' ? 'bb' : 'ab' )">
</div><img src='224.jpg'></div><img src='36.jpg' width=450px; height=300px>
С элементами анимации
Кликните на фото, через 2 секунды оно остановит свое движение. Затем можно кликнуть
еще раз, чтобы вернуть его в исходное состояние.
<style>
.sqw img{
width:50px;
-webkit-transition: width 2s,
-webkit-transform 2s;
}
.sqw-n img{
width:700px;
-webkit-transition: width 2s,
-webkit-transform 2s;
}
</style>
<body>
<div class="sqw" onclick="this.className = (this.className == 'sqw' ? 'sqw-n' : 'sqw' )"></div><img src='35.gif'
tabindex="1"/>
Щелкни по картинке и потом еще раз
Альтернатива тернарному оператору в JavaScript
Тернарный оператор является инструментом CSS. Альтернативой ему в JavaScript служит
массив. Ниже представлен скрипт изменения размеров картинки по клику. 4 клика 4 раза
увеличивают размер. При 5-ом клике размер возаращается к исходному.
<head>
<body>
<script>
massive_length=5; /*сколько будет размеров*/
col= new Array(massive_length);
colh= ["100px","200px","300px","400px","500px"] /*высота*/
colw= ["150px","300px","450px","600px","750px"] /*ширина*/
var n = 0;
function WW(){
rew = colw[n];
document.getElementById("mypict").style.width =rew;
reh = colh[n];
document.getElementById("mypict").style.height =reh;
n++;
if(n>massive_length)
location.reload()
}
</script>
<img id="mypict" src="3.jpg" width=60 height=40>
<input type="button" style='margin-top:40px; font-size:18px; color:purple; border:4px solid red; background-color:cyan '
value=кликни name=but2 OnClick=WW()>
</body>