js实现canvas粒子飞舞动画效果代码
代码语言:html
所属分类:粒子
代码描述:js实现canvas粒子飞舞动画效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<html>
<head>
<style>
html, body {
overflow: hidden;
margin: 0;
}
html {
background: #14191C;
}
p {
position: absolute;
bottom: 1em;
width: 100%;
color: rgba(255, 255, 255, 0.25);
text-align: center;
pointer-events: none;
transition: opacity 1s ease-in-out;
}
</style>
</head>
<body>
<p style="opacity: 0;">
Click near Boids to disperse group.
</p>
<script>
// start particle simulation
simulate(
'2d', {
init: function() {
this.spray(150, function() {
return [
null,
null,
Vector.create(
this.width * Math.random(),
this.height * Math.random()
),
Vector.random(1),
.75 + (Math.random() * .5),
100 * Math.random(), [
this.behavior.cohesion(),
this.behavior.alignment(),
this.behavior.separation(),
this.behavior.limit(1 + Math.random()),
this.behavior.wrap(5),
this.behavior.move()
]
]
})
},
tick: function() {},
beforePaint: function() {
this.clear();
},
paint: function(particle) {
var p = particle.position;
var v = particle.velocity;
var s = particle.stimulated || 0;
var l = particle.life;
this.paint.circle(p.x, p.y, v.magnitudeSquared, 'hsla(' + v.angle + ',100%,50%,1)');
},
afterPaint: function() {
// nothing
},
action: function(x, y) {
// disperse if near
this.particles.forEach(function(p) {
if (Vector.distanceSquared(p.position, {
x: x,
y: y
}) < 4000) {
p.velocity.randomize(100);
p.position.x += p.velocity.x;
p.position.y += p.velocity.y;
}
});
}
}
);
setTimeout(() => {
document.querySelector('p').style.opacity = 0;
}, 3000);
// "simulate" particle simulation logic
/**
* Constants
*/
PI_2 = Math.PI / 2;
PI_180 = Math.PI / 180;
/**
* Random
*/
var Random = {
between: function(min, max) {
return min + (Math.random() * (max - min));
}
}
/**
* 2D Vector Class
*/
function Vector(x, y) {
this._x = x || 0;
this._y = y || 0;
}
Vector.create = function(x, y) {
return new Vector(x, y);
};
Vector.add = function(a, b) {
return new Vector(a.x + b.x, a.y + b.y);
};
Vector.subtract = function(a, b) {
return new Vector(a.x - b.x, a.y - b.y);
};
Vector.random = function(range) {
var v = new Vector();
v.randomize(range);
return v;
};
Vector.distanceSquared = function(a, b) {
var dx = a.x - b.x;
var dy = a.y - b.y;
return dx * dx + dy * dy;
};
Vector.distance = function(a, b) {
var dx = a.x - b.x;
var dy = a.y - b.y;
return Math.sqrt(dx * dx + dy * dy);
};
Vector.prototype = {
get x() {
return this._x;
},
get y() {
return this._y;
},
set x(value) {
this._x = value;
},
s.........完整代码请登录后点击上方下载按钮下载查看
















网友评论0