Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.11.2016, 04:45
Аватар для spo
spo spo вне форума
Профессор
Отправить личное сообщение для spo Посмотреть профиль Найти все сообщения от spo
 
Регистрация: 11.05.2011
Сообщений: 213

Проверка активности движения мышью
Задача заключается в том, чтобы при отсутствии движения мышью над элементом, через N-ное количество времени вызывать функцию.

Код который у меня получился, кажется не совсем грамотным, не смотря на то, что вроде как и работает.
Думаю должно быть более красивое решение.
Прошу подсказать.

scene.addEventListener('mousemove', activity, false);

let move;

function activity(event) {
	if(event) {
		move = true;
		console.log(move);
		clearInterval(interval);
	}
}

setInterval(function() {
	interval= setTimeout(function() {
		move = false;
		console.log(move);
	}, 1000);
}, 1000);


UPD: Нашел следующее решение

let notActiveDelay = 5,
	timeNotActive = 0,
	interval1,
	interval2;

scene.addEventListener('mousemove', activity, false);

function activity() {
	console.log('timeNotActive: 0');
	timeNotActive = 0;
}

function intervals() {
	int1 = setInterval(function() {
		console.log('timeNotActive: ' + timeNotActive);
		timeNotActive++;
	}, 1000);

	int2 = setInterval(function() {
		if(timeNotActive >= notActiveDelay) {
			console.log('Простой');
			clearInterval(int1);
			clearInterval(int2);
			timeNotActive = 0;
			test();
		}
	}, 1000);
}

intervals();

function test() {
	setTimeout(function() {
		intervals();
	}, 5000);
}


Все ли в нем верно?

Последний раз редактировалось spo, 20.11.2016 в 05:33.
Ответить с цитированием
  #2 (permalink)  
Старый 20.11.2016, 06:04
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

spo,
две строки всего нужно в функции,1 остановить таймер 2 запустить таймер и всё
Ответить с цитированием
  #3 (permalink)  
Старый 20.11.2016, 06:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

spo,
scene.addEventListener('mousemove', activity, false);

var timer;

function activity(event) {
  window.clearTimeout(timer);
  timer = setTimeout(function() {
    console.log('test');
  }, 1000);
}
Ответить с цитированием
  #4 (permalink)  
Старый 20.11.2016, 11:51
Аватар для spo
spo spo вне форума
Профессор
Отправить личное сообщение для spo Посмотреть профиль Найти все сообщения от spo
 
Регистрация: 11.05.2011
Сообщений: 213

То что нужно.
Большое спасибо!
Ответить с цитированием
  #5 (permalink)  
Старый 28.12.2016, 17:52
Аватар для spo
spo spo вне форума
Профессор
Отправить личное сообщение для spo Посмотреть профиль Найти все сообщения от spo
 
Регистрация: 11.05.2011
Сообщений: 213

Задача усложнилась.
Необходимо, чтобы после остановки таймера единожды срабатывало некоторое действие.

Двигаем мышь, начинается отсчет и через N времени срабатывает событие.
Если снова двигаем мышь, то единожды срабатывает другое событие, и снова начинается отсчет.

Последний раз редактировалось spo, 28.12.2016 в 18:02.
Ответить с цитированием
  #6 (permalink)  
Старый 28.12.2016, 18:05
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

spo,
уберите обнуление таймера, и событие сработает на любое передвижение, вас не понимаю или смотрите учебник там много чего
https://learn.javascript.ru/task/hoverintent
https://learn.javascript.ru/task/throttle
Ответить с цитированием
  #7 (permalink)  
Старый 28.12.2016, 18:37
Аватар для spo
spo spo вне форума
Профессор
Отправить личное сообщение для spo Посмотреть профиль Найти все сообщения от spo
 
Регистрация: 11.05.2011
Сообщений: 213

Объясню на примере.

На сцене есть персонаж.
Пока мы водим мышью ничего не происходит.
Как только мы прекратили двигать мышью пошел отсчет времени и по истечении N секунд единожды запустилось действие (анимация - персонаж сел отдохнуть).
При возобновлении движения мышью единожды запустилось другое действие (персонаж встал на ноги)
Ответить с цитированием
  #8 (permalink)  
Старый 28.12.2016, 18:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

spo,

scene.addEventListener('mousemove', activity, false);

var timer;

function activity(event) {
  if('персонаж сел отдохнуть')  console.log('персонаж встал на ноги');
  window.clearTimeout(timer);
  timer = setTimeout(function() {
    console.log('персонаж сел отдохнуть');
  }, 1000);
}
Ответить с цитированием
  #9 (permalink)  
Старый 29.12.2016, 05:39
Аватар для spo
spo spo вне форума
Профессор
Отправить личное сообщение для spo Посмотреть профиль Найти все сообщения от spo
 
Регистрация: 11.05.2011
Сообщений: 213

Тут проблема в том, что при движении мышью мы получим множество сообщений персонаж встал на ноги, а нужно только один раз.

Вроде так работает

var timer,
	flag = false;

function activity(event) {
	if (flag) {
		if('персонаж сел отдохнуть')  console.log('персонаж встал на ноги');
		flag = false;
	}
	window.clearTimeout(timer);
		timer = setTimeout(function() {
		console.log('персонаж сел отдохнуть');
		flag = true;
	}, 1000);
}

Последний раз редактировалось spo, 29.12.2016 в 05:43.
Ответить с цитированием
  #10 (permalink)  
Старый 29.12.2016, 09:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

Сообщение от spo
множество сообщений персонаж встал на ноги,
значит персонаж не вставал, как лёг так и дрыхнет.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка на существование элемента в реальном времени js dkmrus Общие вопросы Javascript 7 03.05.2016 22:12
Проверка встроенной поддержки типа с помощью библиотеки Modernizr viy.li Общие вопросы Javascript 1 16.08.2013 12:02
проверка формы не работает в ie begelme Javascript под браузер 6 13.08.2013 01:00
Проверка встроенной поддержки типа с помощью библиотеки Modernizr viy.li Библиотеки/Тулкиты/Фреймворки 3 15.06.2013 15:48
HTML5 Как сделать, чтобы можно было двигать картинку мышью? Бобр Общие вопросы Javascript 2 18.06.2010 21:22