2015-05-22 48 views
-1

我想在下面顯示的這個mouseenter上添加一個延遲。任何人都可以用這個「_on」方法來幫助我,請問?我嘗試setTimeout,但它不會工作。將延遲添加到「_on」mouseenter

這是代碼:

declareEvents: function() { 
       var me = this, 
       $el; 

       $.each(me._$listItems, function (i, el) { 
        $el = $(el);  
       me._on($el, 'mouseenter', $.proxy(me.onListItemEnter, me, i, $el)); 
}, 

我已經試過:

setTimeout(function() { 
    me._on($el, 'mouseenter', $.proxy(me.onListItemEnter, me, i, $el)); 
}, 1000); 

和:

me._on($el, 'mouseenter', setTimeout(function() { 
    $.proxy(me.onListItemEnter, me, i, $el); 
}, 1000); 

非常感謝您的幫助!

+6

是你正在使用的庫的'_on'部分嗎? –

+0

是的,我是我的jQuery UI – user3009162

+0

不要聽任何項目本身的事件,但在他們的父項上。你正在看一個簡單的[debounce](http://davidwalsh.name/javascript-debounce-function)函數。 – nietonfir

回答

3

你應該在包裝匿名函數處理程序,並清除以前的超時:

me._on($el, 'mouseenter', function() { 
    clearTimeout($(this).data('timeout')); 
    $(this).data('timeout' , setTimeout(function() { 
     $.proxy(me.onListItemEnter, me, i, $el); 
    }, 1000)); 
}); 

而且在mouseleave也許清楚超時了。

+0

謝謝你的回答,不幸的是它不適合我。我在我的問題中加入了更多的代碼,也許這將有助於找出我的問題。 – user3009162

+1

@ user3009162沒有延遲的原始代碼是否工作? – redbmk

+1

@ user3009162你應該提供一個複製你的問題的例子,例如jsFiddle –

1

jQuery UI's code有一個使用小部件中的_on來設置多個事件的示例。這可以讓您輕鬆刪除mouseleave上的超時,正如A. Wolff所建議的那樣。

declareEvents: function() { 
    var me = this; 

    $.each(me._$listItems, function(i, el) { 
    var $el = $(el); 
    clearTimeout($el.data("hoverTimeout")); 

    me._on($el, { 
     mouseenter: function() { 
     $el.data("hoverTimeout", setTimeout($.proxy(me.onListItemEnter, me, i, $el))); 
     }, 
     mouseleave: function() { 
     clearTimeout($el.data("hoverTimeout")); 
     }, 
    }); 

    }); 
}