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 相关文章推荐
利用js跨页面保存变量做菜单的方法
Jan 17 Javascript
JS获取节点的兄弟,父级,子级元素的方法
Jan 09 Javascript
js日期联动示例
May 02 Javascript
Jquery的each里用return true或false代替break或continue
May 21 Javascript
学习Bootstrap组件之下拉菜单
Jul 28 Javascript
学习JavaScript设计模式之责任链模式
Jan 18 Javascript
JavaScipt中栈的实现方法
Feb 17 Javascript
Javascript的表单验证-揭开正则表达式的面纱
Mar 18 Javascript
使用Require.js封装原生js轮播图的实现代码
Jun 15 Javascript
详解webpack+express多页站点开发
Dec 22 Javascript
深入理解Vue Computed计算属性原理
May 29 Javascript
详解vue中localStorage的使用方法
Nov 22 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弹出提示框并跳转到新页面即重定向到新页面
2014/01/24 PHP
php中动态调用函数的方法
2015/03/16 PHP
PHP批量去除BOM头代码分享
2015/06/26 PHP
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
PHP命名空间和自动加载类
2016/04/03 PHP
微信公众号开发之文本消息自动回复php代码
2016/08/08 PHP
发布BlueShow v1.0 图片浏览器(类似lightbox)blueshow.js 打包下载
2007/07/21 Javascript
js获取location.href的参数实例代码
2013/08/02 Javascript
JQuery插件ajaxfileupload.js异步上传文件实例
2015/05/19 Javascript
浅析jQuery Ajax请求参数和返回数据的处理
2016/02/24 Javascript
第一篇初识bootstrap
2016/06/21 Javascript
AngularJS内建服务$location及其功能详解
2016/07/01 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
2017/08/25 Javascript
mongoose更新对象的两种方法示例比较
2017/12/19 Javascript
在vue中更换字体,本地存储字体非引用在线字体库的方法
2018/09/28 Javascript
如何去除富文本中的html标签及vue、react、微信小程序中的过滤器
2018/11/21 Javascript
[00:32]2018DOTA2亚洲邀请赛Newbee出场
2018/04/03 DOTA
Python标准库defaultdict模块使用示例
2015/04/28 Python
深入理解python中的atexit模块
2017/03/07 Python
python接口调用已训练好的caffe模型测试分类方法
2019/08/26 Python
pygame用blit()实现动画效果的示例代码
2020/05/28 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
2021/02/04 Python
如何用用Python将地址标记在地图上
2021/02/07 Python
利物浦足球俱乐部官方网上商店:Liverpool FC Official Store
2018/01/13 全球购物
文化宣传方案
2014/03/13 职场文书
社会实践活动总结报告
2014/04/29 职场文书
社区志愿者活动总结
2014/06/26 职场文书
工作收入证明模板
2014/10/10 职场文书
小学优秀班主任材料
2014/12/17 职场文书
市场部岗位职责范本
2015/04/15 职场文书
2015年行风建设工作总结
2015/05/15 职场文书
运动会入场词
2015/07/18 职场文书
导游词之山东孔庙
2019/11/04 职场文书
PostgreSQL存储过程实用脚本(二):创建函数入门
2021/04/05 PostgreSQL
Java 泛型详解(超详细的java泛型方法解析)
2021/07/02 Java/Android