123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- import { getWindow, getDocument } from 'ssr-window';
- function deleteProps(obj) {
- const object = obj;
- Object.keys(object).forEach(key => {
- try {
- object[key] = null;
- } catch (e) {
- // no getter for object
- }
- try {
- delete object[key];
- } catch (e) {
- // something got wrong
- }
- });
- }
- function nextTick(callback, delay = 0) {
- return setTimeout(callback, delay);
- }
- function now() {
- return Date.now();
- }
- function getComputedStyle(el) {
- const window = getWindow();
- let style;
- if (window.getComputedStyle) {
- style = window.getComputedStyle(el, null);
- }
- if (!style && el.currentStyle) {
- style = el.currentStyle;
- }
- if (!style) {
- style = el.style;
- }
- return style;
- }
- function getTranslate(el, axis = 'x') {
- const window = getWindow();
- let matrix;
- let curTransform;
- let transformMatrix;
- const curStyle = getComputedStyle(el, null);
- if (window.WebKitCSSMatrix) {
- curTransform = curStyle.transform || curStyle.webkitTransform;
- if (curTransform.split(',').length > 6) {
- curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');
- }
- // Some old versions of Webkit choke when 'none' is passed; pass
- // empty string instead in this case
- transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
- } else {
- transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
- matrix = transformMatrix.toString().split(',');
- }
- if (axis === 'x') {
- // Latest Chrome and webkits Fix
- if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;
- // Crazy IE10 Matrix
- else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);
- // Normal Browsers
- else curTransform = parseFloat(matrix[4]);
- }
- if (axis === 'y') {
- // Latest Chrome and webkits Fix
- if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;
- // Crazy IE10 Matrix
- else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);
- // Normal Browsers
- else curTransform = parseFloat(matrix[5]);
- }
- return curTransform || 0;
- }
- function isObject(o) {
- return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';
- }
- function isNode(node) {
- // eslint-disable-next-line
- if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {
- return node instanceof HTMLElement;
- }
- return node && (node.nodeType === 1 || node.nodeType === 11);
- }
- function extend(...args) {
- const to = Object(args[0]);
- const noExtend = ['__proto__', 'constructor', 'prototype'];
- for (let i = 1; i < args.length; i += 1) {
- const nextSource = args[i];
- if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {
- const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);
- for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
- const nextKey = keysArray[nextIndex];
- const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
- if (desc !== undefined && desc.enumerable) {
- if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {
- if (nextSource[nextKey].__swiper__) {
- to[nextKey] = nextSource[nextKey];
- } else {
- extend(to[nextKey], nextSource[nextKey]);
- }
- } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {
- to[nextKey] = {};
- if (nextSource[nextKey].__swiper__) {
- to[nextKey] = nextSource[nextKey];
- } else {
- extend(to[nextKey], nextSource[nextKey]);
- }
- } else {
- to[nextKey] = nextSource[nextKey];
- }
- }
- }
- }
- }
- return to;
- }
- function setCSSProperty(el, varName, varValue) {
- el.style.setProperty(varName, varValue);
- }
- function animateCSSModeScroll({
- swiper,
- targetPosition,
- side
- }) {
- const window = getWindow();
- const startPosition = -swiper.translate;
- let startTime = null;
- let time;
- const duration = swiper.params.speed;
- swiper.wrapperEl.style.scrollSnapType = 'none';
- window.cancelAnimationFrame(swiper.cssModeFrameID);
- const dir = targetPosition > startPosition ? 'next' : 'prev';
- const isOutOfBound = (current, target) => {
- return dir === 'next' && current >= target || dir === 'prev' && current <= target;
- };
- const animate = () => {
- time = new Date().getTime();
- if (startTime === null) {
- startTime = time;
- }
- const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);
- const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;
- let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);
- if (isOutOfBound(currentPosition, targetPosition)) {
- currentPosition = targetPosition;
- }
- swiper.wrapperEl.scrollTo({
- [side]: currentPosition
- });
- if (isOutOfBound(currentPosition, targetPosition)) {
- swiper.wrapperEl.style.overflow = 'hidden';
- swiper.wrapperEl.style.scrollSnapType = '';
- setTimeout(() => {
- swiper.wrapperEl.style.overflow = '';
- swiper.wrapperEl.scrollTo({
- [side]: currentPosition
- });
- });
- window.cancelAnimationFrame(swiper.cssModeFrameID);
- return;
- }
- swiper.cssModeFrameID = window.requestAnimationFrame(animate);
- };
- animate();
- }
- function getSlideTransformEl(slideEl) {
- return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowEl && slideEl.shadowEl.querySelector('.swiper-slide-transform') || slideEl;
- }
- function findElementsInElements(elements = [], selector = '') {
- const found = [];
- elements.forEach(el => {
- found.push(...el.querySelectorAll(selector));
- });
- return found;
- }
- function elementChildren(element, selector = '') {
- return [...element.children].filter(el => el.matches(selector));
- }
- function createElement(tag, classes = []) {
- const el = document.createElement(tag);
- el.classList.add(...(Array.isArray(classes) ? classes : [classes]));
- return el;
- }
- function elementOffset(el) {
- const window = getWindow();
- const document = getDocument();
- const box = el.getBoundingClientRect();
- const body = document.body;
- const clientTop = el.clientTop || body.clientTop || 0;
- const clientLeft = el.clientLeft || body.clientLeft || 0;
- const scrollTop = el === window ? window.scrollY : el.scrollTop;
- const scrollLeft = el === window ? window.scrollX : el.scrollLeft;
- return {
- top: box.top + scrollTop - clientTop,
- left: box.left + scrollLeft - clientLeft
- };
- }
- function elementPrevAll(el, selector) {
- const prevEls = [];
- while (el.previousElementSibling) {
- const prev = el.previousElementSibling; // eslint-disable-line
- if (selector) {
- if (prev.matches(selector)) prevEls.push(prev);
- } else prevEls.push(prev);
- el = prev;
- }
- return prevEls;
- }
- function elementNextAll(el, selector) {
- const nextEls = [];
- while (el.nextElementSibling) {
- const next = el.nextElementSibling; // eslint-disable-line
- if (selector) {
- if (next.matches(selector)) nextEls.push(next);
- } else nextEls.push(next);
- el = next;
- }
- return nextEls;
- }
- function elementStyle(el, prop) {
- const window = getWindow();
- return window.getComputedStyle(el, null).getPropertyValue(prop);
- }
- function elementIndex(el) {
- let child = el;
- let i;
- if (child) {
- i = 0;
- // eslint-disable-next-line
- while ((child = child.previousSibling) !== null) {
- if (child.nodeType === 1) i += 1;
- }
- return i;
- }
- return undefined;
- }
- function elementParents(el, selector) {
- const parents = []; // eslint-disable-line
- let parent = el.parentElement; // eslint-disable-line
- while (parent) {
- if (selector) {
- if (parent.matches(selector)) parents.push(parent);
- } else {
- parents.push(parent);
- }
- parent = parent.parentElement;
- }
- return parents;
- }
- function elementTransitionEnd(el, callback) {
- function fireCallBack(e) {
- if (e.target !== el) return;
- callback.call(el, e);
- el.removeEventListener('transitionend', fireCallBack);
- }
- if (callback) {
- el.addEventListener('transitionend', fireCallBack);
- }
- }
- function elementOuterSize(el, size, includeMargins) {
- const window = getWindow();
- if (includeMargins) {
- return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));
- }
- return el.offsetWidth;
- }
- export { animateCSSModeScroll, deleteProps, nextTick, now, getTranslate, isObject, extend, getComputedStyle, setCSSProperty, getSlideTransformEl,
- // dom
- findElementsInElements, createElement, elementChildren, elementOffset, elementPrevAll, elementNextAll, elementStyle, elementIndex, elementParents, elementTransitionEnd, elementOuterSize };
|