js实现一个canvas粒子流动动画效果代码
代码语言:html
所属分类:粒子
代码描述:js实现一个canvas粒子流动动画效果代码,点击可改变流动的方向。
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<style>
html, body {
overflow: hidden;
margin: 0;
padding: 0;
width: 100%;
height: 100%;
background:#000;
touch-action: none;
content-zooming: none;
}
canvas {
position: absolute;
width: 100%;
height: 100%;
background:#000;
cursor: pointer;
}
</style>
</head>
<body>
<div></div>
<script>
"use strict";
{
const perlin = {
init () {
this.p = new Uint8Array(512);
this.reset();
},
reset() {
for (let i = 0; i < 512; ++i) {
this.p[i] = Math.random() * 256;
}
},
lerp(t, a, b) {
return a + t * (b - a);
},
grad2d(i, x, y) {
const v = (i & 1) === 0 ? x : y;
return (i & 2) === 0 ? -v : v;
},
noise2d(x2d, y2d) {
const X = Math.floor(x2d) & 255;
const Y = Math.floor(y2d) & 255;
const x = x2d - Math.floor(x2d);
const y = y2d - Math.floor(y2d);
const fx = (3 - 2 * x) * x * x;
const fy = (3 - 2 * y) * y * y;
const p0 = this.p[X] + Y;
const p1 = this.p[X + 1] + Y;
return this.lerp(
fy,
this.lerp(
fx,
this.grad2d(this.p[p0], x, y),
this.grad2d(this.p[p1], x - 1, y)
),
this.lerp(
fx,
this.grad2d(this.p[p0 + 1], x, y - 1),
this.grad2d(this.p[p1 + 1], x - 1, y - 1)
)
);
}
};
/////////////////////////////////////////////////////////////////
const canvas = {
init() {
this.elem = document.createElement("canvas");
document.body.appendChild(this.elem);
this.width = this.elem.width = this.elem.offsetWidth;
this.height = this.elem.height = this.elem.offsetHeight;
return this.elem.getContext("2d");
}
};
/////////////////////////////////////////////////////////////////
co.........完整代码请登录后点击上方下载按钮下载查看
网友评论0