|
Without delay, when user hovers over a link or label. the hover event to occur immediately and that is annoying when the user is just moving the mouse across the screen.- $(function() {
- $('#container a').hover(function() {
- $('<div id="fileinfo" />').load('ReadTextFileX.aspx',
- {filename:'file.txt'},
- function() {
- $(this).appendTo('#info');
- }
- );
- },
- function() { $('#info').remove(); }
- });
- });
复制代码
After adding the HoverIntent plugin the above code was changed to the following to implement it. Very simple to implement.- $(function() {
- hiConfig = {
- sensitivity: 3, // number = sensitivity threshold (must be 1 or higher)
- interval: 200, // number = milliseconds for onMouseOver polling interval
- timeout: 200, // number = milliseconds delay before onMouseOut
- over: function() {
- $('<div id="fileinfo" />').load('ReadTextFileX.aspx', {filename:'file.txt'},
- function() {
- $(this).appendTo('#info');
- }
- );
- }, // function = onMouseOver callback (REQUIRED)
- out: function() { $('#info').remove(); } // function = onMouseOut callback (REQUIRED)
- }
- $('#container a').hoverIntent(hiConfig)
- }
复制代码
the hoverIntent plugin for jquery: http://cherne.net/brian/resources/jquery.hoverIntent.htmlIt's absolutely perfect and I've used it on nearly every project that required mouseover activation of menus etc...
There is one gotcha to this approach, some interfaces are devoid of a 'hover' state eg. mobile browsers like safari on the iphone. You may be hiding an important part of the interface or navigation with no way to open it on such a device. You could get round this with device specific CSS.
non-plugin solution- $(function() {
- var timer;
- $('#container a').hover(function() {
- if(timer) {
- clearTimeout(timer);
- timer = null
- }
- timer = setTimeout(function() {
- $('<div id="fileinfo" />').load('ReadTextFileX.aspx',
- {filename:'file.txt'},
- function() {
- $(this).appendTo('#info');
- }
- );
- }, 500)
- },
- // mouse out
- });
- });
复制代码
if you happen to be an unfortunate sod who works on a website with a long and protracted process for approval of jQuery plugins, here's a quick and dirty solution which worked well for me:- $('li.contracted').hover(function () {
- var expanding = $(this);
- var timer = window.setTimeout(function () {
- expanding.data('timerid', null);
- ... do stuff
- }, 300);
- //store ID of newly created timer in DOM object
- expanding.data('timerid', timer);
- }, function () {
- var timerid = $(this).data('timerid');
- if (timerid != null) {
- //mouse out, didn't timeout. Kill previously started timer
- window.clearTimeout(timerid);
- }
- });
复制代码
This one's just for expanding an <li> if the mouse has been on it for longer than 300ms.
The easy. Delay open menu if user keeping mouseenter on obj over 300ms:- var sleep = 0;
- $('#category li').mouseenter(function() {
- sleep = 1;
- $('#category li').mouseleave(function() {
- sleep = 0;
- });
- var ob = $(this);
- setTimeout(function() {
- if(sleept==1) {
- [...] Example:
- $('#'+ob.attr('rel')).show();
- }
- },300);
- });
复制代码
From: stackoverflow
|
|