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 相关文章推荐
JavaScript 原型学习总结
Oct 29 Javascript
jQuery $.get 的妙用 访问本地文本文件
Jul 12 Javascript
javascript数组的使用
Mar 28 Javascript
JS中Date日期函数中的参数使用介绍
Jan 02 Javascript
ExtJS4 动态生成的grid导出为excel示例
May 02 Javascript
javascript格式化json显示实例分析
Apr 21 Javascript
纯JavaScript手写图片轮播代码
Oct 20 Javascript
vue.js中proxyTable 转发请求的实现方法
Sep 20 Javascript
动态内存分配导致影响Javascript性能的问题
Dec 18 Javascript
JavaScript制作3D旋转相册
Aug 02 Javascript
vue使用一些外部插件及样式的配置代码
Nov 18 Javascript
vant时间控件使用方法详解
Dec 24 Javascript
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
星际争霸 Starcraft 编年史
2020/03/14 星际争霸
PHP下操作Linux消息队列完成进程间通信的方法
2010/07/24 PHP
centos 5.6 升级php到5.3的方法
2011/05/14 PHP
PHP设计模式之解释器模式的深入解析
2013/06/13 PHP
分享10段PHP常用代码
2015/11/11 PHP
学习php设计模式 php实现门面模式(Facade)
2015/12/07 PHP
php文件类型MIME对照表(比较全)
2016/10/07 PHP
PHP基于递归算法解决兔子生兔子问题
2018/05/11 PHP
取得传值的函数
2006/10/27 Javascript
firebug的一个有趣现象介绍
2011/11/30 Javascript
AngularJs页面筛选标签小功能
2016/08/01 Javascript
javascript 判断页面访问方式电脑或者移动端
2016/09/19 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
2017/01/01 Javascript
深入理解Javascript中的valueOf与toString
2017/01/04 Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
2017/09/04 Javascript
AngualrJs清除定时器遇到的坑
2017/10/13 Javascript
JQuery绑定事件四种实现方法解析
2020/12/02 jQuery
Python中几种导入模块的方式总结
2017/04/27 Python
Python爬取数据并写入MySQL数据库的实例
2018/06/21 Python
Python 数据库操作 SQLAlchemy的示例代码
2019/02/18 Python
python使用参数对嵌套字典进行取值的方法
2019/04/26 Python
python 整数越界问题详解
2019/06/27 Python
基于CSS3特效之动画:animation的应用
2013/05/09 HTML / CSS
HTML5标签使用方法详解
2015/11/27 HTML / CSS
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
小学清明节活动方案
2014/03/08 职场文书
创先争优活动心得体会
2014/09/04 职场文书
小学生国庆节演讲稿
2014/09/05 职场文书
2015年学雷锋活动总结
2015/02/06 职场文书
工程部主管岗位职责
2015/02/12 职场文书
出生证明格式
2015/06/15 职场文书
FP-growth算法发现频繁项集——构建FP树
2021/06/24 Python
css3带你实现3D转换效果
2022/02/24 HTML / CSS
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js
MySQL索引 高效获取数据的数据结构
2022/05/02 MySQL
WinServer2012搭建DNS服务器的方法步骤
2022/06/10 Servers