Canvas线条花环

2020-10-09 19:31:30 浏览数 (1)

  可喜可贺!庆祝电脑起死回生,庆祝一天好过一天。深夜给电脑安装了开发插件,第二天莫名死机,问了好多人都说主板坏掉了,需要重装系统。我先是对着 宾夕法尼亚大学 的方向拜了拜,又是一番操作,终于唤醒了老伙计度假的心。   写一个Canvas 动画送给你们,十五的月亮十六圆,多给家人一些陪伴。

  今晚我会出一期Canvas 动画详细教程,如果你欣赏我的动画,我将不胜感激。 请看源码:

代码语言:javascript复制
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<title>Canvas 网状花环</title>
<style>
html, body {
  margin: 0;
  overflow: hidden;
}
</style>
</head>
<body>
	<canvas id="canvas" width="100%" height="100%">
</body>
<script>
	var canvas = document.querySelector("#canvas");
	var ctx = canvas.getContext("2d");
	var mouseX = 0;
	var mouseY = 0;
	var a = 0.2;
	var t = 0;
	var aStep = Math.PI * 0.01;
	var globalHue = 0;
	init();
	function init() {
	  canvas.width = window.innerWidth;
	  canvas.height = window.innerHeight;
	  window.addEventListener("mousemove", e => {
	    mouseX = e.clientX;
	    mouseY = e.clientY;
	  });
	  update();
	}

	function update() {
	  requestAnimationFrame(update);
	  var time = performance.now() / 60;

	  // do stuff here
	  a = Math.sin(2 - time * 0.0001);
	  t = Math.sin(2   time * 0.03);
	  //aStep = (Math.sin(time * 0.01)   1.5) * 0.25
	  aStep = Math.PI * (0.375   Math.sin(time * 0.001) * 0.125);

	  globalHue  = 10;

	  draw();
	}

	function draw() {
	  // clear canvas
	  ctx.fillStyle = "#000000";
	  ctx.fillRect(0, 0, canvas.width, canvas.height);

	  // line
	  var cx = window.innerWidth / 2;
	  var cy = window.innerHeight / 2;
	  var x, y, px, py;
	  var radius = 0,pradius = 0;
	  var totalAngle = Math.PI * 200;
	  for (var theta = 0; theta < totalAngle; theta  = aStep) {
	    pradius = radius;
	    radius = (t   Math.pow(2, Math.cos(theta * a))) * 200;
	    px = x;
	    py = y;
	    x = cx   Math.cos(theta) * radius;
	    y = cy   Math.sin(theta) * radius;

	    if (theta > 0) {
	      ctx.beginPath();
	      ctx.moveTo(x, y);
	      ctx.lineTo(px, py);

	      var dx = x - px;
	      var dy = y - py;
	      var lineSize = Math.sqrt(dx * dx   dy * dy);

	      var r = pradius   (radius - pradius) / 2;

	      var hue = globalHue   theta / Math.PI * 180;
	      ctx.strokeStyle = "hsl("   hue   ", 100%, 50%)";
	      //ctx.lineWidth=clamp(map(r, -200, 200, 0.25, 2), 0.25, 10);
	      ctx.lineWidth = .5;
	      ctx.stroke();
	      ctx.closePath();
	    }
	  }
	}
	function map(value, start1, stop1, start2, stop2) {
	  return start2   (stop2 - start2) * ((value - start1) / (stop1 - start1));
	}
	function clamp(value, min, max) {
	  return value < min ? min : value > max ? max : value;
	}
</script>
</html>

  无论是Canvas 还是别的,前端的学习总是妙趣横生,只要思想在不断进步,技术就会一次次的突破。如果你学习过Canvas ,你会更加了解这段代码的神奇,送给你,远道而来的求学者。

0 人点赞