За последние 24 часа нас посетили 21947 программистов и 995 роботов. Сейчас ищут 668 программистов ...

Как запустить функцию после её остановки ?

Тема в разделе "JavaScript и AJAX", создана пользователем Khaybulla, 9 авг 2018.

Метки:
  1. Khaybulla

    Khaybulla Активный пользователь

    С нами с:
    4 мар 2016
    Сообщения:
    89
    Симпатии:
    2
    Как реализовать после того как сработает clearInterval(timer); после таймаута запустить функцию снова есть такой код но функция после таймаута не запускается какое решение можете предложить ?

    Код (Javascript):
    1. var timer = setInterval(countDown, 10);
    2. function countDown() {
    3.     var time = parseInt( (date - new Date().getTime()) / 1000 );
    4.     if(--time < 0) {
    5.         clearInterval(timer);
    6.         (function testtimer() {
    7.             rand = Math.floor(Math.random() * 86400 + 3600);
    8.             trand = setTimeout(function () {
    9.                 $('.timer').text(rand);
    10.                 testtimer();
    11.             }, 200);
    12.         })();
    13.  
    14.         setTimeout(function () {
    15.             clearTimeout(trand);
    16.             timer = setInterval(countDown, 10);
    17.         }, 10000);
    18.         return;
    19.     }
    20. };
     
  2. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @Khaybulla Через какой промежуток тебе надо запускать твою функцию?

    Например вот этот код через 10 секунд запустит функцию и будет ее повторять раз в 10 секунд:
    Код (Javascript):
    1. setInterval (function (){
    2.         test ();
    3. }, 10000);
    4.  
    5. function test() {
    6.     console.log('тест');
    7. }
    Если тебе нужно чтобы внутри функции запускалась постоянно другая функция через какой то промежуток времени:
    Код (Javascript):
    1. setTimeout (function (){
    2.         test ();
    3. }, 10000);
    4.  
    5. function test() {
    6.     console.log('тест');
    7.     setInterval (function (){
    8.         timer ();
    9.     }, 10000);
    10. }
    11.  
    12. function timer(){
    13.       console.log('таймер запущен');
    14. }
    И да, по поводу:
    1 секунда равна 1000, имей ввиду.
    [​IMG]

    Твой код я бы написал как то так:
    Код (Javascript):
    1. setInterval (function (){
    2.        countDown();
    3. }, 1000);
    4.  
    5. function countDown() {
    6.     var time = parseInt( (date - new Date().getTime()) / 1000 );
    7.     if(--time < 0) {
    8.         testtimer();
    9.     }
    10. };
    11.  
    12. function testtimer() {
    13.    rand = Math.floor(Math.random() * 86400 + 3600);
    14.    $('.timer').html(rand);
    15. }
    $('.timer') и вместо этого используй айдишник лучше.
     
    #2 Artur_hopf, 10 авг 2018
    Последнее редактирование: 10 авг 2018
    Khaybulla нравится это.
  3. Khaybulla

    Khaybulla Активный пользователь

    С нами с:
    4 мар 2016
    Сообщения:
    89
    Симпатии:
    2
    setInterval 10 поставил что бы таймер постоянно обновлялся на странице, не знаю правильно или нет но мне надо что бы отсчет таймера отображался на странице и после отсчета что бы запускался снова функция countDown я останавливаю функцию testtimer которая рандомно выдает секунды и после ее остановки мне нужно запустить функцию countDown заново
     
  4. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Лично я из этого текста не понял что ты хочешь, хоть точки бы ставил.
    Например вот, у тебя есть 2 функции, назовем их А и Б. Что ты хочешь что бы они делали, вот например объясни в таком виде:
    Код (Javascript):
    1. var i =0;
    2. function a (){
    3.     var rand = Math.floor(Math.random()*86400+3600); // хочу чтобы тут каждую секунду генерировалось какое то число
    4.     //так же хочу чтобы через 10 секунд еще и выполнилась другая функция
    5.    i++;
    6.     if(i ==10){
    7.       b (rand); // передаем в функцию rand
    8.       i = 0;
    9.     };
    10. }
    11.  
    12. function b(rand){
    13.        $('.timer').html(rand);
    14. };
    15. setInterval(a, 1000); // раз в секунду выполняется код в функции
    То есть в данном примере функция А выполняется каждую секунду, а функция Б раз в 10 секунд.
    Так вот на пальцах объясни чего конкретно ты хочешь)
     
    Khaybulla нравится это.
  5. Khaybulla

    Khaybulla Активный пользователь

    С нами с:
    4 мар 2016
    Сообщения:
    89
    Симпатии:
    2
    Нужно что бы на экране был отсчет таймера 10 секунд после этого нужно что бы каждую секунду появлялись рандомные числа и через 10 секунд на выходящем числе остановилось и пошел опять таймер в 10 секунд и так по кругу.

    В данный момент у меня есть таймер 10 сек после него появляются рандомные числа каждую секунду и останавливается через 10 но по кругу пустить не получается... незнаю как обратно запустить функцию с самого начала.
     
  6. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Вот теперь понятно, можешь так написать.Хотя думаю можно и проще сделать.
    HTML:
    1.  
    2. <div id="timer"></div>
    3.  
    Код (Javascript):
    1. window.addEventListener('load', timer);
    2. function timer(){
    3.     var check = true, i = 0;
    4.     setInterval(function() {
    5.         if(check){
    6.             i++;
    7.             $('#timer').html(i);
    8.             if(i==10){
    9.                 check = !check;
    10.                 i = 0;
    11.             };
    12.         };
    13.         if(!check){
    14.             s++;
    15.             var rand =Math.floor(Math.random()*86400+3600);
    16.             $('#timer').html(rand);
    17.             if(i==10){
    18.                   check = true;
    19.                   i = 0;
    20.              };
    21.         };
    22.     },1000);
    23. }
    </script>
     
    #6 Artur_hopf, 10 авг 2018
    Последнее редактирование: 10 авг 2018
    Khaybulla нравится это.
  7. Khaybulla

    Khaybulla Активный пользователь

    С нами с:
    4 мар 2016
    Сообщения:
    89
    Симпатии:
    2
    Огромное спасибо!
     
  8. Khaybulla

    Khaybulla Активный пользователь

    С нами с:
    4 мар 2016
    Сообщения:
    89
    Симпатии:
    2
    Еще вопрос как можно сделать что бы подобный скрипт работал без перебойно а не после открытия страницы ?

    В данный момент у меня есть переменная с датой до которой идет отсчет таймера, какими способами можно реализовать что бы после того как таймер остановится начали выпадать рандомные числа вне зависимости открыта страница или нет ?

    Смотрел способ с cron но там как я понял нужно сразу указывать через какой промежуток будет запускаться скрипт, а если время таймера находится в переменной и постоянно меняется как быть ?
     
  9. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    HTML:
    1.  
    2. <divid="timer"></div>
    3.  
    Код (Javascript):
    1. function timer(){
    2.     var time = new Date().getSeconds();
    3.     var html;
    4.     if(time < 10 || time > 19 && time < 30 || time > 39 && time < 50){
    5.         html = time;   //сделай так чтобы отображалась только 2ая цифра
    6.     }else{
    7.         html = Math.floor(Math.random()*86400+3600);
    8.         }
    9.     $('#timer').html(html);
    10.     setTimeout(timer, 1000);
    11. }
    12. timer();
    Не помню как показать только 2ую цифру, погугли сам