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写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
Feb 09 Javascript
javascript 读取图片文件的大小
Jun 25 Javascript
jQuery中的.bind()、.live()和.delegate()之间区别分析
Jun 08 Javascript
vue,angular,avalon这三种MVVM框架优缺点
Apr 27 Javascript
动态的9*9乘法表效果的实现代码
May 16 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
Dec 12 Javascript
vue双向绑定的简单实现
Dec 22 Javascript
javascript html5轻松实现拖动功能
Mar 01 Javascript
vue与TypeScript集成配置最简教程(推荐)
Oct 17 Javascript
vue父组件异步获取数据传给子组件的方法
Jul 26 Javascript
JS字典Dictionary类定义与用法示例
Feb 01 Javascript
vuex实现购物车的增加减少移除
Jun 28 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+MySQL投票系统的设计和实现分享
2012/09/23 PHP
php Imagick获取图片RGB颜色值
2014/07/28 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
2015/03/10 PHP
php通过会话控制实现身份验证实例
2016/10/18 PHP
PHP培训要多少钱
2017/06/06 PHP
PHP异步进程助手async-helper
2018/02/05 PHP
js获取url参数的使用扩展实例
2007/12/29 Javascript
javascript 设为首页与加入收藏兼容多浏览器代码
2011/01/11 Javascript
JavaScript对内存分配及管理机制详细解析
2013/11/11 Javascript
jquery缓动swing liner控制动画过程不同时刻的速度
2014/05/29 Javascript
jQuery中:gt选择器用法实例
2014/12/29 Javascript
JavaScript采用递归算法计算阶乘实例
2015/08/04 Javascript
Sublime Text 3常用插件及安装方法
2015/12/16 Javascript
javascript单页面手势滑屏切换原理详解
2016/03/21 Javascript
浅析Javascript中bind()方法的使用与实现
2016/04/29 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
2017/02/22 Javascript
Django中reverse反转并且传递参数的方法
2019/08/06 Python
python for循环remove同一个list过程解析
2019/08/14 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)
2020/04/07 Python
利用python对mysql表做全局模糊搜索并分页实例
2020/07/12 Python
Python 获取异常(Exception)信息的几种方法
2020/12/29 Python
美国羊皮公司:Overland
2018/01/15 全球购物
优纳科技软件测试面试题
2012/05/15 面试题
会计专业毕业生自我鉴定
2013/10/29 职场文书
高一家长会邀请函
2014/01/12 职场文书
农民工工资发放承诺书
2014/03/31 职场文书
学生安全责任书
2014/04/15 职场文书
司法助理专业自荐书
2014/06/13 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
流动人口婚育证明
2014/10/19 职场文书
幼儿园推普周活动总结
2015/05/07 职场文书
学术会议开幕词
2016/03/03 职场文书
2019初中学生入团申请书
2019/06/27 职场文书
DBCA命令行搭建Oracle ADG的流程
2021/06/11 Oracle
全新239军机修复记
2022/04/05 无线电