Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   из двух кнопок сделать одну (https://javascript.ru/forum/misc/65180-iz-dvukh-knopok-sdelat-odnu.html)

cubano 02.10.2016 09:56

из двух кнопок сделать одну
 
Здравствуйте!

Подскажите пожалуйста, как сделать так, чтоб за открытие и за закрытие отвечала одна кнопка?

Например: Один раз нажал, галерея открылась. Второй раз нажал, закрылась.

http://codepen.io/tjbenton21/pen/LEpqmg


Заранее благодарен!

рони 02.10.2016 11:06

cubano,
может хоть немного подучится, чтоб не спрашивать элементарные вещи и не плодите однотипные темы
classlist

for(var i = 0; i < buttons.length; i++){
 buttons[i].addEventListener("click", function(e){
     for(var c = 0; c < containers.length; c++){
   containers[c].classList.toggle("u-fancy-load--out")
   containers[c].classList.toggle("u-fancy-load--in")
   }
 }, false);
}

рони 02.10.2016 11:38

:) вангую следующий вопрос ...
ответ тут коллекции-не-массивы

cubano 02.10.2016 12:43

Огромное спасибо ! все получилось.


Извиняюсь за свои примитивные вопросы!

warren buffet 03.10.2016 05:28

Попутно запомни ключевое слово - toggle. Такие штучки, кнопки-одиночки, переключалки логики чек-боксов*, с двумя состояниями называются toggle - это такая button, но застегивающаяся не через петельку, а через дырку в ткани (люверс). Тынц-тынц, застегнуто-расстегнуто, закрыто-открыто, и тп.

* В JQuery UI небось полно тоглей для оформления чекбоксов.

warren buffet 03.10.2016 05:31

Теоретически может быть третье состояние, ундефайнед, но на вебе оно не применяется.

cubano 03.10.2016 11:18

Наберусь наглости, и задам еще один вопрос.

Как сделать, чтобы галерея закрывалась по нажатию на область, за ее пределами?

Заранее благодарен!

рони 03.10.2016 11:25

cubano,
галерея 1 или несколько?

рони 03.10.2016 12:16

cubano,
document.addEventListener("click", function(e) {
    var target = e.target, items = document.querySelectorAll(".u-fancy-load--in");
    if(!items.length) return;
    while (target != document) {
        if (target.classList.contains("u-fancy-load") || target.hasAttribute("data-animation")) {
            return;
        }
        target = target.parentNode;
    }
    [].forEach.call(items, function(el) {
        el.classList.add("u-fancy-load--out")
        el.classList.remove("u-fancy-load--in")
    });

})

warren buffet 03.10.2016 20:47

Здесь эротичнее сделать генеральную закрывашку на заранее ей известный идентификатор. Добавляешь этот класс к элементу и можно так открыть их много с защищенных от всплытия кнопок всяких, а потом щелк мимо и чпок все закрылись.


Часовой пояс GMT +3, время: 07:01.