Canvas 动画 - 长尾阴影效果

如果物体运动的速度足够快,我们就能在物体经过的路径上看到一些物体运动的影子

要实现这种效果,我们就要画一个半透明的图形代替前一帧而不是使用 clearRect() 清除它

<!DOCTYPE html>
<meta charset="utf-8">
<canvas id="canvas-1" width="400" height="200">
</canvas>
<script>
var c = document.getElementById('canvas-1');
var ctx = c.getContext('2d');
var rq;

var ball = {
  x: 10,
  y: 10,
  vx: 5,
  vy: 2,
  radius: 10,
  color: 'blue',
  draw: function() {
    ctx.beginPath();
    ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, true);
    ctx.closePath();
    ctx.fillStyle = this.color;
    ctx.fill();
  }
};

function draw() {
  ctx.fillStyle = 'rgba(255,255,255,0.3)';
  ctx.fillRect(0,0,c.width,c.height);
  ctx.strokeRect(0,0,c.width,c.height);
  ball.draw();
  ball.x += ball.vx;
  ball.y += ball.vy;
  ball.vy *= .99;
  ball.vy += .25;

  if (ball.y + ball.vy > c.height ||
      ball.y + ball.vy < 0) {
    ball.vy = -ball.vy;
  }
  if (ball.x + ball.vx > c.width ||
      ball.x + ball.vx < 0) {
    ball.vx = -ball.vx;
  }

  rq = window.requestAnimationFrame(draw);
}

rq = window.requestAnimationFrame(draw);
ball.draw();
</script>

为什么能实现这种效果呢?

两张 30% 透明的形状叠加到一起的透明度绝对高于 30%,也就是更不透明

要示范也很简单,大家拿一副太阳镜对着太阳和两块太阳镜叠加对着太阳,透过太阳镜看太阳的亮度是不一样的

那么当数量达到一定程度的时候,最底下那张图片就彻底看不到了

球还是那个球,我们演示给大家看一下

Canvas 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.