-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjquery.onhold.js
35 lines (35 loc) · 1.24 KB
/
jquery.onhold.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//OnHold with Velocity
$.fn.extend({
velocityControlTimeoutId: 0,
velocitySlowTimeout: 250,
velocityFastTimeout: 50,
velocityTicksBeforeFast: 3,
velocityTicksCount: 0,
makeTimeout: function () {
let thisObject = this;
this.velocityControlTimeoutId = setTimeout(function () {
thisObject.onHoldCallback();
if (thisObject.velocityTicksCount<=thisObject.velocityTicksBeforeFast)
thisObject.velocityTicksCount++;
thisObject.makeTimeout();
}, (this.velocityTicksCount>this.velocityTicksBeforeFast?this.velocityFastTimeout:this.velocitySlowTimeout));
return this;
},
onHoldCallback: $.noop(),
onHold: function (newCallback) {
let thisObject = this;
if (newCallback) {
this.onHoldCallback=newCallback;
this.on('mousedown', function () {
thisObject.velocityTicksCount = 0;
thisObject.makeTimeout();
}).on('mouseup mouseleave', function() {
clearTimeout(thisObject.velocityControlTimeoutId);
});
} else {
this.off('mousedown mouseup mouseleave');
this.onHoldCallback = $.noop();
}
return this;
}
});