requestAnimationFrame实现动效优化

文章讨论了在JavaScript中使用setTimeout或setInterval进行动效更新时可能遇到的频率问题,以及如何通过requestAnimationFrame来优化动画的流畅性。requestAnimationFrame能根据屏幕刷新率调整回调频率,从而提供更平滑的视觉效果。示例代码展示了如何用它来实现模块每隔固定时间向右平移的动画。
摘要由CSDN通过智能技术生成

使用setTimeout/setInterval做动效改变时,过程中的刷新频率会影响最终效果,可以使用requestAnimationFrame来优化动效。
简单需求:
一模块,每间隔t秒右移x像素

const [left, setLeft] = useState(0)
const handlestartAnimation = () => {
	addLeft(0)
}

// 通过计时器逐步增加右移偏量
const addLeft = (left) => {
	if (left < 500) {
		setTimeout(() => {
			addLeft(left + 10)
		}, 15) // 这里的异步间隔不好控制,若设置为0ms,会直接移动到最右侧;15ms,又会有明显的卡顿现象...
	}
}

// 通过requestAnimationFrame
const addLeft = (left) => {
	if (left < 500) {
		setLeft(left + 10)
		window.requestAnimationFrame(() => addLeft(left + 10)) // 这里的刷新频率会根据屏幕的刷新频率动态改变,若屏幕刷新频率为60Hz,则回调函数1000/60=16.6ms执行一次
	}
}



return <div onClick={handlestartAnimation} className={cn.radio} style={{ left: `${left}px` }}></div>

requestAnimationFrame用法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值