jQuery - запуск обычного вызова функции в mousedown - PullRequest
0 голосов
/ 16 марта 2011

Я хочу, чтобы функция вызывалась регулярно с заданным интервалом, пока левая кнопка мыши удерживается над определенным элементом.Есть ли простой способ сделать это в jQuery, или я должен использовать vanilla javascript и setInterval / setTimeout?

Спасибо

Ответы [ 4 ]

2 голосов
/ 16 марта 2011

Вот как я бы это сделал:

HTML:

<div id="box"></div>

JavaScript:

var box = $('#box'),
    iv;

function foo() {
    box.append('*');    
}

box.bind('mousedown mouseup', function(e) {
    $(this).toggleClass('hold', e.type === 'mousedown');
});

iv = setInterval(function() {    
    box.hasClass('hold') && foo();
}, 1000);

Таким образом, вы связываете обработчик с mousedownи mouseup события, и соответственно установить класс CSS hold.Между тем, независимый таймер iv проверит, установлен ли класс hold, и соответственно вызовет вашу функцию (foo).

Демонстрация в реальном времени: http://jsfiddle.net/simevidas/7CUFE/

2 голосов
/ 16 марта 2011

Вот плагин jQuery, который предоставляет событие mousehold.

http://remysharp.com/2006/12/15/jquery-mousehold-event/

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

0 голосов
/ 16 марта 2011
var mouseDown = false;

$('#yourID').bind('click', function() {
    mouseDown = true;
});

$('#yourID').bind('mouseup', function() {
    mouseDown = false;
});

setInterval('checkOut();',5000);

function checkOut() {
   if(mouseDown) alert('mouse is down! Whatup!');
});
0 голосов
/ 16 марта 2011

jQuery не предоставляет никакой поддержки наблюдения за функциями, в результате вы можете использовать функцию vanTail setTimeout следующим образом:

var timer;

function functionToRun() {
    // Function code here...
    functionToRun();
}

var inFunction = function() {
    timer = window.setTimeout(functionToRun, intervalToRunFor);
}

var outFunction = function() { 
    window.clearTimeout(timer);
}

$('selector').hover(function() { inFunction, outFunction }
...