Javascript onHover事件
有没有规范的方式来build立一个JS onHover事件与现有的onmouseover,onmouseout和某种types的计时器? 或者只是任何方法来触发一个任意的函数,当且仅当用户已经超过了元素一定的时间。
这样的事情呢?
<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>
你能澄清你的问题吗? 在这种情况下,什么是“哦,哦”,它是如何对应于延迟hover时间?
也就是说,我想你可能想要的是…
var timeout; element.onmouseover = function(e) { timeout = setTimeout(function() { // ... }, delayTimeMs) }; element.onmouseout = function(e) { if(timeout) { clearTimeout(timeout); } };
或者addEventListener
/ attachEvent
或者你最喜欢的库的事件抽象方法。
如果您使用JQuery库,则可以使用合并mouseover和mouseout事件的.hover()事件,并帮助您处理时间和子元素:
$(this).hover(function(){},function(){});
第一个function是hover的开始,下一个是结束。 阅读更多: http : //docs.jquery.com/Events/hover
我不认为你需要/希望超时。
onhover(hover)将被定义为“over”的时间段。 恕我直言
onmouseover = start... onmouseout = ...end
为了logging我已经做了一些东西,以“假”在IE6hover事件。 这是相当昂贵的,最后我放弃了它的performance。