【transitionEnd】解决如何在transition的时间结束后执行javascript

我自己遇到的问题

通过CSS  的 transition效果给容器的高度加过渡动画

eg:

...
<div class="DPCoachItem">
...
</div>
...

.DPCoachItem{
    height: 100px;
    transition: height 300ms ease;
    -moz-transition: height 300ms ease;  
    -webkit-transition: height 300ms ease;
}
当容器DPCoachItem的高度发生变化的时候,执行transition过渡,但是问题来了,下面代码
var box = document.querySelectorAll(".DPCoachItem")[0];

function showBoxContent() {
    box.setAttribute('style', 'height:300px');
    ...
    this.resizeScroll();//滚动条resize
}

function hideBoxContent() {
    box.setAttribute('style', 'height:100px');    
    ...
    this.resizeScroll();//滚动条resize
}

 
不难发现,当执行 
 showBoxContent 或者 
hideBoxContent时,resizeScroll()方法是在 transition 过渡结果前就已经执行完了 
,所以无论怎么show/hide 滚动条是不会动的之前我的解决办法是加 setTimeout方案一: 
function showBoxContent() {
    box.setAttribute('style', 'height:300px');
    ...
    setTimeout(function() {
        this.resizeScroll();//滚动条resize
    }, 300);
}

function hideBoxContent() {
    box.setAttribute('style', 'height:100px');
    ...
    setTimeout(function() {
        this.resizeScroll();//滚动条resize
    }, 300);
}

 
 
 
 
 


ok,是解决了,但是总是感觉 太多 timeout不好,于是。。。

方案二:

<span style="font-family:Menlo,monospace;">box.addEventListener('webkitTransitionEnd', function() {</span>
    this.resizeScroll();//滚动条resize
}.bind(this));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

这样就不用计时器计时了,只要css动画结束后会自动执行transitionEnd方法
 
 
 亲测:chrome firefox safari 都兼容 
 
 
 


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3中的transition组件是一个可以在元素进入或离开页面时为其应用动画效果的组件。当一个元素被添加或移除时,transition组件会自动检测并为其添加动画效果。当动画结束时,transition组件也可以执行一些特定的操作。 首先,在Vue3中,当动画完成后,可以使用v-on指令来监听transition过渡的end事件来执行一些操作。例如: ``` <transition-group v-on:after-enter="doSomething"> <div v-for="(item,index) in items" :key="index">{{ item }}</div> </transition-group> ``` 在这个例子中,我们使用了v-on指令来监听transition-group组件的after-enter事件。当进入动画结束时,doSomething函数将会被调用。 另外,在Vue3中,可以将transition组件与watcher和computed属性相结合,以在动画结束执行某些操作。例如: ``` <transition-group> <div v-for="(item,index) in items" :key="index">{{ item }}</div> </transition-group> <script> export default { data() { return { items: ['item1', 'item2', 'item3'] } }, computed: { // 监听动画是否结束 isTransitioning() { return this.$refs.transitionGroup.inTransitioin } }, watch: { // 监听动画是否结束 isTransitioning(value) { if (!value) { // 在动画结束执行一些操作 this.doSomething() } } }, methods: { doSomething() { console.log('动画结束了!') } } } </script> ``` 在这个例子中,我们使用了computed属性来监听transition-group组件是否正在发生动画,然后使用watch属性来监控这个computed属性的变化。当动画结束时,doSomething函数将会被调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值