Точно! Как это я не подумал... Хорошо, вот мой код. Он рабочий - в т.ч. я учёл Ваше замечание. Но думаю, что его можно сделать короче и красивее. Помогите, пожалуйста!
<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, время: 09:39. |