Commit 796a5e18f5b94e44e74d48d1dc8204b65061f61c

Authored by ly525
1 parent 3d8dee71

fix: #119 run animation when slide changes; (zh) 滚动页面时候执行动画

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' } = {}) {