¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <view |
| | | v-if="inited" |
| | | class="u-transition" |
| | | ref="u-transition" |
| | | @tap="clickHandler" |
| | | :class="classes" |
| | | :style="[mergeStyle]" |
| | | @touchmove="noop" |
| | | > |
| | | <slot /> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import props from './props.js'; |
| | | // ç»ä»¶çmethodsæ¹æ³ï¼ç±äºå
容è¾é¿ï¼åå¨å¤é¨æä»¶ä¸éè¿mixinå¼å
¥ |
| | | import transition from "./transition.js"; |
| | | /** |
| | | * transition å¨ç»ç»ä»¶ |
| | | * @description |
| | | * @tutorial |
| | | * @property {String} show æ¯å¦å±ç¤ºç»ä»¶ ï¼é»è®¤ false ï¼ |
| | | * @property {String} mode 使ç¨çå¨ç»æ¨¡å¼ ï¼é»è®¤ 'fade' ï¼ |
| | | * @property {String | Number} duration å¨ç»çæ§è¡æ¶é´ï¼åä½ms ï¼é»è®¤ '300' ï¼ |
| | | * @property {String} timingFunction 使ç¨çå¨ç»è¿æ¸¡å½æ° ï¼é»è®¤ 'ease-out' ï¼ |
| | | * @property {Object} customStyle èªå®ä¹æ ·å¼ |
| | | * @event {Function} before-enter è¿å
¥å触å |
| | | * @event {Function} enter è¿å
¥ä¸è§¦å |
| | | * @event {Function} after-enter è¿å
¥å触å |
| | | * @event {Function} before-leave 离å¼å触å |
| | | * @event {Function} leave 离å¼ä¸è§¦å |
| | | * @event {Function} after-leave 离å¼å触å |
| | | * @example |
| | | */ |
| | | export default { |
| | | name: 'u-transition', |
| | | data() { |
| | | return { |
| | | inited: false, // æ¯å¦æ¾ç¤º/éèç»ä»¶ |
| | | viewStyle: {}, // ç»ä»¶å
é¨çæ ·å¼ |
| | | status: '', // è®°å½ç»ä»¶å¨ç»çç¶æ |
| | | transitionEnded: false, // ç»ä»¶æ¯å¦ç»æçæ è®° |
| | | display: false, // ç»ä»¶æ¯å¦å±ç¤º |
| | | classes: '', // åºç¨çç±»å |
| | | } |
| | | }, |
| | | computed: { |
| | | mergeStyle() { |
| | | const { viewStyle, customStyle } = this |
| | | return { |
| | | // #ifndef APP-NVUE |
| | | transitionDuration: `${this.duration}ms`, |
| | | // display: `${this.display ? '' : 'none'}`, |
| | | transitionTimingFunction: this.timingFunction, |
| | | // #endif |
| | | // é¿å
èªå®ä¹æ ·å¼å½±åå°å¨ç»å±æ§ï¼æä»¥åå¨viewStyleåé¢ |
| | | ...uni.$u.addStyle(customStyle), |
| | | ...viewStyle |
| | | } |
| | | } |
| | | }, |
| | | // å°mixinæå¨å°ç»ä»¶ä¸ï¼uni.$u.mixinå®é
ä¸ä¸ºä¸ä¸ªvueæ ¼å¼å¯¹è±¡ |
| | | mixins: [uni.$u.mpMixin, uni.$u.mixin, transition, props], |
| | | watch: { |
| | | show: { |
| | | handler(newVal) { |
| | | // vueånvueå嫿§è¡ä¸åçæ¹æ³ |
| | | // #ifdef APP-NVUE |
| | | newVal ? this.nvueEnter() : this.nvueLeave() |
| | | // #endif |
| | | // #ifndef APP-NVUE |
| | | newVal ? this.vueEnter() : this.vueLeave() |
| | | // #endif |
| | | }, |
| | | // è¡¨ç¤ºåæ¶çå¬åå§åæ¶çpropsçshowçææ |
| | | immediate: true |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import '../../libs/css/components.scss'; |
| | | |
| | | /* #ifndef APP-NVUE */ |
| | | // vueçæ¬å¨ç»ç¸å
³çæ ·å¼æ½ç¦»å¨å¤é¨æä»¶ |
| | | @import './vue.ani-style.scss'; |
| | | /* #endif */ |
| | | |
| | | .u-transition {} |
| | | </style> |