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 相关文章推荐
jquery蒙版控件实现代码
Dec 08 Javascript
jQuery技巧总结
Jan 01 Javascript
javascript操作css属性
Dec 30 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
May 22 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
Jun 19 Javascript
简介JavaScript中的push()方法的使用
Jun 09 Javascript
jQuery中判断对象是否存在的方法汇总
Feb 24 Javascript
原生js实现可拖动的登录框效果
Jan 21 Javascript
jQuery EasyUI Panel面板组件使用详解
Feb 28 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
Apr 04 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
Aug 27 Javascript
微信自定义分享链接信息(标题,图片和内容)实现过程详解
Sep 04 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
PHP中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
php去除HTML标签实例
2013/11/06 PHP
一个简单的PHP验证码实现代码
2014/05/10 PHP
php for 循环使用的简单实例
2016/06/02 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
jQuery技巧大放送 学习jquery的朋友可以看下
2009/10/14 Javascript
js操作模态窗口及父子窗口间相互传值示例
2014/06/09 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
js实现对ajax请求面向对象的封装
2016/01/08 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
javascript拖拽效果延伸学习
2016/04/04 Javascript
详解JavaScript中基于原型prototype的继承特性
2016/05/05 Javascript
JS模拟bootstrap下拉菜单效果实例
2016/06/17 Javascript
JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)
2016/06/24 Javascript
Javascript点击按钮随机改变数字与其颜色
2016/09/01 Javascript
jQuery中的deferred使用方法
2017/03/27 jQuery
Vue键盘事件用法总结
2017/04/18 Javascript
利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
2021/01/30 Javascript
微信小程序使用蓝牙小插件
2019/09/23 Javascript
vue实现登录拦截
2020/06/29 Javascript
js实现全选和全不选功能
2020/07/28 Javascript
js实现带有动画的返回顶部
2020/08/09 Javascript
[02:35]DOTA2超级联赛专访XB 难忘一年九冠称王
2013/06/20 DOTA
[08:42]DOTA2每周TOP10 精彩击杀集锦vol.2
2014/06/25 DOTA
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
Python正则替换字符串函数re.sub用法示例
2017/01/19 Python
Python File readlines() 使用方法
2018/03/19 Python
解决使用PyCharm时无法启动控制台的问题
2019/01/19 Python
python list多级排序知识点总结
2019/10/23 Python
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
面试求职的个人自我评价
2013/11/16 职场文书
冰淇淋开店创业计划书
2014/02/01 职场文书
2014年三八妇女节活动总结
2014/03/01 职场文书
应届本科毕业生求职信
2014/07/23 职场文书
学子宴致辞大全
2015/07/27 职场文书
“爱眼护眼,提前预防近视”倡议书3篇
2019/10/30 职场文书