Разобрать каждую строчку в JS?

Помогите разобраться каждую строчку в коде JS.
HTML и CSS не нужно разбирать.

<div class="test test1">
</div>

<div class="test test2">
</div>


.test {
    position: relative;
    width: 200px; height: 200px;
    background: #000;
    float: left
}

.test2 {
    background: #f00;
    display: none;
}


var div1 = document.querySelector('.test1'),
    div2 = document.querySelector('.test2'),
    visibility = false;

function toggle () {
    div2.style.display = visibility ? 'block' : 'none';
}

div1.addEventListener('click', function (e) {
    e.stopPropagation();
    visibility = !visibility;
    toggle();
}, false);

document.addEventListener('click', function () {
    visibility = false;
    toggle();
});

div2.addEventListener('click', function (e) {
    e.stopPropagation();
}, false);


Сам результат jsfiddle.net/IonDen/u52uomho/5
  • Вопрос задан
  • 271 просмотр
Решения вопроса 1
premas
@premas
Full-stack web-developer
// Инициализация переменных
var div1 = document.querySelector('.test1'),
    div2 = document.querySelector('.test2'),
    visibility = false;

// Функция, которая блоку .test2 устанавливает
// css-свойство display:none или block
function toggle () {
    // если visibility  true, то display: block, иначе display: none
    div2.style.display = visibility ? 'block' : 'none';
}

// При клике по .test1 выполнять следующие действия:
div1.addEventListener('click', function (e) {
    e.stopPropagation(); // Отчищать поток существующих событий(кликов, наведений мыши и прочего)
    visibility = !visibility; // Установить булеву переменную в противоположное значение 
    toggle(); //  Вызвать функцию toggle
}, false);

// Клик по документу(нужно для эмуляции клика вне .tes1 и .test2)
document.addEventListener('click', function () {
    visibility = false; // установить переменную в false
    toggle(); // вызвать функцию toggle
});

// клик по .test2
div2.addEventListener('click', function (e) {
    e.stopPropagation(); // Очищать поток всех событий(нужно для предотвращение клика по document)
}, false);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
summer Ярославль
от 100 000 до 140 000 ₽
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
19 апр. 2024, в 20:43
20000 руб./за проект
19 апр. 2024, в 20:11
500 руб./за проект