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