как остановить таймер первого вызова при втором вызове
есть такая ситуция:
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, время: 15:53. |