制作一个星空背景动图
参考代码:http://www.htmleaf.com/Demo/201707294657.html
import {Component,OnInit,HostListener} from "@angular/core"; @Component({ selector: 'star-background',template: ` <canvas id="canvas" style="position: absolute"></canvas> ` }) export class StarBackgroundComponent implements OnInit { ngOnInit(): void { this.draw(); } draw() { var canvas: any = document.getElementById('canvas'),ctx = canvas.getContext('2d'),w = canvas.width = window.innerWidth,h = canvas.height = window.innerHeight,hue = 217,stars = [],count = 0,maxStars = 1400; // Thanks @jackrugile for the performance tip! http://codepen.io/jackrugile/pen/BjBGoM // Cache gradient var canvas2 = document.createElement('canvas'),ctx2 = canvas2.getContext('2d'); canvas2.width = 100; canvas2.height = 100; var half = canvas2.width / 2,gradient2 = ctx2.createRadialGradient(half,half,half); gradient2.addColorStop(0.025,'#fff'); gradient2.addColorStop(0.1,'hsl(' + hue + ',61%,33%)'); gradient2.addColorStop(0.25,64%,6%)'); gradient2.addColorStop(1,'transparent'); ctx2.fillStyle = gradient2; ctx2.beginPath(); ctx2.arc(half,Math.PI * 2); ctx2.fill(); // End cache function random(min,max?) { if (arguments.length < 2) { max = min; min = 0; } if (min > max) { var hold = max; max = min; min = hold; } return Math.floor(Math.random() * (max - min + 1)) + min; } function Star() { this.orbitRadius = random(w / 2 - 50); this.radius = random(100,this.orbitRadius) / 10; this.orbitX = w / 2; this.orbitY = h / 2; this.timePassed = random(0,maxStars); this.speed = random(this.orbitRadius) / 1000000; this.alpha = random(2,10) / 10; count++; stars[count] = this; } Star.prototype.draw = function () { var x = Math.sin(this.timePassed + 1) * this.orbitRadius + this.orbitX,y = Math.cos(this.timePassed) * this.orbitRadius / 2 + this.orbitY,twinkle = random(10); if (twinkle === 1 && this.alpha > 0) { this.alpha -= 0.05; } else if (twinkle === 2 && this.alpha < 1) { this.alpha += 0.05; } ctx.globalAlpha = this.alpha; ctx.drawImage(canvas2,x - this.radius / 2,y - this.radius / 2,this.radius,this.radius); this.timePassed += this.speed; }; for (var i = 0; i < maxStars; i++) { new Star(); } function animation() { ctx.globalCompositeOperation = 'source-over'; ctx.globalAlpha = 0.8; ctx.fillStyle = 'hsla(' + hue + ',6%,1)'; ctx.fillRect(0,w,h); ctx.globalCompositeOperation = 'lighter'; for (var i = 1,l = stars.length; i < l; i++) { stars[i].draw(); } window.requestAnimationFrame(animation); } animation(); } @HostListener("window:resize") //监听窗口事件,用于自适应窗口大小 canvasResize() { this.draw(); } }
效果如图:
原文链接:https://www.f2er.com/angularjs/146061.html