как остановить таймер первого вызова при втором вызове
есть такая ситуция:
function doSmth(arg1, arg2, callback) { // тут какие то действия if (callback) setTimeout(callback, 7000); } elem.onclick = function () { doSmth(arg1, arg2, function() { anotherElem.style.display = "none"; }); }; elem2.onclick = function () { doSmth(arg1, arg2, function() { elemElem.style.display = "none"; }); }; если кликнуть первый элемент, то через 7 секунд другой элемент должен исчезнуть, а если кликнуть второй элемент, то опять же тот самый другой элемент должен исчезнуть через 7 секунд, но если второй элемент был нажат до того как таймер первого вызова сработал, то второй таймер игнорируется (ну или мне так кажется), так как другой элемент исчезает через 7 секунд после клика первого, а надо чтобы исчез через 7 секунд после клика по второму, как бы клик по второму элементу увеличивает жизнь ещё на 7 секунд :) если опять нажать первый либо второй, то ещё на 7 секунд, и т д, пока ничего не кликнется и другой элемент исчезнет я сделал так, через id, но пришлось использовать глобальную переменную: function doSmth(arg1, arg2, callback) { if (window.timer) clearTimer(timer); // тут какие то действия if (callback) timer = setTimeout(callback, 7000); } можно ли этот же результат как-то получить бнз использования глобальной переменной? |
извращение, конечно, но:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>WTF</title> <style> body{text-align:center;font-family:Verdana,Helvetica;font-size:12px;color:#000;background-color:#fff;margin-top:250px;} input{margin-left:50px;margin-right:50px;cursor:pointer;letter-spacing:1px;font-weight:bold;border:none;background-color:transparent;} #elem{margin-bottom:50px;} </style> <script> function _(id){return document.getElementById(id);} function doSmth(arg1,arg2,callback){ // тут какие то действия if(callback){ _('test').innerHTML='doSmth.timer = '+(doSmth.timer || 'is not defined yet'); doSmth.stoptimer(); doSmth.timer=setTimeout(callback,7000); } } Function.prototype.stoptimer = function(){ try{clearTimeout(this.timer);} catch(e){} } onload=function(){ var e1=_('el1'),e2=_('el2'),e3=_('elem'); e1.onclick=function(){ doSmth('','',function(){e3.style.visibility="hidden";}); }; e2.onclick=function(){ doSmth('','',function(){e3.style.visibility="hidden";}); }; } </script> </head> <body> <div id="elem">Исчезающий элемент<br /><br /><div id="test"></div></div> <input type="button" id="el1" value="Element 1" /> <input type="button" id="el2" value="Element 2" /> </body> </html> |
Цитата:
|
Cuntmann,
мне ещё вот такое посоветовали, через замыкание, держите, вдруг вам тоже понадобится :) var doSmth = (function() { var timer = 0; return function(arg1, arg2, callback) { if(!timer) { if(callback) timer = setTimeout(function(){ callback(); timer = 0; }, 7000); } }; })(); |
рони,
мм похоже что да, но точно такое я скопировал в другой форум, там меня поняли как ни странно) учту в след раз ваш совет) |
Tecvid,
ok |
Часовой пояс GMT +3, время: 10:41. |