JavaScript: Проверить если кнопка мыши вниз?

У меня была такая же ошибка, но я исправил ее, изменив файл php.ini.

Найти файл php.ini см. в Чувак, где мой php.ini?

, затем откройте его с помощью вашего любимого редактора.

Найдите свойство short_open_tag и примените следующее изменение:

; short_open_tag = Off ; previous value
short_open_tag = On ; new value

127
задан TM. 26 November 2008 в 22:29
поделиться

6 ответов

Оценка Мира' решение: это не работает, если пользователь нажимает больше чем одну кнопку намеренно или случайно. Не спрашивайте меня, как я знаю :-(.

правильный код должен быть похожим на это:

var mouseDown = 0;
document.body.onmousedown = function() { 
  ++mouseDown;
}
document.body.onmouseup = function() {
  --mouseDown;
}

С тестом как это:

if(mouseDown){
  // crikey! isn't she a beauty?
}

, Если Вы хотите знать то, что кнопка нажимается, быть готовой сделать mouseDown массивом счетчиков и считать ими отдельно для отдельных кнопок:

// let's pretend that a mouse doesn't have more than 9 buttons
var mouseDown = [0, 0, 0, 0, 0, 0, 0, 0, 0],
    mouseDownCount = 0;
document.body.onmousedown = function(evt) { 
  ++mouseDown[evt.button];
  ++mouseDownCount;
}
document.body.onmouseup = function(evt) {
  --mouseDown[evt.button];
  --mouseDownCount;
}

Теперь можно проверить, какие кнопки были нажаты точно:

if(mouseDownCount){
  // alright, let's lift the little bugger up!
  for(var i = 0; i < mouseDown.length; ++i){
    if(mouseDown[i]){
      // we found it right there!
    }
  }
}

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

  • 0 для "ничего нажимается"
  • 1 для левого
  • 2 для права
  • 4 в течение середины
  • и любая комбинация вышеупомянутых, например, 5 для левого + середина

, Так скорректируйте свой код соответственно! Я оставляю его как осуществление.

И помните: IE использует глобальный объект-событие, названный … "событие".

Случайно IE имеет функцию, полезную в Вашем случае: когда другие браузеры отправляют "кнопку" только за событиями кнопки мыши (onclick, onmousedown, и onmouseup), IE отправляет его с onmousemove также. Таким образом, можно начать прислушиваться к onmousemove, когда необходимо знать состояние кнопки и проверку на evt.button, как только Вы получили его — теперь Вы знаете, какие кнопки мыши были нажаты:

// for IE only!
document.body.onmousemove = function(){
  if(event.button){
    // aha! we caught a feisty little sheila!
  }
};

, Конечно, Вы ничего не получаете, если она играет мертвый и не движущийся.

Необходимые ссылки:

MSDN № 1 : Я не знаю, почему я перенес document.body-стиль кода. Будет лучше присоединить обработчики событий непосредственно к документу.

137
ответ дан 24 November 2019 в 00:47
поделиться

Ну, Вы не можете проверить, снижается ли это после события, но можно проверить, произошло ли это... Если это произошло.. это означает, что больше не снижается на :P lol

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

-1
ответ дан 24 November 2019 в 00:47
поделиться

Необходимо обработать MouseDown и MouseUp и установить некоторый флаг или что-то для отслеживания его "позже в будущем"... :(

2
ответ дан 24 November 2019 в 00:47
поделиться

Я думаю, что лучший подход к этому должен вести Ваш собственный учет состояния кнопки мыши, следующим образом:

var mouseDown = 0;
document.body.onmousedown = function() { 
    mouseDown = 1;
}
document.body.onmouseup = function() {
    mouseDown = 0;
}

и затем, позже в Вашем коде:

if (mouseDown == 1) {
    // the mouse is down, do what you have to do.
}
17
ответ дан 24 November 2019 в 00:47
поделиться

Следующий отрывок попытается выполнить функцию "doStuff" спустя 2 секунды после того, как событие mouseDown произойдет в document.body. Если пользователь поднимет кнопку, то событие mouseUp произойдет и отменит задержанное выполнение.

я советовал бы использовать некоторый метод для вложения события перекрестного браузера - установка mousedown и mouseup свойств явно была сделана для упрощения примера.

function doStuff() {
  // does something when mouse is down in body for longer than 2 seconds
}

var mousedownTimeout;

document.body.onmousedown = function() { 
  mousedownTimeout = window.setTimeout(doStuff, 2000);
}

document.body.onmouseup = function() {
  window.clearTimeout(mousedownTimeout);
}
4
ответ дан 24 November 2019 в 00:47
поделиться

Можно объединить @Pax и мои ответы, чтобы также получить продолжительность, для которой снизилась мышь:

var mousedownTimeout,
    mousedown = 0;

document.body.onmousedown = function() {
  mousedown = 0; 
  window.clearInterval(mousedownTimeout);
  mousedownTimeout = window.setInterval(function() { mousedown += 200 }, 200);
}

document.body.onmouseup = function() {
  mousedown = 0;
  window.clearInterval(mousedownTimeout);
}

Затем позже:

if (mousedown >= 2000) {
  // do something if the mousebutton has been down for at least 2 seconds
}
2
ответ дан 24 November 2019 в 00:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: