Javascript void element.offsetWidth有什么用途?
Javascript void element.offsetWidth有什么用途?,javascript,html,css,css-animations,Javascript,Html,Css,Css Animations,void元素.offsetWidth是一行奇怪的代码,似乎什么都不做,但CSS动画需要它才能工作。这条生产线做什么?为什么需要它 如果注释掉整行,则动画只发生一次,但不会重复。(如果删除了无效项,该功能仍然有效。) 他们住在这里;我试图复制以下相关摘录: script.js: beatIndicator = document.getElementById("beatIndicator"), ... // Happens every time a beat starts: beatIndica
void元素.offsetWidth
是一行奇怪的代码,似乎什么都不做,但CSS动画需要它才能工作。这条生产线做什么?为什么需要它
如果注释掉整行,则动画只发生一次,但不会重复。(如果删除了无效项
,该功能仍然有效。)
他们住在这里;我试图复制以下相关摘录:
script.js:
beatIndicator = document.getElementById("beatIndicator"),
...
// Happens every time a beat starts:
beatIndicator.classList.remove("anim");
void beatIndicator.offsetWidth; // Why is this line needed?
beatIndicator.classList.add("anim");
示例高级.html
<span style="display: none;" id="beatIndicator" class="pulse"></span>
<style>
.pulse {
width: 40px;
height: 40px;
border-radius: 50%;
background: #f44336;
z-index: 3;
left: -18px;
display: inline-block;
vertical-align: middle;
margin-left: 10px;
}
@keyframes pulse-anim {
from {
box-shadow: rgba(244, 67, 54, 1) 0px 0px 0px 0px;
}
to {
box-shadow: rgba(244, 67, 54, 0) 0px 0px 0px 14px;
}
}
.pulse.anim {
animation: pulse-anim;
}
</style>
.脉搏{
宽度:40px;
高度:40px;
边界半径:50%;
背景#f44336;
z指数:3;
左-18px;
显示:内联块;
垂直对齐:中间对齐;
左边距:10px;
}
@关键帧脉冲动画{
从{
盒影:rgba(244,67,54,1)0px 0px 0px 0px;
}
到{
盒影:rgba(244,67,54,0)0px 0px 0px 14px;
}
}
.pulse.anim{
动画:脉冲动画;
}
当您对dom进行更改时,例如classList.remove('anim')
,这可能会导致对页面的一系列更改。呈现这些更改可能会很昂贵,而且由于很常见的情况是您会连续更改多个内容,浏览器会尝试将累积的更改成批处理,并且只在您所做的操作结束时执行计算
如果没有那条奇怪的线,那么会发生以下情况:
- 你移除了这个类。浏览器会注意到这一点,但不会重新绘制屏幕
- 您可以添加该类。浏览器会注意到这一点,但不会重新绘制屏幕
- 您的函数完成后,浏览器决定进行必要的计算,以使页面符合您的要求。。。但一切都没有改变!您已经将页面恢复到单击处理程序开始之前的状态。由于没有任何变化,显示保持不变;没有动画运行
element.addEventListener("click", function(e){
element.classList.remove("anim");
setTimeout(() => element.classList.add("anim"), 0);
}, false);