RequestAnimation方法使用

来源:3-9 图形旋转 - 旋转矩阵

精慕门1158658

2023-03-10

为什么动画方法一定要这么写
let x = 1;

  function animation() {
    x += -0.01;
    gl.vertexAttrib1f(deg, x);
    gl.drawArrays(gl.TRIANGLES, 0, 3);
    requestAnimationFrame(animation);
  }
  animation();

才能生效,而不能这么写
let x = 1;

  function animation() {
    x += -0.01;
    gl.vertexAttrib1f(deg, x);
    gl.drawArrays(gl.TRIANGLES, 0, 3);
  }
  requestAnimationFrame(animation);

第一种写法为什么不会死循环

写回答

2回答

yancy

2023-03-10

//img.mukewang.com/szimg/640ab8ed0957213503910291.jpg            
0
1
精慕门1158658
谢谢老师,明白了
2023-03-10
共1条回复

yancy

2023-03-10

第二种是正常的函数执行,只会执行一次,这个方法和计时器的不同是不会重复的执行回调函数。所以需要通过递归调用的方式来重复执行。

0
1
精慕门1158658
这个点明白了, 还有一个问题, 这样写为什么会内存溢出 let x = 1; function animation(x) { x += -0.01; gl.vertexAttrib1f(deg, x); gl.drawArrays(gl.TRIANGLES, 0, 3); requestAnimationFrame(animation(x)); } animation(x); 报错:Uncaught RangeError: Maximum call stack size exceeded
2023-03-10
共1条回复

WebGL+Three.js 入门与实战,系统学习 Web3D 技术

前端的技术蓝海,涨薪好选择

1081 学习 · 294 问题

查看课程