2015-03-11 4 views
0

Я слушаю данные движения на устройствах, используя API ondevicemotion. Например:Слушатель событий Javascript на интервал

window.ondevicemotion = function(event) { 
    // do something with the event 
} 

Я хочу запустить эту функцию, когда я ее назову; однако, поскольку он основан на событии, он запускается, когда происходит событие (которое, в зависимости от устройства, может быть часто).

Как настроить функцию, чтобы она слушала только событие, когда я его вызываю, а не постоянно?

+1

Это не имеет никакого смысла. Вы либо вызываете функцию, либо событие вызывает функцию. Вы не можете делать * оба *. Если вы хотите включить и отключить обработку событий, вам просто нужно очистить обратный вызов, когда вы хотите прекратить прослушивание. – meagar

+1

Не могли бы вы добавить детали, чтобы уточнить вопрос @ meagar: что вы хотите, когда вы вызываете функцию? Некоторые варианты: (1) что-то всегда происходит; то вам не нужно событие, просто объявите функцию. (2) что-то происходит, если «ошибка» произошла в промежуточных вызовах. (3) Я хочу иметь функцию/флаг, который указывает, когда следует начинать отвечать на devicemotion и когда остановиться. (4) Я хочу ответить на devicemotion, но игнорировать его, если это происходит слишком frequnetly. etc – EyasSH

+0

Спасибо за вопросы. Он ближе всего к 4 - слишком частая девичьей мысль, и я хочу только периодически ее проверять. –

ответ

0

Вы можете добавлять и удалять слушатель событий по желанию:

function processMotion(e) { 
    // your code here to process devicemotion events 
} 

function addMotionListener() { 
    window.addEventListener("devicemotion", processMotion); 
} 

function removeMotionLisener() { 
    window.removeEventListener("devicemotion", processMotion); 
} 

Так, просто позвоните addMotionListener(), когда вы хотите, чтобы начать прослушивание движения. Затем вызовите removeMotionListener(), когда вы хотите прекратить слушать движение.


Вы не можете действительно назвать processMotion() себя, потому что вам нужна система, чтобы создать событие системы со всеми данными движения в нем. Вместо этого вы регистрируете обработчик событий, и система вызывает вас, когда есть данные для совместного использования.

+0

Спасибо! Что, если я захочу сделать это с заданным интервалом? Должен ли я каждый раз добавлять и удалять его? –

+0

@NiharMadhavan - Я не совсем понимаю, о чем вы спрашиваете. Если вы не хотите, чтобы обработчик события выполнял свою работу при возникновении события, вам нужно либо удалить слушателя, либо установить какой-то флаг, который проверяет код и просто ничего не делает, если этот флаг установлен. Если бы вы много работали над этой деятельностью, я бы, скорее всего, использовал сам флаг, а не постоянно добавлял/удалял обработчик событий, но вы можете идти в любом случае. – jfriend00

Смежные вопросы