Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Javascript setInterval вопрос.
цитата
10/10/13 в 14:30
 MilkSucker
Код такой:
Код:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<script>

jQuery(document).ready(function ($) {

   function pad ( val ) { return val > 9 ? val : "0" + val; }

   $("div#seconds").click(function(){
      clearInterval(interv);
      var mySec = 0;
      var interv = setInterval(CountIt, 1000);
   });
   
   function CountIt(){
      mySec++;
      if (mySec <=15) {
         $("#seconds").html(pad(mySec));
      }
   }
   
});
</script>
<div id="seconds">00</div>


Объясните, почему при клике не хочет запускаться интервал? Не врубаюсь я в этот яваскрипт...
Хочу чтобы при клике по диву - запускался счетчик, который доходит максимум до 15.
При повторном клике с незаконченным таймером - чтобы он запускался заново с нуля.
цитата
10/10/13 в 14:50
 ibiz
попробуй так:
Код:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<script>

jQuery(document).ready(function ($) {

    function pad ( val ) { return val > 9 ? val : "0" + val; }

    $("div#seconds").click(function(){
       clearInterval(interv);
       var mySec = 0;
       var interv = setInterval(
          function(){
             mySec<15 ? $("#seconds").html(pad(++mySec)):''
             },
          1000);
    });
});
</script>
<div id="seconds">00</div>


P.S. в данном случае setInterval следует заменить на setTimeout для экономии памяти браузера
цитата
11/10/13 в 08:27
 MilkSucker
ibiz: ну вот при первом клике он начинает считать первый каунтер до 15, а при втором - запускает новый, но при этом продолжает старый крутить тоже.
цитата
11/10/13 в 08:46
 ibiz
MilkSucker:
Код:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<script>

jQuery(document).ready(function ($) {
var interv
     function pad ( val ) { return val > 9 ? val : "0" + val; }

     $("div#seconds").click(function(){
        clearInterval(interv);
        var mySec = 0;
        interv = setInterval(
           function(){
              mySec<15 ? $("#seconds").html(pad(++mySec)):''
              },
           1000);
     });
});
</script>
<div id="seconds">00</div>
цитата
11/10/13 в 10:00
 MilkSucker
Нагуглил такое вот, в итоге:

Код:

var myTimer = function(){
    var time = 15;
    var timer;
    this.set = function() {
        console.log('setting up timer');
        timer = setInterval(function(){
            console.log('running time: ' + time);
        },1000);
    }
    this.reset = function(){
        console.log('clearing timer');
        clearInterval(timer);
    }
    return this;
}();

and run when you need to:
myTimer.set(); myTimer.reset();

И при нужном клике вызываю сначала ресет, потом сет.
цитата
11/10/13 в 12:22
 ibiz
в данной задаче вместо setInterval следует использовать setTimeout... так что лучше с ним искать решение trollface.png
цитата
11/10/13 в 18:46
 Yacc
ibiz писал:
в данной задаче вместо setInterval следует использовать setTimeout

Устал уже и не пойму нихуя с чего это вдруг, если вот: http://jsfiddle.net/yacc/beNdg/
цитата
12/11/13 в 04:05
 ++Trombocid++
Рабочий код :

Код:

<script src="jquery.js"></script>

<script>
   var interv=0;
   var mySec=0;
   
   function pad(val) { return val > 9 ? val : "0" + val; }
   
   function CountIt(){
      mySec++;
      if (mySec <=15) {
         $("#seconds").html(pad(mySec));
      }
   }

   $(function() {
      $("div#seconds").click(function(){
         clearInterval(interv);
         mySec = 0;
         interv = setInterval(CountIt, 1000);
      });
   });

</script>
<div id="seconds">00</div>


1. Чтобы у тебя нормально все работало, не используй загрузку с гугля файла jquery, помести к себе
2. Функции обыкновенные определяй вне document ready, вынес тебе наверх
3. Переменные чтобы определить глобальными тоже надо вынести за пределы функций на самый верх, а то у тебя действительно SetInterval зацикливался
цитата
12/11/13 в 07:58
 ibiz
Yacc писал:
Устал уже и не пойму нихуя с чего это вдруг, если вот: http://jsfiddle.net/yacc/beNdg/


почитай может будет интересно http://reallifejs.com/brainchunks/repeated-events-timeout-or-interval/
цитата
12/11/13 в 10:13
 Yacc
ibiz писал:
почитай может будет интересно

Почитал и один хуй не понял почему (цитирую тебя) "в данной задаче вместо setInterval следует использовать setTimeout"? Покажи мне сценарий в котором мой код не будет работать?
цитата
12/11/13 в 10:27
 AWD
Yacc: ibiz как бы тебе говорит, что, зачем просто, если можно сложно. хоккей на костылях smail101.gif
ibiz писал:
для экономии памяти браузера
есть инфа покурить? сколько, 200 байтов экономия есть? если да, то, конечно, в полнейшей заботе о 200 байтах клиента нужно юзать такие костыли. smail101.gif
цитата
12/11/13 в 11:08
 ibiz
Yacc писал:
Почитал и один хуй не понял почему (цитирую тебя) "в данной задаче вместо setInterval следует использовать setTimeout"? Покажи мне сценарий в котором мой код не будет работать?


я и не говорил что он не будет работать trollface.png


Эта страница в полной версии