Реклама на сайте Advertise with us

Javascript setInterval вопрос.

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 31.10.03
Сообщения: 730
Рейтинг: 336

Ссылка на сообщениеДобавлено: 10/10/13 в 14:30       Ответить с цитатойцитата 

Код такой:
Код:

<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.
При повторном клике с незаконченным таймером - чтобы он запускался заново с нуля.

0
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 10/10/13 в 14:50       Ответить с цитатойцитата 

попробуй так:
Код:

<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 для экономии памяти браузера

1
 



С нами с 31.10.03
Сообщения: 730
Рейтинг: 336

Ссылка на сообщениеДобавлено: 11/10/13 в 08:27       Ответить с цитатойцитата 

ibiz: ну вот при первом клике он начинает считать первый каунтер до 15, а при втором - запускает новый, но при этом продолжает старый крутить тоже.

0
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 11/10/13 в 08:46       Ответить с цитатойцитата 

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>

1
 



С нами с 31.10.03
Сообщения: 730
Рейтинг: 336

Ссылка на сообщениеДобавлено: 11/10/13 в 10:00       Ответить с цитатойцитата 

Нагуглил такое вот, в итоге:

Код:

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

И при нужном клике вызываю сначала ресет, потом сет.

0
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 11/10/13 в 12:22       Ответить с цитатойцитата 

в данной задаче вместо setInterval следует использовать setTimeout... так что лучше с ним искать решение trollface.png

0
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 11/10/13 в 18:46       Ответить с цитатойцитата 

ibiz писал:
в данной задаче вместо setInterval следует использовать setTimeout

Устал уже и не пойму нихуя с чего это вдруг, если вот: http://jsfiddle.net/yacc/beNdg/

-1
 
+


С нами с 19.12.06
Сообщения: 129
Рейтинг: 31

Ссылка на сообщениеДобавлено: 12/11/13 в 04:05       Ответить с цитатойцитата 

Рабочий код :

Код:

<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 зацикливался

1
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 12/11/13 в 07:58       Ответить с цитатойцитата 

Yacc писал:
Устал уже и не пойму нихуя с чего это вдруг, если вот: http://jsfiddle.net/yacc/beNdg/


почитай может будет интересно http://reallifejs.com/brainchunks/repeated-events-timeout-or-interval/

0
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 12/11/13 в 10:13       Ответить с цитатойцитата 

ibiz писал:
почитай может будет интересно

Почитал и один хуй не понял почему (цитирую тебя) "в данной задаче вместо setInterval следует использовать setTimeout"? Покажи мне сценарий в котором мой код не будет работать?

0
 



С нами с 03.02.11
Сообщения: 842
Рейтинг: 301

Ссылка на сообщениеДобавлено: 12/11/13 в 10:27       Ответить с цитатойцитата 

Yacc: ibiz как бы тебе говорит, что, зачем просто, если можно сложно. хоккей на костылях smail101.gif
ibiz писал:
для экономии памяти браузера
есть инфа покурить? сколько, 200 байтов экономия есть? если да, то, конечно, в полнейшей заботе о 200 байтах клиента нужно юзать такие костыли. smail101.gif

0
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 12/11/13 в 11:08       Ответить с цитатойцитата 

Yacc писал:
Почитал и один хуй не понял почему (цитирую тебя) "в данной задаче вместо setInterval следует использовать setTimeout"? Покажи мне сценарий в котором мой код не будет работать?


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

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »