Vue-内容展开收起过渡效果(借鉴某位大佬,不知道出处了)

1.定义collapseTransition .js

 1 const elTransition = '0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out';
 2 const Transition = {
 3     'before-enter'(el) {
 4         el.style.transition = elTransition;
 5         if (!el.dataset) el.dataset = {};
 6         el.dataset.oldPaddingTop = el.style.paddingTop;
 7         el.dataset.oldPaddingBottom = el.style.paddingBottom;
 8         el.style.height = 0;
 9         el.style.paddingTop = 0;
10         el.style.paddingBottom = 0;
11     },
12     enter(el) {
13         el.dataset.oldOverflow = el.style.overflow;
14         if (el.scrollHeight !== 0) {
15             el.style.height = el.scrollHeight + 'px';
16             el.style.paddingTop = el.dataset.oldPaddingTop;
17             el.style.paddingBottom = el.dataset.oldPaddingBottom;
18         } else {
19             el.style.height = '';
20             el.style.paddingTop = el.dataset.oldPaddingTop;
21             el.style.paddingBottom = el.dataset.oldPaddingBottom;
22         }
23         el.style.overflow = 'hidden';
24     },
25     'after-enter'(el) {
26         el.style.transition = '';
27         el.style.height = '';
28         el.style.overflow = el.dataset.oldOverflow;
29     },
30     'before-leave'(el) {
31         if (!el.dataset) el.dataset = {};
32         el.dataset.oldPaddingTop = el.style.paddingTop;
33         el.dataset.oldPaddingBottom = el.style.paddingBottom;
34         el.dataset.oldOverflow = el.style.overflow;
35 
36         el.style.height = el.scrollHeight + 'px';
37         el.style.overflow = 'hidden';
38     },
39     leave(el) {
40         if (el.scrollHeight !== 0) {
41             el.style.transition = elTransition;
42             el.style.height = 0;
43             el.style.paddingTop = 0;
44             el.style.paddingBottom = 0;
45         }
46     },
47     'after-leave'(el) {
48         el.style.transition = '';
49         el.style.height = '';
50         el.style.overflow = el.dataset.oldOverflow;
51         el.style.paddingTop = el.dataset.oldPaddingTop;
52         el.style.paddingBottom = el.dataset.oldPaddingBottom;
53     }
54 };
55 export default {
56     name: 'collapseTransition',
57     functional: true,
58     render(h, {children}) {
59         const data = {
60             on: Transition
61         };
62         return h('transition', data, children);
63     }
64 };

2.引入

  组件内引入

  import collapseTransition from '../collapseTransition.js';

3.使用

1 <collapseTransition> 
2     <div v-show="drawStatus"> 
3     </div> 
4 </collapseTransition> 

4.说明:

  改变drawStatus状态即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值