svg实现线条绘制三角canvas动画效果代码

代码语言:html

所属分类:动画

代码描述:svg实现线条绘制三角canvas动画效果代码

代码标签: 绘制 三角 canvas 动画 效果

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

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

<head>

  <meta charset="UTF-8">



  
  
  
  
<style>
document, body {
  margin: 0;
  min-height: 100vh;
}

body {
  align-items: center;
  display: flex;
  justify-content: center;
}

#container {
  align-items: center;
  display: flex;
  flex-direction: column;
}

#container > :first-child {
  cursor: pointer;
}

button {
  max-width: 200px;
  margin-top: 10px;
}

canvas, svg {
  width: 100vw;
  height: 100vh;
}
</style>



</head>

<body >
  <div id="container"></div>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/svg.min.js"></script>
      <script type="module">

import { Vec2 } from 'https://cdn.skypack.dev/wtc-math';
console.clear();

const config = {
  drawingType: 1,
  dimensions: (new Vec2(window.innerWidth, window.innerHeight)).scale(2),
  breakRun: 2000,
  maxDepth: 12,
  maxPerRun: 100,
  insertType: 1,
  randomType: 0
};
const vars = {
  drawing: null,
  i:0,
  running: true,
  triangles: []
}
const setup = () => {
  vars.running = false;
  setTimeout(() => {
    vars.running = true;
    vars.triangles = [];
    config.insertType = Math.floor(Math.random() * 3);
    config.randomType = Math.floor(Math.random() * 3);
    vars.i=0;
    
    document.querySelector('#container').innerHTML = '';
    vars.drawing = new Drawing(config.drawingType).addTo('#container').size(config.dimensions);
    document.body.querySelector('#container>:first-child').addEventListener('click', () => {
      setup();
    });
    
    draw();
  }, 100);
};

window.addEventListener('resize', () => {
  config.dimensions = ( new Vec2(window.innerWidth, window.innerHeight)).scale(2)
  setup();
});

let depth = 0;
const ts = [
  ['a', 'b'],
  ['b', 'c'],
  ['c', 'a']
];
const drawStep = () => {
  if(!vars.running) return;
  if(vars.i > 2000) return;
  let newTriangles = [];
  vars.triangles.forEach((triangle,i) => {
    if(i>config.breakRun) {
      // newTriangles.splice(0,0,triangle);
      return;
    }
    vars.drawing.polygon(triangle.points);
    let c = triangle.randomCentroid;
    if(config.randomType == 0) {
      c = triangle.centroid;
    } 
    
    // vars.drawing.circle(c, 5);
    if(triangle.depth < config.maxDepth) {
      ts.forEach(t => {
        const tr = new Triangle(triangle[t[0]], triangle[t[1]], c);
        tr.depth=triangle.depth+1;
        newTriangles.push(tr); 
      });
    }
  });
  if(config.insertType === 0) {
    if(vars.tr.........完整代码请登录后点击上方下载按钮下载查看

网友评论0