JS события

LH
На сайте с 26.09.2013
Offline
89
585

Есть слайдер,

есть функция setup для отрисовки и навешивания событий,

так же использую медиа запросы, и в зависимости от размера меняю опции слайдера, в конце запуская функцию setup

вопрос:

Вешаются ли события заново, или добавляются новые к старым?

[umka]
На сайте с 25.05.2008
Offline
456
#1

Ответ на этот вопрос есть только в теле функции setup

Лог в помощь!
S
На сайте с 30.09.2016
Offline
469
#2
Leonid H:
так же использую медиа запросы, и в зависимости от размера меняю опции слайдера, в конце запуская функцию setup

Это "тёплое с мягким". Медиа запросы - это CSS, функция setup - это JS. И "в конце" - это, в связи со сказанным, в конце чего?

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
[umka]
На сайте с 25.05.2008
Offline
456
#3

Sitealert, подозреваю, что тут имелся в виду ajax :)

I2
На сайте с 07.03.2015
Offline
38
#4

Если вы имеете ввиду навешивание разных событий на один элемент.

Повесили два обработчика (оба будут работать)


element.addEventListener('resize', function() {
// some code
});

element.addEventListener('resize', function() {
// another code
});

Здесь отработает только одна функция, второй обработчик перетрет первый. (плохая практика)


element.onresize = function() {
// some code
};
element.onresize = function() {
// another code
};

Второй вариант, но правильно реализован


var handleFirst = function() {
// some code
}
var handleSecond = function() {
// another code
}

element.addEventListener('resize', handleFirst);
element.removeEventListener('resize', handleFirst);
element.addEventListener('resize', handleSecond);

Надеюсь чем-то помог :)

Качественная верстка PSD макетов (/ru/forum/974524)
LH
На сайте с 26.09.2013
Offline
89
#5

function Slider( params ) {
// Меняю эту опцию в зависимости от разрешения экрана
this.onpage = params.onpage || 0;
}

Slider.prototype = {
draw: function() {
// Тут отрисовывается слайдер
},

addEvents: function() {
// Тут вешаются события на отрисованные элементы
},

setup: function() {
this.draw();
this.addEvents();
}
}

let slider = new Slider();

// Меняем разрешение браузера
// меняется опция и запускается setup()
// вот и вопрос - события в функции addEvents() затрутся новыми?
mq.register( '( min-width: 319px ) and ( max-width: 767px )', function() {
slider.onpage = 2;
slider.setup();
})
.register( '( min-width: 768px ) and ( max-width: 991px )', function() {
slider.onpage = 5;
slider.setup();
})
.listen();
ДП
На сайте с 23.11.2009
Offline
203
#6

А теперь ответ - зависит от реализации функции addEvents().

LH
На сайте с 26.09.2013
Offline
89
#7
Дикий пионер:
А теперь ответ - зависит от реализации функции addEvents().

Серьезно?

addEventListener на элемент

оставим, чтоб вам легче было, одно событие "click"

addEvents() {

this.el.addEvenListener( 'click', function() {
console.log( e );
}, false );
}
ДП
На сайте с 23.11.2009
Offline
203
#8

Судя по коду - добавляются к старым.

Вы код подсократили, но если там нет removeEventListener - то тогда обработчики добавляются к старым.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий