js实现canvas小球排列交互位置动画效果代码

代码语言:html

所属分类:动画

代码描述:js实现canvas小球排列向下相互依次交互位置动画效果代码

代码标签: canvas 小球 位置

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" >

<head>

  <meta charset="UTF-8">

  
  
  
<style>
* {
  margin: 0;
  padding: 0;
}
html,
body {
  height: 100%;
  width: 100%;
  font-family: serif;
  overflow: hidden;
  position: relative;
}
canvas {
  display: block;
  height: 100%;
  width: 100%;
  position: absolute;
  top: 0;
  left: 0;
  z-index: -1;
  background: #000;
}
</style>




</head>

<body >
  
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/dat.gui-min.js"></script>
      <script >
let gui, canvas, c, width, height, id, shapes, size, num, maxDist;

const setupGui = () => {
  gui = new dat.GUI();

  gui.params = {
    timeScale: 0.0005,
    number: 10,
    size: 30,
    reset: () => initialize() };


  gui.ctrls = {
    timeScale: gui.add(gui.params, 'timeScale', 0.0005, 0.005, 0.0001),
    number: gui.add(gui.params, 'number', 1, 30).
    onChange(() => initialize()),
    size: gui.add(gui.params, 'size', 1, 500, 1).
    onChange(() => initialize()),
    reset: gui.add(gui.params, 'reset') };


  gui.close();
};

const setupCanvas = () => {
  canvas = document.createElement('canvas');
  document.getElementsByTagName('body')[0].appendChild(canvas);
  c = canvas.getContext('2d');
};

const initialize = () => {
  if (id) {
    cancelAnimationFrame(id);
  }

  width = canvas.width = window.innerWidth;
  height = canvas.height = window.innerHeight;

  shapes = new Array();
  size = gui.params.size;
  num = gui.params.number;
  maxDist = 0;

  const ajust = num * size / 2 - size / 2;

  for (let y = 0; y < num; y++) {
    for (let x = 0; x < num; x++) {
      const params = {};
      const ny = size * y - ajust;
      const nx = size * x - ajust;
      const dist = Math.sqrt(nx * nx + ny * ny);
      const angle = Math.atan2(ny, nx);
      const index = y * num + x;

      params.x = nx;
      params.y = ny;
      params.d = dist;
      params.a = angle;
      params.i = index;

      maxDist = Math.max(dist, maxDist);

      shapes.push(params);
   .........完整代码请登录后点击上方下载按钮下载查看

网友评论0