Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.12.2015, 02:56
Аспирант
Отправить личное сообщение для m1lk1way Посмотреть профиль Найти все сообщения от m1lk1way
 
Регистрация: 24.12.2015
Сообщений: 41

ClearInterval не срабатывает
Для практики пишу свой таймер обратного отсчета. Возникла следующая проблема: не могу остановить таймер. ClearInterval не срабатывает.
Код:
function Countdowner(data){
  };

  Countdowner.prototype = {
    injectTo: function(element) {
    },
    init: function(y,m,d) {
      this.todat = new Date(y,m,d);
    },
    start: function() {
      setInterval(this.redraw.bind(this), 1000);
    },
    stop: function() {
      clearInterval(this.redraw);
    },
    redraw: function() {
      this.fromdate = Date.now();
      console.log('<--------------------------------------->');
      this.resdate = (this.todat-this.fromdate);

      this.remDays = Math.floor(this.resdate/1000/60/60/24);
      this.resdate -= this.remDays*1000*60*60*24;
      this.remHours = Math.floor(this.resdate/1000/60/60);
      this.resdate -= this.remHours*1000*60*60;
      this.remMin = Math.floor(this.resdate/1000/60);
      this.resdate -=this.remMin*1000*60;
      this.remSec = Math.floor(this.resdate/1000);

      console.log('Days:'+this.remDays+' Hours:'+this.remHours+' Minutes:'+this.remMin+' Seconds:'+this.remSec);
    }
  };

var count1 = new Countdowner();
count1.init(2016, 0, 1);
count1.start();
Ответить с цитированием
  #2 (permalink)  
Старый 27.12.2015, 03:03
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

m1lk1way,

start: function() {
  this._timerID = setInterval(this.redraw.bind(this), 1000);
},
stop: function() {
  clearInterval(this._timerID);
},
Ответить с цитированием
  #3 (permalink)  
Старый 27.12.2015, 03:08
Аспирант
Отправить личное сообщение для m1lk1way Посмотреть профиль Найти все сообщения от m1lk1way
 
Регистрация: 24.12.2015
Сообщений: 41

Decode, Спасибо и с наступающим
Ответить с цитированием
  #4 (permalink)  
Старый 27.12.2015, 15:16
Аспирант
Отправить личное сообщение для m1lk1way Посмотреть профиль Найти все сообщения от m1lk1way
 
Регистрация: 24.12.2015
Сообщений: 41

Снова споткнулся) При вызове injectTo element.appendChild оказывается хитрее меня, не могу понять что ему не нравится.
function Countdowner(data){

    this.self = document.createElement('div');
    this.self.classList.add('Countdowner');

    this.days = document.createElement('span');
    this.days.classList.add('days');
    this.hours = document.createElement('span');
    this.hours.classList.add('hours');
    this.minutes = document.createElement('span');
    this.minutes.classList.add('minutes');
    this.seconds = document.createElement('span');
    this.seconds.classList.add('seconds');

    this.self.appendChild(this.days);
    this.self.appendChild(this.hours);
    this.self.appendChild(this.minutes);
    this.self.appendChild(this.seconds);
  };

  Countdowner.prototype = {
    injectTo: function(element) {
      console.log(this.self); // проверим как выстроился элемент который будем вставлять в DoM
      element.appendChild(this.self); //element.appendChild is not a function(…)
    },
    init: function(y,m,d) {
      this.todat = new Date(y,m,d);
    },
    start: function() {
      clearInterval(this._timerID);
      this._timerID = setInterval(this.getDate.bind(this), 1000);
    },
    stop: function() {
      clearInterval(this._timerID);
    },
    createDom: function(getDate){
      console.log(getDate());
    },
    getDate: function() {
      this.fromdate = Date.now();
      this.resdate = (this.todat-this.fromdate);
      this.remDays = Math.floor(this.resdate/1000/60/60/24);
      this.resdate -= this.remDays*1000*60*60*24;
      this.remHours = Math.floor(this.resdate/1000/60/60);
      this.resdate -= this.remHours*1000*60*60;
      this.remMin = Math.floor(this.resdate/1000/60);
      this.resdate -=this.remMin*1000*60;
      this.remSec = Math.floor(this.resdate/1000);
      console.log('Days:'+this.remDays+' Hours:'+this.remHours+' Minutes:'+this.remMin+' Seconds:'+this.remSec);
      return([this.remDays, this.remHours, this.remMin, this.remSec]);
    }
  };

var count1 = new Countdowner();
count1.init(2016, 0, 1);
count1.start();
Ответить с цитированием
  #5 (permalink)  
Старый 27.12.2015, 16:32
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

m1lk1way, вставляется же.

count1.injectTo(document.body);
Ответить с цитированием
  #6 (permalink)  
Старый 27.12.2015, 17:14
Аспирант
Отправить личное сообщение для m1lk1way Посмотреть профиль Найти все сообщения от m1lk1way
 
Регистрация: 24.12.2015
Сообщений: 41

глупая ошибка)) спасибо
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не срабатывает событие mouseup в chrome Евгений_Лазаренко Events/DOM/Window 6 28.01.2015 12:06
clearInterval срабатывает только со второго раза nikolayseo Firefox/Mozilla 3 08.12.2014 19:25
onclick срабатывает со 2 раза в ie djonA Общие вопросы Javascript 19 25.03.2013 01:07
AJAX запрос в Internet Explorer срабатывает через раз nikolayseo jQuery 5 13.11.2012 00:13
Нажатие по дате в календаре срабатывает только со второго клика afr0 Events/DOM/Window 4 31.10.2012 13:39