【问题标题】:Event for highlighting the hovered element?突出显示悬停元素的事件?
【发布时间】:2022-01-24 21:32:48
【问题描述】:

我目前正在使用此代码在 Google Chrome 扩展程序中绑定事件:

var bindEvent = function(elem ,evt,cb) {
    //see if the addEventListener function exists on the element
    if ( elem.addEventListener ) {
        elem.addEventListener(evt,cb,false);
    //if addEventListener is not present, see if this is an IE browser
    } else if ( elem.attachEvent ) {
        //prefix the event type with "on"
        elem.attachEvent('on' + evt, function(){
            /* use call to simulate addEventListener
             * This will make sure the callback gets the element for "this"
             * and will ensure the function's first argument is the event object
             */
             cb.call(event.srcElement,event);
        });
    }
};

/* ... */

bindEvent(document,'click', function(event) 
{ var target = event.target || event.srcElement;
    
    /*Code to do stuff about a clicked element*/

    this.removeEventListener('click',arguments.callee,false);
});

它适用于点击事件。 现在,我的问题是:我可以使用什么事件来更改悬停而不是简单地单击的元素?最终目标是更改被光标悬停的元素的背景颜色。

我试过mouseovermouseenterfocusfocusin 无济于事。确切地说,我尝试在事件触发时执行console.log(),但它从未真正发生过,除了有一次我单击一个对话框并检测到我对这个元素的关注。

我目前正在使用 Chrome (v24.0),但跨浏览器解决方案将是一个不错的功能,因为我计划稍后在 Firefox 上重用该脚本。不过这不是首要任务。

【问题讨论】:

  • 你为什么要检查elem.attachEvent?如果您正在构建 Google Chrome 扩展程序,则无需为 IE8 填充...
  • @BenjaminGruenbaum 嗯......你永远不会知道。如果 Chrome 扩展系统移植到旧的 IE 版本怎么办?那么会怎么做呢?

标签: javascript google-chrome-extension dom-events mouseevent


【解决方案1】:

与悬停相关的事件是mouseovermouseout - 它们分别在鼠标进入或离开元素时触发。但是,由于该事件也会为您附加侦听器的元素的子元素触发,并且这些事件会冒泡,因此您还必须检查event.target

elem.addEventListener("mouseover", function(event) {
  if (event.target == elem) {
    // Mouse pointer entered elem
  }
}, false);

elem.addEventListener("mouseout", function(event) {
  if (event.target == elem) {
    // Mouse pointer left elem
  }
}, false);

【讨论】:

  • @BenjaminGruenbaum 即使现代浏览器默认第三个参数,您为什么不将它包括在内以保证“旧版”支持的安全?它不会伤害任何东西
  • 谢谢,我不知道我第一次测试mouseover时是否遗漏了什么,或者如果没有mouseover就不能使用mouseout,但是它们一起工作得很好。但是,在 bindEvent(document,'mouseover', function(event) { var target = event.target || event.srcElement; /* code to change hovered element here */ });mouseout 的等效项中,target.style.backgroundColor 总是返回 rgb(255, 255, 255) 是否正常? (.background 也是)
猜你喜欢
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 2017-08-05
  • 2015-07-31
相关资源
最近更新 更多