js实现canvas小球排列交互位置动画效果代码
代码语言:html
所属分类:动画
代码描述:js实现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