svg实现线条绘制三角canvas动画效果代码
代码语言:html
所属分类:动画
代码描述:svg实现线条绘制三角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