JS实现动态星空背景效果


Posted in Javascript onNovember 01, 2019

本文实例为大家分享了JS实现动态星空背景的具体代码,供大家参考,具体内容如下

 JS实现动态星空背景效果

这里我截取的是一个图片,实际上是会动的。废话不多说,上代码。

HTML:

<canvas id="canvas"></canvas>

CSS:

/*css reset */
body,p,div,ol,ul,li,dl,dt,dd,h1,h2,h3,h4,h5,h6,form,input,iframe,nav {
 margin: 0;
 padding: 0;
}
html,body {
 width: 100%;
 height: 100%;
}
body {
 font: 14px Microsoft YaHei;
 -webkit-text-size-adjust:100%;
 -moz-user-select: none;
 -webkit-user-select: none;
 user-select: none;
 position: relative;
 background: #000;
}

#canvas {
 width: 100%;
 height: 100%;
 display: block;
 opacity: .8;
}

JS:

// 音量大小,0.01-1


//宇宙特效
var canvas = document.getElementById('canvas'),
ctx = canvas.getContext('2d'),
w = canvas.width = window.innerWidth,
h = canvas.height = window.innerHeight,

hue = 217,
stars = [],
count = 0,
maxStars = 1100;    //星星数量,默认1300
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, 0, half, half, half);
gradient2.addColorStop(0.025, '#CCC');
gradient2.addColorStop(0.1, 'hsl(' + hue + ', 61%, 33%)');
gradient2.addColorStop(0.25, 'hsl(' + hue + ', 64%, 6%)');
gradient2.addColorStop(1, 'transparent');

ctx2.fillStyle = gradient2;
ctx2.beginPath();
ctx2.arc(half, half, half, 0, 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 maxOrbit(x, y) {
 var max = Math.max(x, y),
 diameter = Math.round(Math.sqrt(max * max + max * max));
 return diameter / 2;
 //星星移动范围,值越大范围越小,
}

var Star = function() {

 this.orbitRadius = random(maxOrbit(w, h));
 this.radius = random(60, this.orbitRadius) / 10;  //星星大小,值越大星星越小,默认8
 
 this.orbitX = w / 2;
 this.orbitY = h / 2;
 this.timePassed = random(0, maxStars);
 this.speed = random(this.orbitRadius) / 80000;  //星星移动速度,值越大越慢,默认5W
 
 this.alpha = random(2, 10) / 10;

 count++;
 stars[count] = this;
}

Star.prototype.draw = function() {
 var x = Math.sin(this.timePassed) * this.orbitRadius + this.orbitX,
 y = Math.cos(this.timePassed) * this.orbitRadius + 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.5;         //尾巴
 ctx.fillStyle = 'hsla(' + hue + ', 64%, 6%, 2)';
 ctx.fillRect(0, 0, w, h)

 ctx.globalCompositeOperation = 'lighter';
 for (var i = 1,
 l = stars.length; i < l; i++) {
  stars[i].draw();
 };

 window.requestAnimationFrame(animation);
}

animation();

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
让广告代码不再影响你的网页加载速度
Jul 07 Javascript
别了 JavaScript中的isXX系列
Aug 01 Javascript
深入理解javascript中return的作用
Dec 30 Javascript
用javascript关闭本窗口不弹出询问框的方法
Sep 12 Javascript
jQuery获取iframe的document对象的方法
Oct 10 Javascript
js实现漫天星星效果
Jan 19 Javascript
vue2.0中goods选购栏滚动算法的实现代码
May 17 Javascript
深入理解Vue 的条件渲染和列表渲染
Sep 01 Javascript
vue项目中使用fetch的实现方法
Apr 25 Javascript
JavaScript实现简单的弹窗效果
May 19 Javascript
js实现简易点击切换显示或隐藏
Nov 29 Javascript
jQuery实现穿梭框效果
Jan 19 jQuery
jQuery高级编程之js对象、json与ajax用法实例分析
Nov 01 #jQuery
vue 中固定导航栏的实例代码
Nov 01 #Javascript
vue中beforeRouteLeave实现页面回退不刷新的示例代码
Nov 01 #Javascript
vue自定义switch开关组件,实现样式可自行更改
Nov 01 #Javascript
Vue实现导航栏的显示开关控制
Nov 01 #Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
Nov 01 #Javascript
vue设置导航栏、侧边栏为公共页面的例子
Nov 01 #Javascript
You might like
如何利用PHP执行.SQL文件
2013/07/05 PHP
PHP+shell实现多线程的方法
2015/07/01 PHP
php输出图像的方法实例分析
2017/02/16 PHP
CakePHP框架Model关联对象用法分析
2017/08/04 PHP
php抽象类和接口知识点整理总结
2019/08/02 PHP
Laravel 在views中加载公共页面的实现代码
2019/10/22 PHP
基于jQuery的图片大小自动适应实现代码
2010/11/17 Javascript
IE6下opacity与JQuery的奇妙结合
2013/03/01 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
jquery获取checkbox的值并post提交
2015/01/14 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
2015/03/31 Javascript
JQuery核心函数是什么及使用方法介绍
2016/05/03 Javascript
Javacript中自定义的map.js  的方法
2017/11/26 Javascript
JS实现根据指定值删除数组中的元素操作示例
2018/08/02 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
2018/08/27 Javascript
JS实现的input选择图片本地预览功能示例
2018/08/29 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
2020/10/29 Javascript
[01:56]生活中的妖精之七夕特别档
2016/08/09 DOTA
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
离线安装Pyecharts的步骤以及依赖包流程
2020/04/23 Python
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
浅谈Python爬虫基本套路
2019/03/25 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
2019/10/24 Python
Pytorch基本变量类型FloatTensor与Variable用法
2020/01/08 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
2021/01/28 Python
澳大利亚第一的设计师礼服租赁网站:GlamCorner
2017/08/13 全球购物
香港交友网站:be2香港
2018/07/22 全球购物
25岁生日感言
2014/01/13 职场文书
调解员先进事迹材料
2014/02/07 职场文书
校园会短篇的广播稿
2014/10/21 职场文书
2015年五四青年节演讲稿
2015/03/18 职场文书
2015年财务部工作总结
2015/04/10 职场文书
Java tomcat手动配置servlet详解
2021/11/27 Java/Android