]> source.dussan.org Git - jquery-ui.git/commitdiff
Accordion demo: Clean up hoverintent implementation to avoid using jQuery.event.handl...
authorScott González <scott.gonzalez@gmail.com>
Wed, 27 Feb 2013 16:27:44 +0000 (11:27 -0500)
committerScott González <scott.gonzalez@gmail.com>
Wed, 27 Feb 2013 16:27:50 +0000 (11:27 -0500)
demos/accordion/hoverintent.html

index 023682d4b428b3a92e30254f4f423ba1fec1c424..0ff63a32142ca1ea71fc4837bd5a580579caf1e7 100644 (file)
                });
        });
 
-       var cfg = ($.hoverintent = {
-               sensitivity: 7,
-               interval: 100
-       });
-
+       /*
+        * hoverIntent | Copyright 2011 Brian Cherne
+        * http://cherne.net/brian/resources/jquery.hoverIntent.html
+        * modified by the jQuery UI team
+        */
        $.event.special.hoverintent = {
                setup: function() {
                        $( this ).bind( "mouseover", jQuery.event.special.hoverintent.handler );
                        $( this ).unbind( "mouseover", jQuery.event.special.hoverintent.handler );
                },
                handler: function( event ) {
-                       var that = this,
+                       var currentX, currentY, timeout,
                                args = arguments,
                                target = $( event.target ),
-                               cX, cY, pX, pY;
+                               previousX = event.pageX,
+                               previousY = event.pageY;
 
                        function track( event ) {
-                               cX = event.pageX;
-                               cY = event.pageY;
+                               currentX = event.pageX;
+                               currentY = event.pageY;
                        };
-                       pX = event.pageX;
-                       pY = event.pageY;
+
                        function clear() {
                                target
                                        .unbind( "mousemove", track )
-                                       .unbind( "mouseout", arguments.callee );
+                                       .unbind( "mouseout", clear );
                                clearTimeout( timeout );
                        }
+
                        function handler() {
-                               if ( ( Math.abs( pX - cX ) + Math.abs( pY - cY ) ) < cfg.sensitivity ) {
+                               var prop,
+                                       orig = event;
+
+                               if ( ( Math.abs( previousX - currentX ) +
+                                               Math.abs( previousY - currentY ) ) < 7 ) {
                                        clear();
-                                       event.type = "hoverintent";
-                                       // prevent accessing the original event since the new event
+
+                                       event = $.Event( "hoverintent" );
+                                       for ( prop in orig ) {
+                                               if ( !( prop in event ) ) {
+                                                       event[ prop ] = orig[ prop ];
+                                               }
+                                       }
+                                       // Prevent accessing the original event since the new event
                                        // is fired asynchronously and the old event is no longer
                                        // usable (#6028)
-                                       event.originalEvent = {};
-                                       jQuery.event.handle.apply( that, args );
+                                       delete event.originalEvent;
+
+                                       target.trigger( event );
                                } else {
-                                       pX = cX;
-                                       pY = cY;
-                                       timeout = setTimeout( handler, cfg.interval );
+                                       previousX = currentX;
+                                       previousY = currentY;
+                                       timeout = setTimeout( handler, 100 );
                                }
                        }
-                       var timeout = setTimeout( handler, cfg.interval );
-                       target.mousemove( track ).mouseout( clear );
-                       return true;
+
+                       timeout = setTimeout( handler, 100 );
+                       target.bind({
+                               mousemove: track,
+                               mouseout: clear
+                       });
                }
        };
        </script>