У меня есть сетка изображений, которую пользователи могут при наведении мыши для предварительного просмотра. Я могу добавить слушателя для каждого в цикле. Я хотел бы активировать свою логику только в том случае, если пользователь находится над элементом не менее 1,5 секунд. Я не могу определить, почему мое событие mouseleave, которое пытается очистить время таймера, на самом деле не очищает его.
Я добавил комментарии в коде, чтобы также уточнить:
(function () {
var nodeList = document.querySelectorAll('div.MyDiv > img') || undefined;
if (nodeList) {
nodeList.forEach(function (_el, idx) {
_el.addEventListener("mouseenter", function (e) {
var _imgsrcga = e.srcElement.src;
var timer = setTimeout(function() {
console.log('This ran'); // this is OK after 1.5 seconds, but it ALWAYS runs after 1.5 seconds
}, 1500)
}, false);
// not clearing the timer....
_el.addEventListener("mouseleave", function(e) {
console.log('cleared')
clearTimeout(timer) // my timer never clears with a mouseleave event
})
})
}
})();
Итак: мой console.log ('this run') на самом деле задерживает 1,5 секунды, но я никогда не смогу избавиться от своего таймера, если он оставит мышь менее чем за 1,5 секунды.
Спасибо