Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.12.2014, 20:34
Профессор
Отправить личное сообщение для Tecvid Посмотреть профиль Найти все сообщения от Tecvid
 
Регистрация: 13.12.2013
Сообщений: 175

как остановить таймер первого вызова при втором вызове
есть такая ситуция:

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);
}

можно ли этот же результат как-то получить бнз использования глобальной переменной?
Ответить с цитированием
  #2 (permalink)  
Старый 07.12.2014, 17:48
Аватар для Cuntmann
Аспирант
Отправить личное сообщение для Cuntmann Посмотреть профиль Найти все сообщения от Cuntmann
 
Регистрация: 26.01.2014
Сообщений: 74

извращение, конечно, но:

<!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>
Ответить с цитированием
  #3 (permalink)  
Старый 07.12.2014, 18:25
Профессор
Отправить личное сообщение для Tecvid Посмотреть профиль Найти все сообщения от Tecvid
 
Регистрация: 13.12.2013
Сообщений: 175

Сообщение от Cuntmann
извращение, конечно, но:
о Боже, пока что не смог вникнуть что там творится, но всё ольшое спасибо за желание и попытку помочь!)
Ответить с цитированием
  #4 (permalink)  
Старый 07.12.2014, 18:31
Профессор
Отправить личное сообщение для Tecvid Посмотреть профиль Найти все сообщения от Tecvid
 
Регистрация: 13.12.2013
Сообщений: 175

Cuntmann,
мне ещё вот такое посоветовали, через замыкание, держите, вдруг вам тоже понадобится

var doSmth = (function() {
    var timer = 0;
    return function(arg1, arg2, callback) {
        if(!timer) {
            if(callback)
                timer = setTimeout(function(){
                    callback();
                    timer = 0;
                }, 7000);
        }
    };
})();
Ответить с цитированием
  #5 (permalink)  
Старый 07.12.2014, 18:42
Профессор
Отправить личное сообщение для Tecvid Посмотреть профиль Найти все сообщения от Tecvid
 
Регистрация: 13.12.2013
Сообщений: 175

рони,
мм похоже что да, но точно такое я скопировал в другой форум, там меня поняли как ни странно) учту в след раз ваш совет)
Ответить с цитированием
  #6 (permalink)  
Старый 07.12.2014, 18:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 29,800

Tecvid,
ok
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jquery dialog запускается только при втором обращении Фоныч jQuery 6 19.02.2014 15:04
setTimeout время при очередном вызове функции ShutTap Элементы интерфейса 4 06.12.2012 23:17
как сделать выпадающий список, чтобы второй зависил от значения первого???? zsaz jQuery 2 16.07.2010 20:12
Как разделять страницы при выводе отчета ilshat Events/DOM/Window 7 10.12.2009 10:24
Как сделать, чтобы 2 ссылки отображались как hover при наведении мышкой на любую? Ava Элементы интерфейса 5 19.05.2009 23:24