私はグーグルで調べて、人々がjQueryプラグインでsetTimeoutを試みているという同様の問題に出くわしましたが、答えに苦労しているため、これは怠惰な投稿ではありません.
一部のコンテンツを非表示にするために animate を呼び出すのを遅らせようとしています。たとえば、ユーザーがある領域にカーソルを合わせると、さらにいくつかのコンテンツが表示され、元のコンテンツが非表示になります。次に、ユーザーが 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);