Black hole special effects of HTML5+Canvas
<html>
<head>
<meta charset="utf-8">
<title>不要失去你的彩虹</title>
<style>
canvas {
? position: absolute;
? top: 0;
? left: 0;
}
</style>
</head>
<body>
<canvas id=c></canvas>
<script>
let w = c.width = window.innerWidth;
let h = c.height = window.innerHeight;
const ctx = c.getContext('2d');
const opts = {
? ? hexLength: 30,
? ? lenFn: ({ len, t }) =>
? ? ? len Math.sin(t),
? ? radFn: ({ rad, len, t, excitement }) =>
? ? ? rad (excitement opts.propFn({ len, t }))*2 / 4,
? ? propFn: ({ len, t }) =>?
? ? ? len / opts.hexLength / 10 - t,
? ? excitementFn: ({ len, t }) =>
? ? ? ?Math.sin(opts.propFn({ len, t }))**2,
? ? colorFn: ({ rad, excitement, t }) =>?
? ? ? `hsl(${rad / Math.TAU * 360 t}, ${excitement * 100}%, ${20 excitement * 50}%)`,
? ? timeStep: .01,
? ? randomJig: 8,
??
? ? repaintColor: 'rgba(0,0,0,.1)'
? };
let tick = 0;
Math.TAU = 6.28318530717958647692;
const vertices = [];
class Vertex {
? constructor({ x, y }) {
? ? this.len = Math.sqrt(x*x y*y);
? ? this.rad = Math.acos(x / this.len) * (y > 0 ? 1 : -1) .13;
? ? this.prevPoint = { x, y };
? }
??
? step() {
? ? const excitement = opts.excitementFn({ len: this.len, t: tick });
? ? const param = {?
? ? ? len: this.len,
? ? ? rad: this.rad,
? ? ? t: tick,
? ? ? excitement
? ? };
? ? const nextLen = opts.lenFn(param);
? ? const nextRad = opts.radFn(param);
? ? const color = opts.colorFn(param);
? ??
? ? ctx.strokeStyle = color;
? ? ctx.lineWidth = excitement .2;
? ? ctx.beginPath();
? ? ctx.moveTo(this.prevPoint.x, this.prevPoint.y);
? ? this.prevPoint.x = nextLen * Math.cos(nextRad) ?
? ? ? Math.random() * (1-excitement)**2 * opts.randomJig * 2 - opts.randomJig;
? ? this.prevPoint.y = nextLen * Math.sin(nextRad)
? ? ? Math.random() * (1-excitement)**2 * opts.randomJig * 2 - opts.randomJig;
? ? ctx.lineTo(this.prevPoint.x, this.prevPoint.y);
? ? ctx.stroke();
? }
??
? static gen() {
? ? vertices.length = 0;?
? ? const hexCos = Math.cos(Math.TAU / 12) * opts.hexLength;
? ? const hexSin = Math.sin(Math.TAU / 12) * opts.hexLength;
??
? ? let alternanceX = false;
? ? for(let x = 0; x < w; x = hexCos) {
? ? ? let alternance = alternanceX = !alternanceX;
? ? ? for(let y = 0; y < h; y = hexSin opts.hexLength) {
? ? ? ? alternance = !alternance;
? ? ? ? vertices.push(new Vertex({
? ? ? ? ? x: x - w / 2,
? ? ? ? ? y: y alternance * hexSin - h / 2
? ? ? ? }))
? ? ? }
? ? }
? ??
? }
}
Vertex.gen();
ctx.fillStyle = '#222';
ctx.fillRect(0, 0, w, h);
const anim = () => {
? window.requestAnimationFrame(anim);
??
? tick = opts.timeStep;
??
? ctx.fillStyle = opts.repaintColor;
? ctx.fillRect(0, 0, w, h);
??
? ctx.translate(w/2, h/2);
? vertices.forEach((vertex) => vertex.step());
? ctx.translate(-w/2, -h/2);
}
anim();
window.addEventListener('resize', () => {
? w = c.width = window.innerWidth;
? h = c.height = window.innerHeight;
??
? Vertex.gen();
? tick = 0;
? ctx.fillStyle = '#222';
? ctx.fillRect(0, 0, w, h);
})
</script>
</body>
</html>
這是一個(gè)HTML5 Canvas的黑洞特效,需要的朋友可以直接下載使用,更多特效代碼盡在PHP中文網(wǎng)。
All resources on this site are contributed by netizens or reprinted by major download sites. Please check the integrity of the software yourself! All resources on this site are for learning reference only. Please do not use them for commercial purposes. Otherwise, you will be responsible for all consequences! If there is any infringement, please contact us to delete it. Contact information: admin@php.cn
Related Article

24 Jun 2016
61 web page special effects that are very fashionable and have great visual effects

24 Jun 2016
Animation loading special effects implemented in pure css3

06 Jul 2016
jquery waterfall flow LightBox picture box special effects

24 Jun 2016
A batch of hover special effects implemented by CSS3

24 Jun 2016
Revealing the special effects in Tencent’s Burberry event page

06 Jul 2016
CSS3 mouse slides over animated line border special effects

24 Jun 2016
Based on css3 cool page loading animation special effects code


Hot Tools

HTML5 Canvas heart fluttering animation special effects
HTML5 Canvas heart fluttering animation special effect is a generated animation that can be directly opened with a browser to see a heart.

H5 panda bouncing game source code
HTML5 Mobile Panda is also a crazy game source code. Game description: Press and hold the screen to adjust the strength of the panda spring and jump to the stone pillar. The game ends if you fall into the river.

HTML5 Valentine's Day box animation special effects
Based on svg, draw animations of opening love box gifts on Valentine's Day, and special effects of love box animation.

H5 3D rolling ball game source code
HTML5 cool 3D ball rolling mobile game code download. Game introduction: A colored ball rolls, and the current track of the colored ball is controlled by dragging it with the mouse or the touch screen of the mobile phone. This is a simple and easy-to-operate mobile game source code.
