Пока Мышь нажимает на событие.Прототип JS или Javascript - PullRequest
1 голос
/ 22 апреля 2010

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

$('id').observe("click",function(event){}) 
$('id').observe("leave",function(event){})
$('id').observe("change",function(event){})
//etc...

но это что-то вроде $('id').observe("whilemousepress",function(event){}): P // Я знаю, что в javascript нет никаких событий, но я хотел бы подражать.

спасибо ...

Ответы [ 4 ]

5 голосов
/ 22 апреля 2010

Я не могу комментировать особенности прототипа, но вы, вероятно, могли бы сделать это, создав интервал с помощью setInterval(), который запускается на mousedown и останавливается с помощью .clearInterval() на mouseup.

1 голос
/ 22 апреля 2010

Существует событие, когда мышь не работает mousedown, и событие, когда мышь работает mouseup.Просто начните свои события, когда мышь нажата, и остановите их, когда кнопка отпущена.

$('id').observe("mousedown",function(event){
    // Do whatever you want
})

$('id').observe("mouseup",function(event){
    // Stop the events starts when the mouse when down
})
0 голосов
/ 17 сентября 2015

var MouseUtils = (function() {
  'use strict';
  // VARIABLES
  var _isScrolling = false;
  var _buttonsArray = [false, false, false, false, false, false, false, false, false]; // 0 left, 2 right, 1 middle, other.. extra buttons, gaming mouses
  var _mousePressed = false;

  //EVENT LISTENERS
  var _init = function(w, d) {
    w.onscroll = function() {
      _isScrolling = true;
    };
    d.onmousedown = function(e) {
      _buttonsArray[e.button] = true;
      _mousePressed = true;
    };
    d.onmouseup = function(e) {
      _buttonsArray[e.button] = false;
      _mousePressed = false;
    };
    d.oncontextmenu = function() { // this is mandatory for clicks down|ups works well
      return false;
    };
    return this;
  };

  // TIMERS
  var _scrollInterval = setInterval(function() {
    if(_isScrolling) {
      _isScrolling = false;
    }
  }, 500);

  // EXPOSED
  var _isLeftPressed = function() {
    return _buttonsArray[0];
  };
  var _isRightPressed = function() {
    return _buttonsArray[2];
  };
  var _isMiddlePressed = function() {
    return _buttonsArray[1];
  };
  var _isScrolling = function() {
    return _isScrolling;
  };

  var _clearScrollInterval = function() {
    clearInterval(_scrollInterval);
  };

  return {
    init: _init,
    isLeftPressed: _isLeftPressed,
    isRightPressed: _isRightPressed,
    isMiddlePressed: _isMiddlePressed,
    isScrolling: _isScrolling,
    clearScrollInterval: _clearScrollInterval
  };
})();

MouseUtils.init(window, document);

while(MouseUtils.isLeftPressed) {
   // DO SOMETHING
}
0 голосов
/ 22 апреля 2010

хорошо ... я думаю, что оба верны, то, что я сделал, это:

        $('right').observe('mousedown',function(event){ intervalRigth = setInterval(this.name + ".dosomething()",50); }.bind(this));
        $('left').observe('mousedown',function(event){ intervalLeft = setInterval(this.name + ".dosomething()",50); }.bind(this));


        $('right').observe('mouseup',function(event){ clearInterval(intervalRigth ); }.bind(this));
        $('left').observe('mouseup',function(event){ clearInterval(intervalLeft ); }.bind(this));            

// поэтому я думаю, что оба ответа верны, спасибо =)

...