UNPKG

swiper

Version:

Most modern mobile touch slider and framework with hardware accelerated transitions

121 lines (112 loc) 4.35 kB
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } import $ from '../../utils/dom'; import { bindModuleMethods } from '../../utils/utils'; var Parallax = { setTransform: function setTransform(el, progress) { var swiper = this; var rtl = swiper.rtl; var $el = $(el); var rtlFactor = rtl ? -1 : 1; var p = $el.attr('data-swiper-parallax') || '0'; var x = $el.attr('data-swiper-parallax-x'); var y = $el.attr('data-swiper-parallax-y'); var scale = $el.attr('data-swiper-parallax-scale'); var opacity = $el.attr('data-swiper-parallax-opacity'); if (x || y) { x = x || '0'; y = y || '0'; } else if (swiper.isHorizontal()) { x = p; y = '0'; } else { y = p; x = '0'; } if (x.indexOf('%') >= 0) { x = parseInt(x, 10) * progress * rtlFactor + "%"; } else { x = x * progress * rtlFactor + "px"; } if (y.indexOf('%') >= 0) { y = parseInt(y, 10) * progress + "%"; } else { y = y * progress + "px"; } if (typeof opacity !== 'undefined' && opacity !== null) { var currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress)); $el[0].style.opacity = currentOpacity; } if (typeof scale === 'undefined' || scale === null) { $el.transform("translate3d(" + x + ", " + y + ", 0px)"); } else { var currentScale = scale - (scale - 1) * (1 - Math.abs(progress)); $el.transform("translate3d(" + x + ", " + y + ", 0px) scale(" + currentScale + ")"); } }, setTranslate: function setTranslate() { var swiper = this; var $el = swiper.$el, slides = swiper.slides, progress = swiper.progress, snapGrid = swiper.snapGrid; $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (el) { swiper.parallax.setTransform(el, progress); }); slides.each(function (slideEl, slideIndex) { var slideProgress = slideEl.progress; if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') { slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1); } slideProgress = Math.min(Math.max(slideProgress, -1), 1); $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (el) { swiper.parallax.setTransform(el, slideProgress); }); }); }, setTransition: function setTransition(duration) { if (duration === void 0) { duration = this.params.speed; } var swiper = this; var $el = swiper.$el; $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (parallaxEl) { var $parallaxEl = $(parallaxEl); var parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration; if (duration === 0) parallaxDuration = 0; $parallaxEl.transition(parallaxDuration); }); } }; export default { name: 'parallax', params: { parallax: { enabled: false } }, create: function create() { var swiper = this; bindModuleMethods(swiper, { parallax: _extends({}, Parallax) }); }, on: { beforeInit: function beforeInit(swiper) { if (!swiper.params.parallax.enabled) return; swiper.params.watchSlidesProgress = true; swiper.originalParams.watchSlidesProgress = true; }, init: function init(swiper) { if (!swiper.params.parallax.enabled) return; swiper.parallax.setTranslate(); }, setTranslate: function setTranslate(swiper) { if (!swiper.params.parallax.enabled) return; swiper.parallax.setTranslate(); }, setTransition: function setTransition(swiper, duration) { if (!swiper.params.parallax.enabled) return; swiper.parallax.setTransition(duration); } } };