You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
878 B
JavaScript
39 lines
878 B
JavaScript
'use strict';
|
|
|
|
const debounce = require("debounce");
|
|
const defaultValue = require("default-value");
|
|
|
|
const selectable = require("./selectable");
|
|
|
|
module.exports = function($) {
|
|
selectable($);
|
|
|
|
$.fn.draggable = function(options = {}) {
|
|
let debounceInterval = defaultValue(options.debounce, 10);
|
|
|
|
this.on("mousedown", (event) => {
|
|
let startX = event.pageX;
|
|
let startY = event.pageY;
|
|
|
|
let moveHandler = debounce((event) => {
|
|
this.trigger("draggable:move", [{
|
|
offsetX: event.pageX - startX,
|
|
offsetY: event.pageY - startY
|
|
}]);
|
|
}, debounceInterval);
|
|
|
|
$(document).on("mousemove", moveHandler);
|
|
|
|
$(document).one("mouseup", (event) => {
|
|
$(document).off("mousemove", moveHandler);
|
|
$(document).enableSelection();
|
|
|
|
this.trigger("draggable:end");
|
|
});
|
|
|
|
$(document).disableSelection();
|
|
|
|
this.trigger("draggable:start");
|
|
});
|
|
}
|
|
} |