我嘗試在一個元素上設置超時,使用jQuery插件觸發。根據條件,該超時在功能中再次設置。但是,在設置另一個(如果我重新啓動插件)之前,我想先清除此元素的超時值,或者手動清除此元素。清除在jQuery插件中啓動的非全局超時
<div id="aaa" style="top: 0; width: 100px; height: 100px; background-color: #ff0000;"></div>
這裏是我的代碼(現在http://jsfiddle.net/Ppvf9/)
$(function() {
$('#aaa').myPlugin(0);
});
(function($) {
$.fn.myPlugin = function(loops) {
loops = loops === undefined ? 0 : loops;
this.each(function() {
var el = $(this),
loop = loops,
i = 0;
if (loops === false) {
clearTimeout(el.timer);
return;
}
var animate = function() {
var hPos = 0;
hPos = (i * 10) + 'px';
el.css('margin-top', hPos);
if (i < 25) {
i++;
} else {
if (loops === 0) {
i = 0;
} else {
loop--;
if (loop === 0) {
return;
} else {
i = 0;
}
}
}
el.timer = window.setTimeout(function() {
animate();
}, 1000/25);
};
clearTimeout(el.timer);
//$('<img/>').load(function() {
// there's more here but it's not very important
animate();
//});
});
return this;
};
})(jQuery);
如果我讓$('#element').myPlugin();
,它的推出。如果我再來一次,則有兩次超時(在控制檯中通過執行$('#aaa').myPlugin(0);
來查看)。我希望能夠通過$('#element').myPlugin(false);
來解決這個問題。
我在做什麼錯?
編輯: 解決通過調節兩個變種訪問this
和$(this)
這裏:http://jsfiddle.net/Ppvf9/2/
你的意思是......使計時器var屬性'el'? (我怎麼能?) – Joan
我編輯了我的答案 – akonsu
嗯,我試着在函數中添加'clearTimeout(el.timer);',並在if === false條件下(用'el.timer = window.setTimeout (...); '),它不起作用... – Joan