onmousemove を監視して。onmouseover だけのイベントにする! なんのこっちゃ!?
@IE = +@_jscript +(@_jscript_version<5.9) に、してみた。
initMouseEvent の一番最後の null の使い方が、結局判りませんでした。
<!DOCTYPE html> <title></title> <style type="text/css"> * { margin : 0; } ul { padding: 0; list-style : none; } li { padding: 0; border:1px red solid; } </style> <body> <ul> <li>a <li>b <li>c <li>d <li>e <li>f <li>g </ul> <script type="text/javascript"> //@cc_on @set @IE = +@_jscript + ( @_jscript_version < 5.9 ); document./*@if( @IE == 1 ) attachEvent( 'on' + @else@*/ addEventListener( /*@end@*/ 'mousemove', (function( ) { var w = /*@if(@IE) 'clientWidth' @else@*/ 'innerWidth' /*@end@*/; var h = /*@if(@IE) 'clientHeight' @else@*/ 'innerHeight' /*@end@*/; var mx = 0, my = 0, f = false, doc; var check = function ( ) { if( f ) { /*@if(@IE) doc.fireEvent( "onmouseover" ); @else@*/ var e = doc.createEvent( 'MouseEvents' ); var win = doc.defaultView; e.initMouseEvent( "mouseover", true, true, win, 0, 0, 0, 0, 0, false, false, false, false, 0, null); doc.dispatchEvent( e ); /*@end@*/ } }; return function ( e ) { var n = e./*@if(@IE) srcElement @else@*/ target /*@end@*/; var c = ( doc = n.ownerDocument ) /*@if(@IE) [ doc.compatMode == 'CSS1Compat' ? 'documentElement' : 'body' ] /*@else@*/ .defaultView /*@end@*/; var x = e.clientX, y = e.clientY; var ex = x + x - mx, ey = y + y - my; f = false; if( ex < 0 || ey < 0 || c[w] < ex || c[h] < ey ) { f = true; setTimeout( check, 60 ); } mx = x, my = y; }; })(), false); document./*@if(@IE==1) attachEvent( 'on' + @else@*/ addEventListener( /*@end@*/ 'mouseover', (function ( ) { var m = null; return function( e ) { var n = e./*@if(@IE) srcElement @else@*/ target /*@end@*/; if( m ) m.style.backgroundColor ="#fff", m = null; if( 'LI' == n.nodeName ) { n.style.backgroundColor="#f00"; m = n; } }; })(), false); </script> </body> </html>
- 「遊び心」かぁ〜、最近余裕がないためか、盛り込めてないなぁ。
(年初めに1発書いたきり)