Точно! Как это я не подумал... Хорошо, вот мой код. Он рабочий - в т.ч. я учёл Ваше замечание. Но думаю, что его можно сделать короче и красивее. Помогите, пожалуйста!
<body>
<input type="radio" checked name="radio" id="radio1">
<input type="radio" name="radio" id="radio2">
<input type="radio" name="radio" id="radio3">
<div class="page bg1">
<div class="radio-controls">
<label for="radio1"></label>
<label for="radio2"></label>
<label for="radio3"></label>
</div>
</div>
<script>
[js]var page = document.getElementsByClassName("page");
var label = document.getElementsByTagName("label");
label[0].addEventListener('click', function() {
page[0].classList.remove("bg2");
page[0].classList.remove("bg3");
page[0].classList.add("bg1");
});
label[1].addEventListener('click', function() {
page[0].classList.remove("bg3");
page[0].classList.add("bg2");
});
label[2].addEventListener('click', function() {
page[0].classList.remove("bg2");
page[0].classList.add("bg3");
});[/js]
</script>
</body>
body {
background-color: white;
font-family: "Open Sans", sans-serif;
padding: 5px 25px;
font-size: 18px;
margin: 0;
color: #444;
}
h1 {
font-family: "Merriweather", serif;
font-size: 32px;
}
input {
display: none;
}
.page {
position: relative;
width: 400px;
height: 250px;
outline: 1px solid orange;
}
.bg1 {
background-image: url("Gora-400x250.jpg");
}
.bg2 {
background-image: url("IMG_0863m.jpg");
}
.bg3 {
background-image: url("Torosskie-goryi-400x250.jpg");
}
.radio-controls {
position: absolute;
bottom: 0;
left: 50%;
margin-left: -55px;
width: 110px;
height: 50px;
text-align: center;
line-height: 65px;
outline: 1px solid red;
}
label {
display: inline-block;
width: 20px;
height: 20px;
background-color: dodgerblue;
background-clip: padding-box;
border: 5px solid transparent;
border-radius: 50%;
box-shadow: 0 0 2px 1px dodgerblue;
}
#radio1:checked ~ .page label[for="radio1"],
#radio2:checked ~ .page label[for="radio2"],
#radio3:checked ~ .page label[for="radio3"] {
background-color: red;
box-shadow: 0 0 2px 1px red;
}
|
Alessio18911,
:-?
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
.page {
position: relative;
width: 400px;
height: 250px;
outline: 1px solid orange;
background-size: cover;
background-repeat: no-repeat;
}
.bg1 {
background-image: url("http://hd4desktop.online/images/m/a-squirrel-408002.jpg");
}
.bg2 {
background-image: url("http://www.nicefotos.ru/img/picture/May/30/f5cc5821bbc50c0920bc86fa65d9cb4c/mini_1.jpg");
}
.bg3 {
background-image: url("http://cybercomnet.fr/www/wallpaper/_data/i/galleries/Animaux/Lapin/Lapin-8-cu_s9999x200.jpg");
}
.radio-controls {
position: absolute;
bottom: 0;
left: 50%;
margin-left: -55px;
width: 110px;
height: 50px;
text-align: center;
line-height: 65px;
outline: 1px solid red;
}
label {
display: inline-block;
width: 20px;
height: 20px;
background-color: dodgerblue;
background-clip: padding-box;
border: 5px solid transparent;
border-radius: 50%;
box-shadow: 0 0 2px 1px dodgerblue;
}
</style>
<script>
window.addEventListener('DOMContentLoaded', function() {
var page = document.querySelector('.page'),
label = page.querySelectorAll('label');
[].forEach.call(label, function(item, i) {
item.addEventListener('click', function() {
page.className = "page bg"+ (i+1)
});
});
});
</script>
</head>
<body>
<div class="page bg1">
<div class="radio-controls">
<label class="label" for="radio1"></label>
<label class="label" for="radio2"></label>
<label class="label" for="radio3"></label>
</div>
</div>
</body>
</html>
|
Очень красиво получилось, спасибо!:) А Вы могли бы мне пояснить некоторые детали:
1. Для чего нам DOMContentLoaded? 2. В строке 58 - почему в скобках именно .page label, а не просто label? 3. В строке 59 - что значат квадратные скобки в самом начале? 4. Как вообще работает эта функция [].forEach.call.....? 5. Что подключено самым первым скриптом? |
Цитата:
Это не обязательно если перенести скрипт в конец документа перед </Body> 2) можно и просто label но тогда это будет относиться ко всем label а не только с классом page. 3) https://developer.mozilla.org/en-US/...Each?v=example квадратные скобки пустой литерал массива 4) https://developer.mozilla.org/en-US/...Each?v=example 5. походу был jquery который рони грохнул. |
Ага. Теперь всё ясно. Очень благодарен всем! :)
|
Alessio18911,
5. уже ничего 1. чтобы скрипт работал из любого места страницы, а не только после слайда. 2. исправил. 3.4. https://learn.javascript.ru/traversi...массивы в основном чтобы сохранить i (усовершенствованный for) |
Рони, спасибо большое за разъяснение и помощь!
|
Рони, хочу уточнить такую вещь ещё: методы querySelector - возвращает одно значение, querySelectorAll - массив. В то же время методы, которые начинаются с getElementsBy - только массивы, правильно? А всё же, что лучше использовать для поиска элементов - querySelector/querySelectorAll или getElementsBy...?
|
Alessio18911,
псевдомассивы!!! а getElementsBy живые коллекции (значение будет менятся, всегда актуально) , querySelectorAll - срез на момент поиска (коллекция неизменна) |
Alessio18911,
особого значения не имеет как искать, если найденное тут же используется и структура найденного неизменна. (ничего не удалили или не добавили), если меняется то предпочтительнее querySelectorAll |
| Часовой пояс GMT +3, время: 18:00. |