Javascript onHover事件

Javascript onHover事件,javascript,javascript-events,Javascript,Javascript Events,有没有一种规范的方法可以使用现有的onmouseover、onmouseout和某种计时器来设置jsonhover事件?或者仅当且仅当用户在元素上悬停一定时间时,使用任何方法触发任意函数。您能澄清您的问题吗?在这种情况下,“ohHover”是什么?它如何对应于悬停时间的延迟 也就是说,我想你可能想要的是 var timeout; element.onmouseover = function(e) { timeout = setTimeout(function() { //

有没有一种规范的方法可以使用现有的onmouseover、onmouseout和某种计时器来设置jsonhover事件?或者仅当且仅当用户在元素上悬停一定时间时,使用任何方法触发任意函数。

您能澄清您的问题吗?在这种情况下,“ohHover”是什么?它如何对应于悬停时间的延迟

也就是说,我想你可能想要的是

var timeout;
element.onmouseover = function(e) {
    timeout = setTimeout(function() {
        // ...
    }, delayTimeMs)
};
element.onmouseout = function(e) {
    if(timeout) {
        clearTimeout(timeout);
    }
};

或者
addEventListener
/
attachEvent
或者您最喜欢的库的事件抽象方法。

我认为您不需要/想要超时

onhover(hover)将被定义为“在”某物上的时间段。伊姆霍

onmouseover = start...

onmouseout = ...end

为了记录在案,我做了一些事情来“伪造”IE6中的悬停事件。它相当昂贵,最后我放弃了它,取而代之的是性能。

像这样的东西怎么样

<html>
<head>
<script type="text/javascript">

var HoverListener = {
  addElem: function( elem, callback, delay )
  {
    if ( delay === undefined )
    {
      delay = 1000;
    }

    var hoverTimer;

    addEvent( elem, 'mouseover', function()
    {
      hoverTimer = setTimeout( callback, delay );
    } );

    addEvent( elem, 'mouseout', function()
    {
      clearTimeout( hoverTimer );
    } );
  }
}

function tester()
{
  alert( 'hi' );
}

//  Generic event abstractor
function addEvent( obj, evt, fn )
{
  if ( 'undefined' != typeof obj.addEventListener )
  {
    obj.addEventListener( evt, fn, false );
  }
  else if ( 'undefined' != typeof obj.attachEvent )
  {
    obj.attachEvent( "on" + evt, fn );
  }
}

addEvent( window, 'load', function()
{
  HoverListener.addElem(
      document.getElementById( 'test' )
    , tester 
  );
  HoverListener.addElem(
      document.getElementById( 'test2' )
    , function()
      {
        alert( 'Hello World!' );
      }
    , 2300
  );
} );

</script>
</head>
<body>
<div id="test">Will alert "hi" on hover after one second</div>
<div id="test2">Will alert "Hello World!" on hover 2.3 seconds</div>
</body>
</html>

var HoverListener={
addElem:函数(元素、回调、延迟)
{
如果(延迟===未定义)
{
延迟=1000;
}
无功定时器;
addEvent(elem,'mouseover',function()
{
hoverTimer=setTimeout(回调,延迟);
} );
addEvent(元素'mouseout',函数()
{
clearTimeout(悬停计时器);
} );
}
}
功能测试仪()
{
警惕(‘hi’);
}
//通用事件抽象器
功能加法器(obj、evt、fn)
{
if('undefined'!=对象的类型。添加的事件列表)
{
对象添加列表器(evt、fn、false);
}
else if('undefined'!=obj.attachEvent的类型)
{
附件(“on”+evt,fn);
}
}
addEvent(窗口“加载”,函数()
{
addElem(
document.getElementById('test')
,测试仪
);
addElem(
document.getElementById('test2')
,函数()
{
警惕(‘你好,世界!’);
}
, 2300
);
} );
将在一秒钟后在悬停时提示“hi”
将在悬停2.3秒时发出警报“Hello World!”

如果使用JQuery库,则可以使用.hover()事件,该事件合并mouseover和mouseout事件,并帮助您处理计时和子元素:

$(this).hover(function(){},function(){});
第一个函数是悬停的开始,下一个函数是结束。更多信息请访问:

我认为超时是为了防止用户将鼠标简单地放在元素上时发生事件(例如,意外情况下,或移动到界面的其他部分时。想象一下,如果单击打开菜单也悬停打开,但没有延迟;那么当用户试图在页面上移动鼠标时,用户可能会看到菜单在其他东西的上方立即打开。@IIsi 50MHz-这是很有可能的,尤其是在onmouseout清除计时器类似于上面的@Peter Bailey的回答。在我回答时,我认为OP可能对鼠标移过/移出/进入/离开事件的工作方式感到困惑,并试图让同谋者戴上手套:好建议!我认为它实际上合并了jQuery的mouseenter和mouseleave事件(两者稍有不同),顺便说一句,问题中没有提到.jQuery。您可以通过在函数参数中指定默认值,例如
function(elem,callback,delay=1000)
,完全删除if语句,其中
delay==undefined