2009-03-04 3 views
15

Я могу найти позицию курсора. Но мне нужно выяснить, стабильна ли мышь. Если мышь не была перемещена более 1 минуты, мы должны предупредить пользователя.Обнаружение, когда мышь не движется

Как это возможно, существуют ли какие-либо специальные события для этого? (Только для IE в javascript)

ответ

36

Установить тайм-аут, когда мышь перемещается на одну минуту в будущее, и если мышь перемещается, снимите таймаут:

var timeout; 
document.onmousemove = function(){ 
    clearTimeout(timeout); 
    timeout = setTimeout(function(){alert("move your mouse");}, 60000); 
} 
+0

я вижу потенциальную проблему: Каждый вызов SetTimeout возвращает номер для счетчик.Когда он обернется и что тогда произойдет? Вместо этого я предлагаю setInterval (update, 1000), где «update» увеличивает переменную, которая перезагружается событием onmousemove. Если переменная получает более 60 баллов в обновлении, предупреждайте пользователя – some

+2

A, это больше не работает в Chrome – Jay

+2

@Jay работает для меня –

1

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

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

1

Используйте таймер, который сбрасывает его значение на событие mousemove. Если таймер достигает 1 минуты -> Сделайте что-нибудь.

Более подробная информация о таймере здесь http://www.w3schools.com/js/js_timing.asp
И больше информации о catchin событий мышей здесь http://www.quirksmode.org/js/events_mouse.html

0

Вы можете использовать OnMouseMove события. Внутри него, clearTimeout() и setTimeout (your_warning, 1 минута).

0

Вы можете использовать this script/snippet, чтобы обнаружить положение указателя мыши и «запомнить» его. Затем используйте таймер «setTimeout (...)», чтобы проверить позицию, скажем каждую секунду, и запомнить это время.

Если прошло более одной минуты, и позиция не изменилась, вы можете предупредить пользователя.

1

Да, у вас есть OnMouseMove событие в Javascript, поэтому добиться того, что вам нужно всего лишь сделать код примерно так:

startTimer(); 
element.onmousemove = stopTimer(); //this stops and resets the timer 

Вы можете использовать его, например, в теге документа.

ОБНОВЛЕНИЕ: @Marius добился лучшего примера, чем этот.

0

Вот один-и-сделано функция, которая может проверить любой элемент для движения:

function mouse (element, delay, callback) { 

    // Counter Object 
    element.ms = {}; 

    // Counter Value 
    element.ms.x = 0; 

    // Counter Function 
    element.ms.y = function() { 

     // Callback Trigger 
     if ((++element.ms.x) == delay) element.ms.callback(element, element.ms); 
    }; 

    // Counter Callback 
    element.ms.callback = callback; 

    // Function Toggle 
    element.ms.toggle = function (state) { 

     // Stop Loop 
     if ([0, "off"][state]) clearInterval(element.ms.z); 

     // Create Loop 
     if ([1, "on"][state]) element.ms.z = setInterval(element.ms.y, 1); 
    }; 

    // Function Disable 
    element.ms.remove = function() { 

     // Delete Counter Object 
     element.ms = null; return delete element.ms; 
    }; 

    // Function Trigger 
    element.onmousemove = function() { 

     // Reset Counter Value 
     element.ms.x = -1; 
    }; 

    // Return 
    return element.ms; 
}; 

Использование: mouse(element, delay, callback)

Примеры: Сделайте видеоплеер шкурой мышь через 5 секунд при холостом и полноэкранном режимах

let x = mouse(video, 5000, function (a) { 
    if (document.webkitIsFullScreen) video.style.cursor = "none"; 
}); 

x.toggle(1); addEventListener("mousemove", function() { 
    video.style.cursor = "auto"; 
}); 

Chat Room AFK (45 секунд) (если у вас есть окно чата и функция отправки сообщений):

let x = mouse(chatBox, (45e3), function (a) { 
    chatBox.send({ text: chatBox.username + " is AFK.", italic: true }); 
}); 

x.toggle(1); x.addEventListener("mousemove", function() { 
    chatBox.send({ text: chatBox.username + " is no longer AFK", italic: true }); 
}); 
Смежные вопросы