画布动画

发布于 2024-09-01 01:13:06 字数 111 浏览 9 评论 0原文

我正在使用画布制作图形脚本,我正在向图表添加动画,但我不喜欢它的外观,例如,我使用 setInterval for X 函数向矩形添加高度来制作条形图,但是我想要一个更流畅的动画,还有另一种制作动画的方法吗?

I'm making a graph script using canvas, i'm adding animation to a chart but i don't like the way that it's look, i use setInterval for X function adding height to a rectangle to make a bar chart for example, but i wanna an animation more fluid, is another way to do an animation?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

辞别 2024-09-08 01:13:06

不不不。使用 JS 创建动画有三种方法:

  1. setTimeout()
  2. setInterval()
  3. requestAnimationFrame

选项 #1 和 #2 是创建动画的老式方法。选项 #3 是较新的规范,可产生最流畅的动画,因为浏览器本身会动态控制 FPS。这是 Paul Irish 创建的一个很棒的垫片,它创建了一个 requestAnimFrame 包装器来处理所有浏览器实现:

// shim layer with setTimeout fallback
window.requestAnimFrame = (function(){
  return  window.requestAnimationFrame       || 
          window.webkitRequestAnimationFrame || 
          window.mozRequestAnimationFrame    || 
          window.oRequestAnimationFrame      || 
          window.msRequestAnimationFrame     || 
          function(/* function */ callback, /* DOMElement */ element){
            window.setTimeout(callback, 1000 / 60);
          };
})();


// usage: 
// instead of setInterval(render, 16) ....

(function animloop(){
  render();
  requestAnimFrame(animloop, element);
})();

no no no. There are three ways to create an animation with JS:

  1. setTimeout()
  2. setInterval()
  3. requestAnimationFrame

options #1 and #2 are old-school ways of creating animations. option #3 is a newer spec and yields the smoothest animations because the browser itself is dynamically controlling the FPS. Here's an awesome shim created by Paul Irish that creates a requestAnimFrame wrapper to handle all browser implementations:

// shim layer with setTimeout fallback
window.requestAnimFrame = (function(){
  return  window.requestAnimationFrame       || 
          window.webkitRequestAnimationFrame || 
          window.mozRequestAnimationFrame    || 
          window.oRequestAnimationFrame      || 
          window.msRequestAnimationFrame     || 
          function(/* function */ callback, /* DOMElement */ element){
            window.setTimeout(callback, 1000 / 60);
          };
})();


// usage: 
// instead of setInterval(render, 16) ....

(function animloop(){
  render();
  requestAnimFrame(animloop, element);
})();
太阳哥哥 2024-09-08 01:13:06

我假设您有初始高度为 0 的矩形,并且每个间隔都增加高度,直到达到设定点......并且您想让动画“更平滑”?

为了使其更加流畅,您只需降低 setInterval [delay] 的第二个参数,以便第一个参数 [要调用的函数] 被更多地调用...

此外,您可以使用公式
rect.h = (rect.h*N+targetHeight)/(N+1)... 其中 N > 1...
因此,最初,条形会增长很多,然后最终减慢增长到目标高度。

I'm assuming that you have rectangles of initial height 0, and you're increasing height per interval until you reach a set point... and that you want to make the animation "smoother"?

To make it more fluid, you just lower the 2nd parameter of setInterval [delay] so that the first parameter [function to call] is called more...

In addition, you can add a tween with a slowdown at the end by using the formula
rect.h = (rect.h*N+targetHeight)/(N+1)... where N > 1...
So that initially, the bar grows by a lot and then eventually slows down growth to the target height.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文