1. 需求
给你一个数字,当这个数字变化时,有一个动画的过渡效果。
2. 思路
首先我们要知道两个数字变化需要多少秒,然后变化的范围,算出变化的速度。记住开始变化的时间,然后通过 requestAnimationFrame 函数,确定事件下一帧执行。
3. 效果
4. 代码实现
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta
name="viewport"
content="initial-scale=1.0, user-scalable=no, width=device-width"
/>
<title>document</title>
<style></style>
</head>
<body>
<button class="btn">打折</button>
<label>价格:4599.00</label>
<script>
const label = document.querySelector("label");
const btn = document.querySelector(".btn");
function animation(duration, from, to, callback) {
let value = from;
const speed = (to - from) / duration;
const start = Date.now();
function _run() {
const t = Date.now() - start;
if (t >= duration) {
value = to;
callback(value);
return;
}
value = from + t * speed;
callback(value);
requestAnimationFrame(_run);
}
_run();
}
btn.onclick = function () {
animation(2000, 4599, 30, (value) => {
label.textContent = `价格:${value.toFixed(2)}`;
});
};
</script>
</body>
</html>