Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.03.2019, 13:36
Аспирант
Отправить личное сообщение для yaparoff Посмотреть профиль Найти все сообщения от yaparoff
 
Регистрация: 26.04.2016
Сообщений: 91

Убить setInterval
Пытаюсь убить setInterval с помощью clearInterval. Но получается как то не очень.
Дело в том что я пытаюсь двигать один блок с помощью setInterval и все вроде бы ок, но когда блок заканчивает двигаться setInterval все равно работает . Пробую убить его с помощью clearInterval, но тогда блок движется с каким то запозданием

Пробовал решить это также с помощью requestAnimationFrame, но тогда блок тоже движется с запозданием.

Вот код https://codepen.io/anon/pen/rRJjpE?editors=1010

Работает только в этом режиме
Ответить с цитированием
  #2 (permalink)  
Старый 15.03.2019, 14:05
Интересующийся
Отправить личное сообщение для EvgeniySaschenko Посмотреть профиль Найти все сообщения от EvgeniySaschenko
 
Регистрация: 25.11.2018
Сообщений: 15

Скорее всего тебе нужно поместить clearInterval в setInterval и прописать условие при котором setInterval должен удалится:
timerMobileMove = setInterval(() => {
      console.log('move it')
      const leftCoord = table.getBoundingClientRect().left;
      tableHeader.style.left = `${ leftCoord }px`;
     if(условие){    
       clearInterval(timerMobileMove);
     }
    }, 1);
Ответить с цитированием
  #3 (permalink)  
Старый 15.03.2019, 14:35
Аспирант
Отправить личное сообщение для yaparoff Посмотреть профиль Найти все сообщения от yaparoff
 
Регистрация: 26.04.2016
Сообщений: 91

Сообщение от EvgeniySaschenko Посмотреть сообщение
Скорее всего тебе нужно поместить clearInterval в setInterval и прописать условие при котором setInterval должен удалится:
осталось только понять какое условие.
например можно написать условие что таблица прекратила двигаться. Но как дать понять это JS, ведь она и так остановилась, а функция выполняется...?

Последний раз редактировалось yaparoff, 15.03.2019 в 14:43.
Ответить с цитированием
  #4 (permalink)  
Старый 15.03.2019, 14:45
Интересующийся
Отправить личное сообщение для EvgeniySaschenko Посмотреть профиль Найти все сообщения от EvgeniySaschenko
 
Регистрация: 25.11.2018
Сообщений: 15

Сообщение от yaparoff Посмотреть сообщение
осталось только понять какое условие.
например можно написать условие что таблица прекратила двигаться. Но как?
Тогда правильным вопросом будет: "при каком условии таблица должна перестать двигаться?" т.е. она достигла определённой координаты, ширины и т.п.
Ответить с цитированием
  #5 (permalink)  
Старый 15.03.2019, 15:02
Аспирант
Отправить личное сообщение для yaparoff Посмотреть профиль Найти все сообщения от yaparoff
 
Регистрация: 26.04.2016
Сообщений: 91

Сообщение от EvgeniySaschenko Посмотреть сообщение
т.е. она достигла определённой координаты, ширины и т.п.
Мне кажется координата может быть любой, поэтому не знаю к чему привязыватся

Последний раз редактировалось yaparoff, 15.03.2019 в 15:13.
Ответить с цитированием
  #6 (permalink)  
Старый 15.03.2019, 16:50
Интересующийся
Отправить личное сообщение для EvgeniySaschenko Посмотреть профиль Найти все сообщения от EvgeniySaschenko
 
Регистрация: 25.11.2018
Сообщений: 15

Условием может быть что пользователь упёрся в правую сторону при прокрутке, тогда код будет такой:

timerMobileMove = setInterval(() => {
      console.log('move it')
      const leftCoord = table.getBoundingClientRect().left;
      tableHeader.style.left = `${ leftCoord }px`;
      let posScrollX= window.pageXOffset;
      let clientWidth= document.querySelector('body').clientWidth;
      let widthScroll= document.querySelector('body').scrollWidth;

     if(posScrollX + clientWidth - widthScroll == 0){    
       clearInterval(timerMobileMove);
     }
}, 1);


А что ты хочешь реализовать?
Ответить с цитированием
  #7 (permalink)  
Старый 18.03.2019, 09:31
Аспирант
Отправить личное сообщение для yaparoff Посмотреть профиль Найти все сообщения от yaparoff
 
Регистрация: 26.04.2016
Сообщений: 91

Сообщение от EvgeniySaschenko Посмотреть сообщение
Условием может быть что пользователь упёрся в правую сторону при прокрутке
Это не то условие которое нужно
Сообщение от EvgeniySaschenko Посмотреть сообщение
А что ты хочешь реализовать?
Когда пользователь на мобилках завершает движение пальцем, то нужно убить setInterval.
Есть событие touchend - но оно срабатывает когда палец убрали. А пользователь же может не убирать палец. Ну ладно, пофиг, допустим сделаем clearInterval при событии touchend
Таймер чиститься но функция все равно продолжает вызываться снова
http://skrinshoter.ru/s/180319/VNHS5lPp
Как остановить ее окончательно?
https://codepen.io/anon/pen/rRJjpE?editors=0010
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ускоряется setInterval Tord002 Общие вопросы Javascript 1 10.12.2015 23:09
Оптимизация JS WeMeSder Общие вопросы Javascript 0 13.06.2014 23:51
setInterval и глобальные переменные Почемучкин Events/DOM/Window 11 11.08.2012 14:44
setTimeout setInterval и др. mycoding Общие вопросы Javascript 6 28.10.2010 17:26
Проблема в document.write при использовании setInterval() GOll Общие вопросы Javascript 21 06.10.2008 17:38