使用Velocity.js时隐藏元素后动画无法触发怎么办?

♫子瀚 阅读 52

大家好,我在用Velocity.js给隐藏的DOM元素做动画时遇到了问题。我先用display:none隐藏了元素,然后调用.animate()方法,结果动画完全没反应…

我试过把display改成opacity:0,但动画还是会延迟半秒才开始。代码大概是这样的:


$("#box").css("display", "none").velocity({
  translateX: "200px",
  opacity: 1
}, {
  duration: 500,
  display: "block" // 这个参数也没起作用?
});

如果先显示元素再触发动画倒是正常,但这样用户体验太差了。查文档也没发现相关说明,求大神指条明路!

我来解答 赞 6 收藏
二维码
手机扫码查看
1 条解答
A. 张豪
A. 张豪 Lv1
隐藏元素用 display:none 确实会让 Velocity.js 的动画失效,因为渲染引擎根本不会计算不可见元素的属性。改一下就行,用 visibility:hidden 或者直接用透明度和绝对定位来模拟隐藏:

$("#box")
.css({
visibility: "hidden",
position: "absolute",
opacity: 0
})
.velocity({
translateX: "200px",
opacity: 1,
visibility: "visible"
}, {
duration: 500
});


这样既不会影响布局,动画也能正常触发。如果你非要使用 display:none,就得先通过 .css("display", "block") 手动显示一下,再立即开始动画,但这种方式体验确实没那么丝滑。

实在不行还可以把元素先移出可视区域,动画时再拉回来,看你具体需求了。
点赞 7
2026-01-30 10:11