canvas笔记--关于基础动画

本文介绍了如何使用Canvas实现基本动画,包括清除画布、保存与恢复状态等步骤。并讲解了通过setInterval与setTimeout方法控制动画定时重绘的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本的动画

动画的基本步骤

canvas的基本动画需要三部

1.清空canvas

除非接下来的绘制会全部填满canvas否则需要清空所有。最简单的是用clearRect方法

2.保存canvas状态

如果你需要改变一些会改变canvas状态的设置(样式,变形之类的)又要在每画一帧之时都是原始状态的话,你需要先保存一下

3.绘制动画图形(animated shapes)

​ 这一步才是重绘动画帧。

4.恢复canvas状态

如果已经保存了canvas的状态,可以先恢复它,然后重绘下一帧

操控动画Controlling an animation

为了实现动画我们需要一些可以定时重绘的方法。两种方法可以实现这样的动画效果,可以通过 setIntervalsetTimeout 方法来控制在设定的时间点上执行重绘。

  • 'setInterval(function, delay)`

当设定好间隔时间后,function会定期执行。

语法:

var intervalID = scope.setInterval(func, [delay, arg1, arg2, ...]);
var intervalID = scope.setInterval(function[, delay]);
var intervalID = scope.setInterval(code, [delay]);

参量:

func

一个function要执行每delay毫秒。该函数未传递任何参数,并且不会返回任何值。

code

可选语法允许您包含字符串而不是函数,该字符串每delay毫秒进行编译和执行。不建议使用此语法,原因与使用eval()安全风险的原因相同。

delay可选的

计时器应以毫秒(千分之一秒)为单位,在指定功能或代码的执行之间延迟。有关允许的值范围的详细信息

arg1, ..., argN 可选的

计时器到期后,将传递给func指定的函数的其他参数。

返回值

返回的intervalID是一个非零的数字值,它标识通过调用所创建的计时器setInterval()。可以将该值传递给WindowOrWorkerGlobalScope.clearInterval()来取消超时。

例子:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8" />
  <title>setInterval/clearInterval example</title>

  <script>
    var nIntervId;
 
    function changeColor() {
      nIntervId = setInterval(flashText, 1000);
    }
 
    function flashText() {
      var oElem = document.getElementById('my_box');
      oElem.style.color = oElem.style.color == 'red' ? 'blue' : 'red';
      // oElem.style.color == 'red' ? 'blue' : 'red' is a conditional or ternary operator.
    }
 
    function stopTextColor() {
      clearInterval(nIntervId);
    }
  </script>
</head>
 
<body onload="changeColor();">
  <div id="my_box">
    <p>Hello World</p>
  </div>

  <button onclick="stopTextColor();">Stop</button>
</body>
</html>
  • setTimeout(function, delay)`

在设定好的时间之后执行函数

语法

var timeoutID = scope.setTimeout(function[, delay, arg1, arg2, ...]);
var timeoutID = scope.setTimeout(function[, delay]);
var timeoutID = scope.setTimeout(code[, delay]);

参量

function

function计时器到期后要执行的A。

code

一种替代语法,允许您包括字符串而不是函数,该函数将在计时器到期时进行编译和执行。不建议使用此语法,原因与使用eval()安全风险的原因相同。

delay 可选的

时间(以毫秒(千分之一秒)为单位),计时器应等待执行指定的功能或代码。如果省略此参数,则使用0值,表示“立即”或更准确地执行下一个事件周期。

arg1, ..., argN 可选的

传递给所指定功能的其他参数function

  • requestAnimationFrame(callback)`

告诉浏览器你希望执行一个动画,并在重绘之前,请求浏览器执行一个特定的函数来更新动画。

语法:

window.requestAnimationFrame(callback);

参数

callback

下一次重绘之前更新动画帧所调用的函数(即上面所说的回调函数)。该回调函数会被传入DOMHighResTimeStamp参数,该参数与performance.now()的返回值相同,它表示requestAnimationFrame() 开始去执行回调函数的时刻。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值