UNPKG

material-ui-slider

Version:
336 lines (270 loc) 8.07 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.scrollIntoView = scrollIntoView; exports.pointer = pointer; exports.getOffset = getOffset; exports.hasClass = hasClass; exports.addClass = addClass; exports.removeClass = removeClass; exports.toggleClass = toggleClass; exports.setStyle = setStyle; exports.getStyle = exports.once = exports.off = exports.on = exports.loadStyleString = void 0; var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var isServer = false; var SPECIAL_CHARS_REGEXP = /([\\:\-\\_]+(.))/g; var MOZ_HACK_REGEXP = /^moz([A-Z])/; var ieVersion = isServer ? 0 : Number(document.documentMode); /* istanbul ignore next */ var trim = function trim(string) { return (string || '').replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, ''); }; /* istanbul ignore next */ var camelCase = function camelCase(name) { return name.replace(SPECIAL_CHARS_REGEXP, function (_, separator, letter, offset) { return offset ? letter.toUpperCase() : letter; }).replace(MOZ_HACK_REGEXP, 'Moz$1'); }; /* istanbul ignore next */ var loadStyleString = function loadStyleString(css) { var id = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; if (document.getElementById(id)) return; var style = document.createElement('style'); style.type = 'text/css'; style.id = id; try { style.appendChild(document.createTextNode(css)); } catch (ex) { style.styleSheet.cssText = css; } var head = document.getElementsByTagName('head')[0]; head.appendChild(style); }; /* istanbul ignore next */ exports.loadStyleString = loadStyleString; var on = function () { if (!isServer && document.addEventListener) { return function (element, event, handler) { if (element && event && handler) { element.addEventListener(event, handler, false); } }; } else { return function (element, event, handler) { if (element && event && handler) { element.attachEvent('on' + event, handler); } }; } }(); /* istanbul ignore next */ exports.on = on; var off = function () { if (!isServer && document.removeEventListener) { return function (element, event, handler) { if (element && event) { element.removeEventListener(event, handler, false); } }; } else { return function (element, event, handler) { if (element && event) { element.detachEvent('on' + event, handler); } }; } }(); /* istanbul ignore next */ exports.off = off; var once = function once(el, event, fn) { var listener = function listener() { if (fn) { fn.apply(this, arguments); } off(el, event, listener); }; on(el, event, listener); }; /* istanbul ignore next */ exports.once = once; function scrollIntoView(container, selected) { if (isServer) return; if (!selected) { container.scrollTop = 0; return; } var top = selected.offsetTop; var bottom = selected.offsetTop + selected.offsetHeight; var viewRectTop = container.scrollTop; var viewRectBottom = viewRectTop + container.clientHeight; if (top < viewRectTop) { container.scrollTop = top; } else if (bottom > viewRectBottom) { container.scrollTop = bottom - container.clientHeight; } } //鼠标的距离body的offsetX/offsetY /* istanbul ignore next */ function pointer(event) { if (isServer) return { left: 0, top: 0 }; return { left: event.pageX || event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft), top: event.pageY || event.clientY + (document.documentElement.scrollTop || document.body.scrollTop) }; } // 获取组件距离body的offsetX/offsetY /* istanbul ignore next */ function getOffset(el) { if (isServer) return { left: 0, top: 0 }; if (el.getBoundingClientRect) { return getOffsetRect(el); } else { return getOffsetSum(el); } } /* istanbul ignore next */ function hasClass(el, cls) { if (!el || !cls) return false; if (cls.indexOf(' ') !== -1) throw new Error('className should not contain space.'); if (el.classList) { return el.classList.contains(cls); } else { return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1; } } /* istanbul ignore next */ function addClass(el, cls) { if (!el) return; var curClass = el.className; var classes = (cls || '').split(' '); for (var i = 0, j = classes.length; i < j; i++) { var clsName = classes[i]; if (!clsName) continue; if (el.classList) { el.classList.add(clsName); } else { if (!hasClass(el, clsName)) { curClass += ' ' + clsName; } } } if (!el.classList) { el.className = curClass; } } /* istanbul ignore next */ function removeClass(el, cls) { if (!el || !cls) return; var classes = cls.split(' '); var curClass = ' ' + el.className + ' '; for (var i = 0, j = classes.length; i < j; i++) { var clsName = classes[i]; if (!clsName) continue; if (el.classList) { el.classList.remove(clsName); } else { if (hasClass(el, clsName)) { curClass = curClass.replace(' ' + clsName + ' ', ' '); } } } if (!el.classList) { el.className = trim(curClass); } } /* istanbul ignore next */ function toggleClass(el, cls) { if (hasClass(el, cls)) removeClass(el, cls);else addClass(el, cls); } /* istanbul ignore next */ // 获取样式兼容性函数 var getStyle = ieVersion < 9 ? function (element, styleName) { if (isServer) return; if (!element || !styleName) return null; styleName = camelCase(styleName); if (styleName === 'float') { styleName = 'styleFloat'; } try { switch (styleName) { case 'opacity': try { return element.filters.item('alpha').opacity / 100; } catch (e) { return 1.0; } default: return element.style[styleName] || element.currentStyle ? element.currentStyle[styleName] : null; } } catch (e) { return element.style[styleName]; } } : function (element, styleName) { if (isServer) return; if (!element || !styleName) return null; styleName = camelCase(styleName); if (styleName === 'float') { styleName = 'cssFloat'; } try { var computed = document.defaultView.getComputedStyle(element, ''); return element.style[styleName] || computed ? computed[styleName] : null; } catch (e) { return element.style[styleName]; } }; /* istanbul ignore next */ // 设置样式 exports.getStyle = getStyle; function setStyle(element, styleName, value) { if (!element || !styleName) return; if ((0, _typeof2.default)(styleName) === 'object') { for (var prop in styleName) { if (styleName.hasOwnProperty(prop)) { setStyle(element, prop, styleName[prop]); } } } else { styleName = camelCase(styleName); if (styleName === 'opacity' && ieVersion < 9) { element.style.filter = isNaN(value) ? '' : 'alpha(opacity=' + value * 100 + ')'; } else { element.style[styleName] = value; } } } function getOffsetSum(ele) { var top = 0, left = 0; while (ele) { top += ele.offsetTop; left += ele.offsetLeft; ele = ele.offsetParent; } return { top: top, left: left }; } function getOffsetRect(ele) { var box = ele.getBoundingClientRect(); var body = document.body, docElem = document.documentElement; //获取页面的scrollTop,scrollLeft(兼容性写法) var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop, scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft; var clientTop = docElem.clientTop || body.clientTop, clientLeft = docElem.clientLeft || body.clientLeft; var top = box.top + scrollTop - clientTop, left = box.left + scrollLeft - clientLeft; return { //Math.round 兼容火狐浏览器bug top: Math.round(top), left: Math.round(left) }; }