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

本文探讨了使用CSS transition实现元素高度变化的过渡效果,并解决了在高度变化过程中同步更新滚动条位置的问题。通过采用transitionEnd事件替代setTimeout方法,实现了更优雅且兼容性良好的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我自己遇到的问题

通过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 都兼容 
 
 
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值