繁体   English   中英

如何使用JavaScript仅触发img元素触发鼠标悬停事件

[英]how to trigger mouseover event only for an img element using javascript

我希望仅将鼠标悬停在img元素上时触发mouseover事件。 我用了

document.getElementsByTagName('img').onmouseover=function(e){ }

但它不起作用。 我应该如何实现呢?

我认为您应该将事件侦听器一一应用于元素:

 const imgs = document.getElementsByTagName('img'); const map = fn => x => Array.prototype.map.call(x, fn); map(img => { img.addEventListener('mouseover', (e) => { e.target.style.border = '1px solid red'; }); img.addEventListener('mouseleave', (e) => { e.target.style.border = 'none'; }); })(imgs) 
 <img src="" width="100" height="100"> <img src="" width="100" height="100"> <img src="" width="100" height="100"> 

在这里,我们从Array.prototype提取map函数,因此我们可以将函数映射到任何可迭代对象上,而不仅仅是数组。

具有常规ES5语法的相同代码:

 const imgs = document.getElementsByTagName('img'); const map = function(fn) { return function(x) { Array.prototype.map.call(x, fn); } } const sponge = 'http://vignette3.wikia.nocookie.net/spongebob/images/6/6f/SpongeBob_%286%29.png/revision/latest?cb=20140824163929'; map(function(img) { img.addEventListener('mouseover', function(e) { e.target.src = sponge; }); img.addEventListener('mouseleave', function(e) { e.target.src = ''; }); })(imgs) 
 <img src="" width="90" height="80"> <img src="" width="90" height="80"> <img src="" width="90" height="80"> 

getElementsByTagName返回元素的实时HTMLCollection 您需要在所有元素上而不是在集合上设置事件。

您可以这样做:

var arrElem = document.getElementsByTagName('img');

for (var i = arrElem.length; i-- ;) {
  arrElem[i].onmouseover = function(e) {};
}

GetElementsByTagName返回元素的Collection。 如果只有一个img ,它将是一个元素的集合。 因此,您需要通过[0]访问此集合的属性。

document.getElementsByTagName('img')[0].onmouseover=function(e){ }

这些都可以做什么吗? 您将需要JQuery ,但是无论如何我还是会推荐它。

$('#img')
    .mousemove(function (event) {
        console.log('Mouse moved');
    })
    .mouseenter(function () {
        console.log('Mouse over');
    })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM