javascript - webkitTransitionEnd 在重绘/回流之前被触发

标签 javascript css callback transition repaint

当我发出 ajax 请求时,我试图让一个 progressBar 改变它的宽度,我希望 ajax 回调仅在 progressBar 的动画结束后执行,我使用此代码:

CSS:

#progressBar{
    position: fixed;
    top: 0;
    left: 0;
    background: black;
    height: 3px;
    width: 0;
    transition: width 0.1s linear;
}   

js:

 var endProgressBar = function(){
                var bodyWidth = getComputedStyle(document.body).width;
                var scrolbarWidth = getComputedStyle(progressBar).width;
                console.log(scrolbarWidth  == bodyWidth )   //true but in reality not       
                param.success(req.responseText)
            }

...
        if(lastAffectWidth > 99){
                        progressBar.addEventListener("webkitTransitionEnd", endProgressBar,false);
                        progressBar.addEventListener("Transitionend", endProgressBar,false);
                        progressBar.addEventListener("otransitionend", endProgressBar,false);
                        progressBar.style.width = 100 + '%'
                    }

但是在屏幕上的宽度为 100% 之前调用了回调“endProgressBar”

我发现的唯一解决方案是添加 200 毫秒的 setTimeout,但我不喜欢这个解决方案。

我不明白的是 getComputedStyle(document.body).width;返回与 getComputedStyle(progressBar).width 相同的值,但实际情况并非如此。

谢谢

最佳答案

我通过将宽度转换替换为转换转换并在 translate3d 更改后在 dom 元素上调用 offsetWidth 来解决我的 pb。

关于javascript - webkitTransitionEnd 在重绘/回流之前被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41308799/

相关文章:

javascript - 在值 =""属性中打印 JS 变量

javascript - JSON stringify 在从 Dreamweaver 预览时有效,但在创建应用程序时不能从 .AIR 文件预览

javascript - 如何将文件名从 multer 传递到另一个中间件?

html - <img> 弄乱了容器大小并破坏了布局

javascript - 将元素添加到 DOM 时要转换什么属性来对创建的空间进行动画处理?

javascript - Selenium 和异步 JavaScript 调用

javascript - Next.js:匹配根 '/' 和动态路由 '/param' 的页面

html - CSS 强制顶部 z-index 父级溢出 :hidden

javascript - Nodejs 生成器异步回调 - slack unity 云构建

angular - 在 Angular 2 中使用回调还是使用 Promise 哪个更好?