Вешать по нескольку событий
EventTarget.prototype.add = (_ => {
//Array.isArray(ff)
return function() {
EventTarget.prototype.addEventListener.apply(this, arguments);
return this;
}
})();
i.add(this.desktop ? 'mouseenter' : 'touchstart', e => {});
Либо одно, либо другое вешаю. На сколько мне известно, возможно к сенсорному монитору, к примеру планшету, подключить мышь. Либо у ноутбука, пк, сенсорный монитор. И в данном случаи необходимо вешать оба прослушивателя.
Вопрос в том, как лучше это сделать. Возможно указывать, события в качестве массива и добавлять сразу, не перебирая их через цикл.
И как в данном случаи лучше сделать это?
Что если так писать
class Target {
constructor(val) {
this.el = val
}
add(e, f) {
e.forEach(i => this.el.addEventListener(i, f));
return this
}
}
new Target(i).add(['mouseenter', 'touchstart'], t => {
console.log(t)
}).add(['mouseleave', 'touchend'], t => {
console.log(t)
});
Ответы (1 шт):
Автор решения: EzioMercer
→ Ссылка
Вот пример с классами:
class Target {
constructor(query) {
this.el = document.querySelector(query);
}
addEvent(eventName, handler) {
this.el?.addEventListener(eventName, handler);
return this;
}
addEvents(eventsNames, handler) {
eventsNames.forEach(eventName => this.addEvent(eventName, handler));
return this;
}
}
const exampleDiv = new Target('#example')
.addEvent('mouseover', () => console.log('Hover not click'))
.addEvents(['click', 'dblclick'], (e) => {
console.log(`You just ${e.type}ed me`);
});
<div id="example">Click or doubleclik or hover</div>
Как устанваливать значение для this.el решайте сами, мне мой способ (через селелктор) показался удобнее потому так написал, можете передавать сразу нужный элемент, если вам так удобнее