我搜索了一些並且遇到了很多類似的問題,其中有人試圖在jQuery插件中設置超時值,但是我正在努力解答這個問題,這不是一個懶惰的帖子。jQuery插件中忽略的setTimeout時間間隔
我試圖通過調用動畫來延遲隱藏某些內容,例如,如果用戶將鼠標懸停在某個區域上,則會有更多內容進入視圖並隱藏原始內容。然後,當用戶在2秒後移開鼠標時,返回原始內容。
雖然忽略超時,但動畫仍按預期工作。這是我無法控制的!
任何與代碼的協助將一如既往的非常感謝!
下面是簡單的代碼,專注於動畫,但我留在原地插件結構: -
;(function($){
$.fn.extend({
pluginName: function(options) {
// - Settings list and the default values
var defaults = {
width: this.css('width'),
};
var options = $.extend({}, defaults, options);
return this.each(function() {
// -- Globals
var o = options;
var timeoutID;
function deceptionAnimate(display) {
if(display == 1) {
obj.clearQueue().animate({
'top': 0,
'left': -o.width
}, o.interval, o.easing);
} else if(display == 0) {
obj.clearQueue().animate({
'top': 0,
'left': 0
}, o.interval, o.easing)
}
}
function delaydeceptionAnimate() {
timeoutID = window.setTimeout(deceptionAnimate(0), 2000);
}
// ---- Initiate
function init() {
// ----- Animate
$(document).on(o.eventTrigger, wrapperID, function() {
deceptionAnimate(1);
});
$(document).on('mouseout', wrapperID, function() {
delaydeceptionAnimate(0);
});
}
// Call
init();
});
}
});
})(jQuery);
就是這樣,如果不清楚,'deceptionAnimate(0)'是一個函數* call *; 'deceptionAnimate'是一個函數*參考*。當計時器滴答出來時,你想給'setTimeout'一個函數來調用,所以你應該給它一個函數引用。 – 2013-02-21 16:08:10
非常感謝,並感謝參考文獻的解釋,這兩方面的確幫助我理解了這裏的問題。我決定以此作爲答案,因爲我在尋找的是一個解決方案,它可以讓我修改欺騙動畫函數來處理延遲。 – KryptoniteDove 2013-02-21 17:28:09
@kolink,我有同樣的問題,請看看http://stackoverflow.com/questions/19178170/settimeout-not-working-with-custom-jquery-plugin – 2013-10-04 09:53:25