Commit 796a5e18f5b94e44e74d48d1dc8204b65061f61c
1 parent
3d8dee71
fix: #119 run animation when slide changes; (zh) 滚动页面时候执行动画
Showing
3 changed files
with
28 additions
and
3 deletions
back-end/h5-api/public/third-libs/swiper-animation.umd.min.js
0 → 100644
| 1 | +/*! | ||
| 2 | + * @cycjimmy/swiper-animation v4.0.1 | ||
| 3 | + * Homepage: https://github.com/cycjimmy/swiper-animation#readme | ||
| 4 | + * Released under the MIT License. | ||
| 5 | + */ | ||
| 6 | +!function(t,e){'object'==typeof exports&&'undefined'!=typeof module?module.exports=e():'function'==typeof define&&define.amd?define(e):(t=t||self).SwiperAnimation=e();}(this,(function(){'use strict';function t(t,e){if(!(t instanceof e))throw new TypeError('Cannot call a class as a function');}function e(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,'value'in i&&(i.writable=!0),Object.defineProperty(t,i.key,i);}}function n(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t;}function i(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e<t.length;e++)n[e]=t[e];return n;}}(t)||function(t){if(Symbol.iterator in Object(t)||'[object Arguments]'===Object.prototype.toString.call(t))return Array.from(t);}(t)||function(){throw new TypeError('Invalid attempt to spread non-iterable instance');}();}var a=!1,o=function(){return!!window.Promise;},r=function(){if(!a&&!o()){var t=document.createElement('script');t.type='text/javascript',t.src='https://cdn.jsdelivr.net/npm/promise-polyfill@8/dist/polyfill.min.js',document.querySelector('head').appendChild(t),a=!0;}};function s(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,'default')?t.default:t;}function u(t,e){return t(e={exports:{}},e.exports),e.exports;}var c=u((function(t,e){Object.defineProperty(e,'__esModule',{value:!0}),e.default=void 0;e.default=function(t){return'[object NodeList]'===Object.prototype.toString.call(t);};}));s(c);var l=s(u((function(t,e){Object.defineProperty(e,'__esModule',{value:!0}),e.default=void 0;var n,i=(n=c)&&n.__esModule?n:{default:n};e.default=function(t){return Array.isArray(t)?t:(0,i.default)(t)?Array.from?Array.from(t):Array.prototype.slice.call(t):new Array(t);};}))),f=function(t){t.forEach((function(t){t.animationData={styleCache:t.attributes.style?'visibility: hidden;'+t.style.cssText:'visibility: hidden;',effect:t.dataset.swiperAnimation||t.dataset.swiperAnimationOnce||'',duration:t.dataset.duration||'.5s',delay:t.dataset.delay||'.5s',outEffect:t.dataset.swiperOutAnimation||'',outDuration:t.dataset.outDuration||'.5s',isRecovery:!0,runOnce:!!t.dataset.swiperAnimationOnce},t.style.cssText=t.animationData.styleCache;}));},d=u((function(t,e){Object.defineProperty(e,'__esModule',{value:!0}),e.default=void 0;e.default=function(t){return'Promise'===Object.prototype.toString.call(t).slice(8,-1);};}));s(d);var m=s(u((function(t,e){Object.defineProperty(e,'__esModule',{value:!0}),e.default=void 0;var n,i=(n=d)&&n.__esModule?n:{default:n};e.default=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(0,i.default)(t)?t:new Promise((function(n){t(),setTimeout(n,e);}));};}))),y=function(t){if(t.el)return t.el;if(t.container)return t.container[0];throw new Error('Illegal swiper instance');},p=function(){function e(n){t(this,e),this.swiper=n,this.container=y(this.swiper),this.animationElements=[].concat(i(l(this.container.querySelectorAll('[data-swiper-animation]'))),i(l(this.container.querySelectorAll('[data-swiper-animation-once]')))),this.activeElements=[],f(this.animationElements);}return n(e,[{key:'animate',value:function(){var t=this;return Promise.resolve().then((function(){return e=t.activeElements,n=e.map((function(t){return t.animationData.isRecovery?Promise.resolve():t.animationData.outEffect?m((function(){t.style.cssText=t.styleCache,t.style.visibility='visible',t.style.cssText+=' animation-duration:'.concat(t.animationData.outDuration,'; -webkit-animation-duration:').concat(t.animationData.outDuration,';'),t.classList.add(t.animationData.outEffect,'animated');}),500):Promise.resolve();})),Promise.all(n);var e,n;})).then((function(){return e=t.activeElements,n=e.map((function(t){return t.animationData.isRecovery?Promise.resolve():t.animationData.runOnce?Promise.resolve():m((function(){var e;t.style.cssText=t.animationData.styleCache,(e=t.classList).remove.apply(e,i([t.animationData.effect,t.animationData.outEffect,'animated'].filter((function(t){return!!t;})))),t.animationData.isRecovery=!0;}));})),Promise.all(n);var e,n;})).then((function(){return e=t._updateActiveElements(),n=e.map((function(t){return t.animationData?m((function(){t.style.visibility='visible',t.style.cssText+=' animation-duration:'.concat(t.animationData.duration,'; -webkit-animation-duration:').concat(t.animationData.duration,'; animation-delay:').concat(t.animationData.delay,'; -webkit-animation-delay:').concat(t.animationData.delay,';'),t.classList.add(t.animationData.effect,'animated'),t.animationData.isRecovery=!1;})):Promise.resolve();})),Promise.all(n);var e,n;}));}},{key:'_updateActiveElements',value:function(){return this.activeElements=[].concat(i(l(this.swiper.slides[this.swiper.activeIndex].querySelectorAll('[data-swiper-animation]'))),i(l(this.swiper.slides[this.swiper.activeIndex].querySelectorAll('[data-swiper-animation-once]')))),this.activeElements;}}]),e;}();return function(){function e(){t(this,e),this.animations=null,o()||r();}return n(e,[{key:'init',value:function(t){return this.animations||(this.animations=new p(t)),this;}},{key:'animate',value:function(){var t=this;return o()?this.animations.animate():setTimeout((function(){return t.animate();}),500);}}]),e;}();})); | ||
| 0 | \ No newline at end of file | 7 | \ No newline at end of file |
back-end/h5-api/views/engine.ejs
| 1 | <!-- | 1 | <!-- |
| 2 | * @Author: ly525 | 2 | * @Author: ly525 |
| 3 | * @Date: 2019-12-04 20:24:04 | 3 | * @Date: 2019-12-04 20:24:04 |
| 4 | - * @LastEditors: ly525 | ||
| 5 | - * @LastEditTime: 2019-12-15 16:39:33 | 4 | + * @LastEditors : ly525 |
| 5 | + * @LastEditTime : 2020-01-24 21:03:29 | ||
| 6 | * @FilePath: /luban-h5/back-end/h5-api/views/engine.ejs | 6 | * @FilePath: /luban-h5/back-end/h5-api/views/engine.ejs |
| 7 | * @Github: https://github.com/ly525/luban-h5 | 7 | * @Github: https://github.com/ly525/luban-h5 |
| 8 | * @Description: 手机端预览模板 | 8 | * @Description: 手机端预览模板 |
| @@ -23,6 +23,7 @@ | @@ -23,6 +23,7 @@ | ||
| 23 | <link rel="stylesheet" href="/third-libs/animate.min.css"> | 23 | <link rel="stylesheet" href="/third-libs/animate.min.css"> |
| 24 | <link rel="stylesheet" href="/third-libs/swiper.min.css"> | 24 | <link rel="stylesheet" href="/third-libs/swiper.min.css"> |
| 25 | <script src="/third-libs/swiper.min.js"></script> | 25 | <script src="/third-libs/swiper.min.js"></script> |
| 26 | + <script src="/third-libs/swiper-animation.umd.min.js"></script> | ||
| 26 | <script>window.__work = <%- JSON.stringify(work) %></script> | 27 | <script>window.__work = <%- JSON.stringify(work) %></script> |
| 27 | <script src="/engine-assets/engine.umd.js"></script> | 28 | <script src="/engine-assets/engine.umd.js"></script> |
| 28 | <style> | 29 | <style> |
| @@ -256,6 +257,8 @@ | @@ -256,6 +257,8 @@ | ||
| 256 | }); | 257 | }); |
| 257 | </script> | 258 | </script> |
| 258 | <script> | 259 | <script> |
| 260 | + const swiperAnimation = new SwiperAnimation(); | ||
| 261 | + | ||
| 259 | var mySwiper = new Swiper('.swiper-container', { | 262 | var mySwiper = new Swiper('.swiper-container', { |
| 260 | // Optional parameters | 263 | // Optional parameters |
| 261 | direction: 'vertical', | 264 | direction: 'vertical', |
| @@ -273,6 +276,14 @@ | @@ -273,6 +276,14 @@ | ||
| 273 | scrollbar: { | 276 | scrollbar: { |
| 274 | el: '.swiper-scrollbar', | 277 | el: '.swiper-scrollbar', |
| 275 | }, | 278 | }, |
| 279 | + on: { | ||
| 280 | + init: function () { | ||
| 281 | + swiperAnimation.init(this).animate(); | ||
| 282 | + }, | ||
| 283 | + slideChange: function () { | ||
| 284 | + swiperAnimation.init(this).animate(); | ||
| 285 | + } | ||
| 286 | + } | ||
| 276 | }); | 287 | }); |
| 277 | 288 | ||
| 278 | function title(str) { | 289 | function title(str) { |
front-end/h5/src/components/core/models/element.js
| @@ -94,9 +94,17 @@ class Element { | @@ -94,9 +94,17 @@ class Element { | ||
| 94 | } | 94 | } |
| 95 | 95 | ||
| 96 | getAttrs () { | 96 | getAttrs () { |
| 97 | - return { | 97 | + const attrs = { |
| 98 | 'data-uuid': this.uuid | 98 | 'data-uuid': this.uuid |
| 99 | } | 99 | } |
| 100 | + | ||
| 101 | + if (this.animations.length > 0) { | ||
| 102 | + const animation = this.animations[0] | ||
| 103 | + attrs['data-swiper-animation'] = animation.type // "fadeIn" | ||
| 104 | + attrs['data-duration'] = `${animation.duration}s` // ".5s" | ||
| 105 | + attrs['data-delay'] = `${animation.delay}s` // "1s" | ||
| 106 | + } | ||
| 107 | + return attrs | ||
| 100 | } | 108 | } |
| 101 | 109 | ||
| 102 | getPreviewData ({ position = 'static', isRem = false, mode = 'preview' } = {}) { | 110 | getPreviewData ({ position = 'static', isRem = false, mode = 'preview' } = {}) { |