0

マウスの左ボタンを特定の要素の上で押したままにしている間、特定の間隔で関数を定期的に呼び出す必要があります。jQueryでこれを行う簡単な方法はありますか、それともバニラjavascriptとsetInterval/setTimeoutを使用する必要がありますか?

ありがとう

4

4 に答える 4

2

mouseholdこれがイベントを提供するjQueryプラグインです。

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

デモページに移動し、最後の入力ボックスの右側にある矢印の1つをクリックすると、それがどのように機能するかがわかります。

于 2011-03-16T15:55:53.827 に答える
2

これは私がそれを行う方法です:

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);

そのため、ハンドラーをmousedownmouseupイベントの両方にバインドし、holdそれに応じて CSS クラスを設定します。その間、独立したタイマーがクラスが設定されivているかどうかを検査し、それに応じて関数 ( ) を呼び出します。holdfoo

ライブデモ: http://jsfiddle.net/simevidas/7CUFE/

于 2011-03-16T16:03:35.003 に答える
0

その結果、jQuery は関数監視サポートを提供しません。次のようにバニラの 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 }
于 2011-03-16T15:56:32.077 に答える
0
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!');
});
于 2011-03-16T15:57:14.807 に答える