javascript - javascript 如何更新 DOM 中的元素?
问题描述
我正在尝试减慢图片缩小的动画速度,以便您实际上可以看到它缩小而不是仅仅跳到较小的尺寸,但是相反的情况是我的控制台日志按应有的方式更新-每次更新之间有间隔,但屏幕上的图像会等到 for 循环完成后才跳转到结束大小,而不是逐渐变小。我的代码有问题还是我错过了有关页面更新方式的一些幕后信息?
function sleep(milliseconds) {
const date = Date.now();
let currentDate = null;
do {
currentDate = Date.now();
} while (currentDate - date < milliseconds);
}
function makeSmaller(){
for (let i = 100; i>50; i--){
rockButtonImage.style.width = i+'%';
console.log(rockButtonImage.style.width);
sleep(50);
}
}
解决方案
现代浏览器避免了不必要的页面渲染,并在执行渲染之前等待 JavaScript 执行迭代完成。
提供的代码中的sleep()
函数实际上并不会导致浏览器sleep
执行处理器密集型计算,而是禁止浏览器渲染任何内容。
您可以尝试使用该setTimeout()
功能,例如:
var i = 100;
function makeSmaller(){
console.log(rockButtonImage.style.width);
rockButtonImage.style.width = i+'%';
i--;
if (i > 50) {
setTimeout(makeSmaller, 50);
}
}
您可能还会发现依靠 CSS 动画或 CSS 过渡而不是 JavaScript 来获得这样的视觉效果很有用,因为 JS 的效率几乎没有它们那么高。
也可以看看:
推荐阅读
- reactjs - Testing a Recoil selector with async Query
- apache-spark - 如何根据两列中的值子集/创建新的 Pyspark DF
- node.js - Are my fetch parameters messing up my query?
- django - Get Data From A Foreign Key Django
- jenkins - JMeter 没有正确执行使用 Jenkins 参数化的用户数
- node.js - 如何将多维javascript数组插入sqlite表?错误:SQLITE_ERROR:没有这样的表
- node.js - 数据库返回值在 Node JS 中未定义
- python - traefik 代理基本身份验证背后的 python fastapi 身份验证错误
- wordpress - 获取按分类分组的所有帖子
- kotlin - Kotlin Multiplatform Mobile:项目已经有一个名为 SDWebImage 的 CocoaPods 依赖项