123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = getScrollBarSize;
- exports.getTargetScrollBarSize = getTargetScrollBarSize;
- var _dynamicCSS = require("./Dom/dynamicCSS");
- /* eslint-disable no-param-reassign */
- var cached;
- function measureScrollbarSize(ele) {
- var randomId = "rc-scrollbar-measure-".concat(Math.random().toString(36).substring(7));
- var measureEle = document.createElement('div');
- measureEle.id = randomId;
- // Create Style
- var measureStyle = measureEle.style;
- measureStyle.position = 'absolute';
- measureStyle.left = '0';
- measureStyle.top = '0';
- measureStyle.width = '100px';
- measureStyle.height = '100px';
- measureStyle.overflow = 'scroll';
- // Clone Style if needed
- var fallbackWidth;
- var fallbackHeight;
- if (ele) {
- var targetStyle = getComputedStyle(ele);
- measureStyle.scrollbarColor = targetStyle.scrollbarColor;
- measureStyle.scrollbarWidth = targetStyle.scrollbarWidth;
- // Set Webkit style
- var webkitScrollbarStyle = getComputedStyle(ele, '::-webkit-scrollbar');
- var width = parseInt(webkitScrollbarStyle.width, 10);
- var height = parseInt(webkitScrollbarStyle.height, 10);
- // Try wrap to handle CSP case
- try {
- var widthStyle = width ? "width: ".concat(webkitScrollbarStyle.width, ";") : '';
- var heightStyle = height ? "height: ".concat(webkitScrollbarStyle.height, ";") : '';
- (0, _dynamicCSS.updateCSS)("\n#".concat(randomId, "::-webkit-scrollbar {\n").concat(widthStyle, "\n").concat(heightStyle, "\n}"), randomId);
- } catch (e) {
- // Can't wrap, just log error
- console.error(e);
- // Get from style directly
- fallbackWidth = width;
- fallbackHeight = height;
- }
- }
- document.body.appendChild(measureEle);
- // Measure. Get fallback style if provided
- var scrollWidth = ele && fallbackWidth && !isNaN(fallbackWidth) ? fallbackWidth : measureEle.offsetWidth - measureEle.clientWidth;
- var scrollHeight = ele && fallbackHeight && !isNaN(fallbackHeight) ? fallbackHeight : measureEle.offsetHeight - measureEle.clientHeight;
- // Clean up
- document.body.removeChild(measureEle);
- (0, _dynamicCSS.removeCSS)(randomId);
- return {
- width: scrollWidth,
- height: scrollHeight
- };
- }
- function getScrollBarSize(fresh) {
- if (typeof document === 'undefined') {
- return 0;
- }
- if (fresh || cached === undefined) {
- cached = measureScrollbarSize();
- }
- return cached.width;
- }
- function getTargetScrollBarSize(target) {
- if (typeof document === 'undefined' || !target || !(target instanceof Element)) {
- return {
- width: 0,
- height: 0
- };
- }
- return measureScrollbarSize(target);
- }
|