| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
-
- var c1 = document.getElementById('c1'),
- ctx1 = c1.getContext('2d'),
- c2 = document.getElementById('c2'),
- ctx2 = c2.getContext('2d'),
- twopi = Math.PI * 2,
- parts = [],
- sizeBase,
- cw,
- opt,
- hue,
- count;
- function rand(min, max) {
- return Math.random() * (max - min) + min;
- }
- function hsla(h, s, l, a) {
- return 'hsla(' + h + ',' + s + '%,' + l + '%,' + a + ')';
- }
- function create() {
- sizeBase = cw + ch;
- count = Math.floor(sizeBase * 0.3),
- hue = rand(0, 360),
- opt = {
- radiusMin: 1,
- radiusMax: sizeBase * 0.04,
- blurMin: 10,
- blurMax: sizeBase * 0.04,
- hueMin: hue,
- hueMax: hue + 100,
- saturationMin: 10,
- saturationMax: 70,
- lightnessMin: 20,
- lightnessMax: 50,
- alphaMin: 0.1,
- alphaMax: 0.5
- }
- ctx1.clearRect(0, 0, cw, ch);
- ctx1.globalCompositeOperation = 'lighter';
- while (count--) {
- var radius = rand(opt.radiusMin, opt.radiusMax),
- blur = rand(opt.blurMin, opt.blurMax),
- x = rand(0, cw),
- y = rand(0, ch),
- hue = rand(opt.hueMin, opt.hueMax),
- saturation = rand(opt.saturationMin, opt.saturationMax),
- lightness = rand(opt.lightnessMin, opt.lightnessMax),
- alpha = rand(opt.alphaMin, opt.alphaMax);
- ctx1.shadowColor = hsla(hue, saturation, lightness, alpha);
- ctx1.shadowBlur = blur;
- ctx1.beginPath();
- ctx1.arc(x, y, radius, 0, twopi);
- ctx1.closePath();
- ctx1.fill();
- }
- parts.length = 0;
- for (var i = 0; i < Math.floor((cw + ch) * 0.03); i++) {
- parts.push({
- radius: rand(1, sizeBase * 0.03),
- x: rand(0, cw),
- y: rand(0, ch),
- angle: rand(0, twopi),
- vel: rand(0.1, 0.5),
- tick: rand(0, 10000)
- });
- }
- }
- function init() {
- resize();
- create();
- loop();
- }
- function loop() {
- requestAnimationFrame(loop);
- ctx2.clearRect(0, 0, cw, ch);
- ctx2.globalCompositeOperation = 'source-over';
- ctx2.shadowBlur = 0;
- ctx2.drawImage(c1, 0, 0);
- ctx2.globalCompositeOperation = 'lighter';
- var i = parts.length;
- ctx2.shadowBlur = 15;
- ctx2.shadowColor = '#fff';
- while (i--) {
- var part = parts[i];
- part.x += Math.cos(part.angle) * part.vel;
- part.y += Math.sin(part.angle) * part.vel;
- part.angle += rand(-0.05, 0.05);
- ctx2.beginPath();
- ctx2.arc(part.x, part.y, part.radius, 0, twopi);
- ctx2.fillStyle = hsla(0, 0, 100, 0.075 + Math.cos(part.tick * 0.02) * 0.05);
- ctx2.fill();
- if (part.x - part.radius > cw) { part.x = -part.radius }
- if (part.x + part.radius < 0) { part.x = cw + part.radius }
- if (part.y - part.radius > ch) { part.y = -part.radius }
- if (part.y + part.radius < 0) { part.y = ch + part.radius }
- part.tick++;
- }
- }
- function resize() {
- cw = c1.width = c2.width = window.innerWidth,
- ch = c1.height = c2.height = window.innerHeight;
- create();
- }
- function click() {
- create()
- }
- window.addEventListener('resize', resize);
- window.addEventListener('click', click);
- init();
|