Skip to content

Instantly share code, notes, and snippets.

@arthur12345543
Forked from jimmykhlam/gist:1396394
Last active August 29, 2015 14:08
Show Gist options
  • Select an option

  • Save arthur12345543/347c2ab814953e3b2c89 to your computer and use it in GitHub Desktop.

Select an option

Save arthur12345543/347c2ab814953e3b2c89 to your computer and use it in GitHub Desktop.
/*
* jQuery mousehold plugin - fires an event while the mouse is clicked down.
* Additionally, the function, when executed, is passed a single
* argument representing the count of times the event has been fired during
* this session of the mouse hold.
*
* @author Remy Sharp (leftlogic.com)
* @date 2006-12-15
* @example $("img").mousehold(200, function(i){ })
* @desc Repeats firing the passed function while the mouse is clicked down
*
* @name mousehold
* @type jQuery
* @param Number timeout The frequency to repeat the event in milliseconds
* @param Function fn A function to execute
* @cat Plugin
*
* Modified by Jimmy Lam (jimmykhlam.com) on 2011-11-26 to include passing
* the origEv event from original mousedown.
*/
jQuery.fn.mousehold = function(timeout, f) {
if (timeout && typeof timeout == 'function') {
f = timeout;
timeout = 100;
}
if (f && typeof f == 'function') {
var timer = 0;
var fireStep = 0;
return this.each(function() {
var origEv; //var for original event
jQuery(this).mousedown(function(ev) {
origEv = ev; //rem original event
fireStep = 1;
var ctr = 0;
var t = this;
timer = setInterval(function() {
ctr++;
f.call(t, ctr, ev);
fireStep = 2;
}, timeout);
})
clearMousehold = function() {
clearInterval(timer);
if (fireStep == 1) f.call(this, 1, origEv); //pass original event
fireStep = 0;
}
jQuery(this).mouseout(clearMousehold);
jQuery(this).mouseup(clearMousehold);
})
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment