canvas流星劃過星空效果程式碼例項
分享一段程式碼例項,它實現了流星劃過星空效果。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> * { margin: 0; padding: 0; } html, body { height: 100%; } body { background: linear-gradient(to bottom, #131313 0%,#02101c 100%); } .canvas-box { position: fixed; left: 0; top: 0; z-index: -1; } a:link, a:hover, a:visited, a:active { text-decoration: none; color: inherit; display: block; } a { margin: 30px 0; font-size: 20px; } </style> </head> <body> <div class="canvas-box"> <canvas id="canvas">你的瀏覽器不支援canvas</canvas> </div> <script> var WINDOW_WIDTH = document.body.offsetWidth; var WINDOW_HEIGHT = document.body.offsetHeight; var canvas, context; var num = 500; var stars = []; var mouseX = WINDOW_WIDTH / 2; var mouseY = WINDOW_HEIGHT / 2; var rnd; window.onload = function() { canvas = document.getElementById('canvas'); canvas.width = WINDOW_WIDTH; canvas.height = WINDOW_HEIGHT; context = canvas.getContext('2d'); addStar(); setInterval(render, 33); liuxing(); // render(); document.body.addEventListener('mousemove', mouseMove); } function liuxing() { var time = Math.round(Math.random() * 3000 + 33); setTimeout(function() { rnd = Math.ceil(Math.random() * stars.length) liuxing(); }, time) } function mouseMove(e) { //因為是整屏背景,這裡不做座標轉換 mouseX = e.clientX; mouseY = e.clientY; } function render() { context.fillStyle = 'rgba(0,0,0,0.1)'; context.fillRect(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); // context.clearRect(0,0,WINDOW_WIDTH,WINDOW_HEIGHT) for (var i = 0; i < num; i++) { var star = stars[i]; if (i == rnd) { star.vx = -5; star.vy = 20; context.beginPath(); context.strokeStyle = 'rgba(255,255,255,' + star.alpha + ')'; context.lineWidth = star.r; context.moveTo(star.x, star.y); context.lineTo(star.x + star.vx, star.y + star.vy); context.stroke(); context.closePath(); } star.alpha += star.ra; if (star.alpha <= 0) { star.alpha = 0; star.ra = -star.ra; star.vx = Math.random() * 0.2 - 0.1; star.vy = Math.random() * 0.2 - 0.1; } else if (star.alpha > 1) { star.alpha = 1; star.ra = -star.ra } star.x += star.vx; if (star.x >= WINDOW_WIDTH) { star.x = 0; } else if (star.x < 0) { star.x = WINDOW_WIDTH; star.vx = Math.random() * 0.2 - 0.1; star.vy = Math.random() * 0.2 - 0.1; } star.y += star.vy; if (star.y >= WINDOW_HEIGHT) { star.y = 0; star.vy = Math.random() * 0.2 - 0.1; star.vx = Math.random() * 0.2 - 0.1; } else if (star.y < 0) { star.y = WINDOW_HEIGHT; } context.beginPath(); var bg = context.createRadialGradient(star.x, star.y, 0, star.x, star.y, star.r); bg.addColorStop(0, 'rgba(255,255,255,' + star.alpha + ')') bg.addColorStop(1, 'rgba(255,255,255,0)') context.fillStyle = bg; context.arc(star.x, star.y, star.r, 0, Math.PI * 2, true); context.fill(); context.closePath(); } } function addStar() { for (var i = 0; i < num; i++) { var aStar = { x: Math.round(Math.random() * WINDOW_WIDTH), y: Math.round(Math.random() * WINDOW_HEIGHT), r: Math.random() * 3, ra: Math.random() * 0.05, alpha: Math.random(), vx: Math.random() * 0.2 - 0.1, vy: Math.random() * 0.2 - 0.1 } stars.push(aStar); } } </script> </body> </html>
相關文章
- canvas載入效果程式碼例項Canvas
- canvas原型鐘錶效果程式碼例項Canvas原型
- canvas氣泡上浮效果程式碼例項Canvas
- canvas繪製箭頭效果程式碼例項Canvas
- canvas繪製流星效果Canvas
- canvas蔚藍星空效果Canvas
- CSS3滑過光束效果程式碼例項CSSS3
- canvas刮刮樂程式碼例項Canvas
- canvas繪製扇形程式碼例項Canvas
- canvas繪製網格程式碼例項Canvas
- jQuery tab選項卡效果程式碼例項jQuery
- CSS橢圓效果程式碼例項CSS
- canvas繪製機器貓程式碼例項Canvas
- canvas繪製拋物線程式碼例項Canvas線程
- canvas translate()、scale()和rotate()方法程式碼例項Canvas
- 美化滾動條效果程式碼例項
- css3水滴效果程式碼例項CSSS3
- css背景虛化效果程式碼例項CSS
- canvas繪製經典星空連線效果Canvas
- canvas繪製圓形鐘錶程式碼例項Canvas
- jQuery點選滑出層效果程式碼例項jQuery
- css3晃動效果程式碼例項CSSS3
- CSS3心形效果程式碼例項CSSS3
- div前後翻轉效果程式碼例項
- 當前文字框高亮效果程式碼例項
- CSS3旋轉效果程式碼例項CSSS3
- 淡入淡出效果簡單程式碼例項
- CSS3小黃人效果程式碼例項CSSS3
- css3折角效果程式碼例項CSSS3
- CSS3梯形效果程式碼例項CSSS3
- CSS3背景漸變效果程式碼例項CSSS3
- CSS3星系運動效果程式碼例項CSSS3
- canvas漫天飛雪效果程式碼Canvas
- 商品搶購倒數計時效果程式碼例項
- CSS3文字凹凸效果程式碼例項CSSS3
- html實現簡單ListViews效果的例項程式碼HTMLView
- 用canvas實現流星特效Canvas特效
- CSS3文字陰影效果程式碼例項CSSS3
- 用canvas繪製流星夜空Canvas