mirror of
https://github.com/tenrok/OverlayScrollbars.git
synced 2026-06-18 02:50:36 +03:00
version 1.13.0
This commit is contained in:
+41
-14
@@ -2,13 +2,13 @@
|
||||
* OverlayScrollbars
|
||||
* https://github.com/KingSora/OverlayScrollbars
|
||||
*
|
||||
* Version: 1.12.0
|
||||
* Version: 1.13.0
|
||||
*
|
||||
* Copyright KingSora | Rene Haas.
|
||||
* https://github.com/KingSora
|
||||
*
|
||||
* Released under the MIT license.
|
||||
* Date: 05.04.2020
|
||||
* Date: 02.08.2020
|
||||
*/
|
||||
|
||||
(function (global, factory) {
|
||||
@@ -2326,24 +2326,36 @@
|
||||
* @param eventNames The name(s) of the events.
|
||||
* @param listener The method which shall be called.
|
||||
* @param remove True if the handler shall be removed, false or undefined if the handler shall be added.
|
||||
* @param passiveOrOptions The options for the event.
|
||||
*/
|
||||
function setupResponsiveEventListener(element, eventNames, listener, remove, passive) {
|
||||
function setupResponsiveEventListener(element, eventNames, listener, remove, passiveOrOptions) {
|
||||
var collected = COMPATIBILITY.isA(eventNames) && COMPATIBILITY.isA(listener);
|
||||
var method = remove ? 'removeEventListener' : 'addEventListener';
|
||||
var onOff = remove ? 'off' : 'on';
|
||||
var events = collected ? false : eventNames.split(_strSpace)
|
||||
var i = 0;
|
||||
|
||||
var passiveOrOptionsIsObj = FRAMEWORK.isPlainObject(passiveOrOptions);
|
||||
var passive = _supportPassiveEvents && (passiveOrOptionsIsObj ? (passiveOrOptions._passive || false) : passiveOrOptions);
|
||||
var capture = passiveOrOptionsIsObj && (passiveOrOptions._capture || false);
|
||||
var useNative = capture || passive;
|
||||
var nativeParam = passive ? {
|
||||
passive: passive,
|
||||
capture: capture,
|
||||
} : capture;
|
||||
|
||||
if (collected) {
|
||||
for (; i < eventNames[LEXICON.l]; i++)
|
||||
setupResponsiveEventListener(element, eventNames[i], listener[i], remove);
|
||||
setupResponsiveEventListener(element, eventNames[i], listener[i], remove, passiveOrOptions);
|
||||
}
|
||||
else {
|
||||
for (; i < events[LEXICON.l]; i++) {
|
||||
if (_supportPassiveEvents)
|
||||
element[0][method](events[i], listener, { passive: passive || false });
|
||||
else
|
||||
if(useNative) {
|
||||
element[0][method](events[i], listener, nativeParam);
|
||||
}
|
||||
else {
|
||||
element[onOff](events[i], listener);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3992,8 +4004,8 @@
|
||||
addRemoveClass(_hostElement, _classNameHostOverflowX, hideOverflow.x);
|
||||
addRemoveClass(_hostElement, _classNameHostOverflowY, hideOverflow.y);
|
||||
|
||||
//add or remove rtl class name for styling purposes
|
||||
if (cssDirectionChanged) {
|
||||
//add or remove rtl class name for styling purposes except when its body, then the scrollbar stays
|
||||
if (cssDirectionChanged && !_isBody) {
|
||||
addRemoveClass(_hostElement, _classNameHostRTL, _isRTL);
|
||||
}
|
||||
|
||||
@@ -4514,6 +4526,7 @@
|
||||
var scroll = _strScroll + scrollbarVars._Left_Top;
|
||||
var strActive = 'active';
|
||||
var strSnapHandle = 'snapHandle';
|
||||
var strClickEvent = 'click';
|
||||
var scrollDurationFactor = 1;
|
||||
var increaseDecreaseScrollAmountKeyCodes = [16, 17]; //shift, ctrl
|
||||
var trackTimeout;
|
||||
@@ -4533,6 +4546,9 @@
|
||||
function decreaseTrackScrollAmount() {
|
||||
scrollDurationFactor = 1;
|
||||
}
|
||||
function stopClickEventPropagation(event) {
|
||||
COMPATIBILITY.stpP(event);
|
||||
}
|
||||
function documentKeyDown(event) {
|
||||
if (inArray(event.keyCode, increaseDecreaseScrollAmountKeyCodes) > -1)
|
||||
increaseTrackScrollAmount();
|
||||
@@ -4576,7 +4592,11 @@
|
||||
[_strMouseTouchMoveEvent, _strMouseTouchUpEvent, _strKeyDownEvent, _strKeyUpEvent, _strSelectStartEvent],
|
||||
[documentDragMove, documentMouseTouchUp, documentKeyDown, documentKeyUp, documentOnSelectStart],
|
||||
true);
|
||||
|
||||
COMPATIBILITY.rAF()(function() {
|
||||
setupResponsiveEventListener(_documentElement, strClickEvent, stopClickEventPropagation, true, { _capture: true });
|
||||
});
|
||||
|
||||
|
||||
if (_scrollbarsHandlesDefineScrollPos)
|
||||
refreshScrollbarHandleOffset(isHorizontal, true);
|
||||
|
||||
@@ -4631,6 +4651,10 @@
|
||||
setupResponsiveEventListener(_documentElement,
|
||||
[_strMouseTouchMoveEvent, _strMouseTouchUpEvent, _strSelectStartEvent],
|
||||
[documentDragMove, documentMouseTouchUp, documentOnSelectStart]);
|
||||
COMPATIBILITY.rAF()(function() {
|
||||
setupResponsiveEventListener(_documentElement, strClickEvent, stopClickEventPropagation, false, { _capture: true });
|
||||
});
|
||||
|
||||
|
||||
if (_msieVersion || !_documentMixed)
|
||||
COMPATIBILITY.prvD(event);
|
||||
@@ -4638,7 +4662,10 @@
|
||||
}
|
||||
function onTrackMouseTouchDown(event) {
|
||||
if (onMouseTouchDownContinue(event)) {
|
||||
var scrollDistance = MATH.round(_viewportSize[scrollbarVars._w_h]);
|
||||
var handleToViewportRatio = scrollbarVars._info._handleLength / Math.round(MATH.min(1, _viewportSize[scrollbarVars._w_h] / _contentScrollSizeCache[scrollbarVars._w_h]) * scrollbarVars._info._trackLength);
|
||||
var scrollDistance = MATH.round(_viewportSize[scrollbarVars._w_h] * handleToViewportRatio);
|
||||
var scrollBaseDuration = 270 * handleToViewportRatio;
|
||||
var scrollFirstIterationDelay = 400 * handleToViewportRatio;
|
||||
var trackOffset = scrollbarVars._track.offset()[scrollbarVars._left_top];
|
||||
var ctrlKey = event.ctrlKey;
|
||||
var instantScroll = event.shiftKey;
|
||||
@@ -4663,8 +4690,8 @@
|
||||
var handleLength = scrollbarVarsInfo._handleLength;
|
||||
var scrollRange = scrollbarVarsInfo._maxScroll;
|
||||
var currScroll = scrollbarVarsInfo._currentScroll;
|
||||
var scrollDuration = 270 * scrollDurationFactor;
|
||||
var timeoutDelay = isFirstIteration ? MATH.max(400, scrollDuration) : scrollDuration;
|
||||
var scrollDuration = scrollBaseDuration * scrollDurationFactor;
|
||||
var timeoutDelay = isFirstIteration ? MATH.max(scrollFirstIterationDelay, scrollDuration) : scrollDuration;
|
||||
var instantScrollPosition = scrollRange * ((mouseOffset - (handleLength / 2)) / (trackLength - handleLength)); // 100% * positionPercent
|
||||
var rtlIsNormal = _isRTL && isHorizontal && ((!_rtlScrollBehavior.i && !_rtlScrollBehavior.n) || _normalizeRTLCache);
|
||||
var decreaseScrollCondition = rtlIsNormal ? handleOffset < mouseOffset : handleOffset > mouseOffset;
|
||||
@@ -4839,7 +4866,7 @@
|
||||
var scrollbarVarsInfo = scrollbarVars._info;
|
||||
var digit = 1000000;
|
||||
//get and apply intended handle length
|
||||
var handleRatio = MATH.min(1, (_hostSizeCache[scrollbarVars._w_h] - (_paddingAbsoluteCache ? (isHorizontal ? _paddingX : _paddingY) : 0)) / _contentScrollSizeCache[scrollbarVars._w_h]);
|
||||
var handleRatio = MATH.min(1, _viewportSize[scrollbarVars._w_h] / _contentScrollSizeCache[scrollbarVars._w_h]);
|
||||
handleCSS[scrollbarVars._width_height] = (MATH.floor(handleRatio * 100 * digit) / digit) + '%'; //the last * digit / digit is for flooring to the 4th digit
|
||||
|
||||
if (!nativeOverlayScrollbarsAreActive())
|
||||
|
||||
Reference in New Issue
Block a user