Files
zszq-trs/YLErpWeb/wwwroot/Statics/libs/_utils/dragscroll.js
T
2024-05-09 14:06:26 +08:00

80 lines
2.7 KiB
JavaScript

//改写自https://github.com/asvd/dragscroll
//使用: var myDragScroll = dragScroll.create({});myDragScroll.reset();
//选项:container--.dragscroll元素容器
const dragScroll = (function ($) {
function seal(options) {
var newScrollX, newScrollY;
options = $.extend({
dragscroll: '.dragscroll',
dragscrollno: '.dragscroll-no',
xscroll: true, yscroll: true, throttle: null
}, options);
!options.dragscroll && (options.dragscroll = '.dragscroll');
function _dragScroll(el) {
var lastClientX, lastClientY, pushed = 0;
function __mousedown(e) {
if (!$(e.target).parentsUntil(options.dragscroll, options.dragscrollno).length) {
pushed = 1;
lastClientX = e.clientX;
lastClientY = e.clientY;
}
}
function __mouseup(e) {
pushed = 0;
}
function __mousemove(e) {
if (pushed) {
var scroller = el.scroller || el;
if (options.xscroll) {
scroller.scrollLeft -=
newScrollX = - lastClientX + (lastClientX = e.clientX);
}
if (options.yscroll) {
scroller.scrollTop -=
newScrollY = - lastClientY + (lastClientY = e.clientY);
}
if (el === document.body) {
scroller = document.documentElement;
options.xscroll && (scroller.scrollLeft -= newScrollX);
options.yscroll && (scroller.scrollTop -= newScrollY);
}
}
}
const _throttleMove = options.throttle ? options.throttle(__mousemove, 100) : __mousemove;
$(el).off('mousedown', __mousedown).off('mouseup', __mouseup).off('mousemove', _throttleMove)
.on('mousedown', __mousedown).on('mouseup', __mouseup).on('mousemove', _throttleMove)
.on('mouseleave', function () { pushed = 0; })
.on('selectstart', function (e) {
return !pushed;
});
}
this.options = options;
this.reset = function (options) {
options && Object.assign(this.options, options);
$(this.options.dragscroll, this.options.container).each(function () {
_dragScroll(this);
});
};
this.getOptions = function () { return Object.assign({}, this.options); };
}
return {
create(options) { return new seal(options); }
};
}(jQuery));