JS+canvas画布实现炫酷的旋转星空效果示例


Posted in Javascript onFebruary 13, 2019

本文实例讲述了JS+canvas画布实现炫酷的旋转星空效果。分享给大家供大家参考,具体如下:

canvas是html5的新标签,其画布功能尤为强大。当然了canvas在IE10以下浏览器是不兼容的,所以呢为了特效肯定是牺牲一定的兼容性。这里呢,分享一个基于canvas开发的浩瀚星河插件,其实这个源代码是网上下载的,我把它整合了一下,重新封装一些参数提供更多的可改项。

首先引入两个javascript脚本,一个是jquery插件,另一个是封装好的cosmos_canvas.js

<script src="js/jquery-1.11.0.js" type="text/javascript" charset="utf-8"></script>
<script src="canvas/cosmos_canvas.js" type="text/javascript" charset="utf-8"></script>

HTML,当然如果浏览器不支持canvas的话,运行程序没效果,并显示“该浏览器不支持canvas”

<canvas id="starts">该浏览器不支持canvas</canvas>

cosmos_canvas.js脚本

function canvas(id,starscolor,starsamount,starsradius,movrange,speed,trailing){
  //宇宙特效
"use strict";
var canvas = document.getElementById(id),
 ctx = canvas.getContext('2d'),
 w = canvas.width = window.innerWidth,
 h = canvas.height = window.innerHeight,
 hue = starscolor,//230
 stars = [],
 count = 0,
 maxStars = starsamount;//星星数量
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 / movrange;
 //星星移动范围,值越大范围越小,
}
var Star = function() {
 this.orbitRadius = random(maxOrbit(w, h));
 this.radius = random(starsradius, this.orbitRadius) / 8;
 //星星半径大小
 this.orbitX = w / 2;
 this.orbitY = h / 2;
 this.timePassed = random(0, maxStars);
 this.speed = random(this.orbitRadius) / speed;
 //星星移动速度
 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 = trailing; //尾巴
 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();
}

调用方法:这里没写任何样式所以默认情况下是全屏效果

$(function(){
//canvas的id名,星星颜色(hsla的hue色调),星星数量,星星半径比,星星移动范围(值越大范围越小),星星移动速度(值越大速度越慢),星星拖尾效果(0~1值越小拖尾越明显)
canvas("starts",230,1000,60,2,50000,0.5);
});

效果:

JS+canvas画布实现炫酷的旋转星空效果示例

然后我再加3个canvas,改些参数做效果对比吧

HTML

<canvas id="starts">该浏览器不支持canvas</canvas>
<canvas id="starts1">该浏览器不支持canvas</canvas>
<canvas id="starts2">该浏览器不支持canvas</canvas>
<canvas id="starts3">该浏览器不支持canvas</canvas>

javascript

$(function(){
  //canvas的id名,星星颜色(hsla的hue色调),星星数量,星星半径比,星星移动范围(值越大范围越小),星星移动速度(值越大速度越慢),星星拖尾效果(0~1值越小拖尾越明显)
  canvas("starts",230,1000,60,2,50000,0.5);
  canvas("starts1",160,800,70,2.5,55000,0.4);
  canvas("starts2",80,600,80,3,60000,0.3);
  canvas("starts3",0,400,90,3.5,65000,0.2);
  $("canvas").width($(window).width()/2);
  $("canvas").height($(window).height()/2);
  $("canvas").css("float","left");
});

就这样,四个浩瀚的宇宙出来了

JS+canvas画布实现炫酷的旋转星空效果示例

更多关于JavaScript相关内容还可查看本站专题:《JavaScript+HTML5特效与技巧汇总》、《JavaScript图形绘制技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
学习jquery必备 api中英文对照的chm手册 下载
May 03 Javascript
基于Jquery的简单图片切换效果
Jan 06 Javascript
Javascript call和apply区别及使用方法
Nov 14 Javascript
JavaScript中如何通过arguments对象实现对象的重载
May 12 Javascript
Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
Apr 29 Javascript
对Js OOP编程 创建对象的一些全面理解
Jul 26 Javascript
JS打印组合功能
Aug 04 Javascript
select下拉框插件jquery.editable-select详解
Jan 22 Javascript
vue实现ToDoList简单实例
Feb 07 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
Mar 09 Javascript
vue实现app页面切换动画效果实例
May 23 Javascript
JavaScript常见继承模式实例小结
Jan 11 Javascript
JavaScript实现的拼图算法分析
Feb 13 #Javascript
推荐15个最好用的JavaScript代码压缩工具
Feb 13 #Javascript
Vue中CSS动画原理的实现
Feb 13 #Javascript
Vue中JS动画与Velocity.js的结合使用
Feb 13 #Javascript
JavaScript中.min.js和.js文件的区别讲解
Feb 13 #Javascript
node.js微信小程序配置消息推送的实现
Feb 13 #Javascript
vue实现购物车抛物线小球动画效果的方法详解
Feb 13 #Javascript
You might like
PHP has encountered an Access Violation at 7C94BD02解决方法
2009/08/24 PHP
PHP XML操作的各种方法解析(比较详细)
2010/06/17 PHP
php标签云的实现代码
2012/10/10 PHP
PHP模块memcached使用指南
2014/12/08 PHP
php array_merge_recursive 数组合并
2016/10/26 PHP
php实现评论回复删除功能
2017/05/23 PHP
JavaScript极简入门教程(三):数组
2014/10/25 Javascript
jQuery中:file选择器用法实例
2015/01/04 Javascript
了解Javascript的模块化开发
2015/03/02 Javascript
jquery实现左右滑动菜单效果代码
2015/08/27 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
2016/08/19 Javascript
Jquery删除css属性的简单方法
2016/12/04 Javascript
footer定位页面底部(代码分享)
2017/03/07 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
在Vue项目中引入JQuery-ui插件的讲解
2019/01/27 jQuery
Vue 页面权限控制和登陆验证功能的实例代码
2019/06/20 Javascript
JS实现页面数据懒加载
2020/02/13 Javascript
JS中的const命令你真懂它吗
2020/03/08 Javascript
VUE+Element实现增删改查的示例源码
2020/11/23 Vue.js
用ReactJS和Python的Flask框架编写留言板的代码示例
2015/12/19 Python
Python用Pillow(PIL)进行简单的图像操作方法
2017/07/07 Python
python+VTK环境搭建及第一个简单程序代码
2017/12/13 Python
python中ASCII码字符与int之间的转换方法
2018/07/09 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
2018/08/02 Python
python中shell执行知识点
2020/05/06 Python
澳大利亚宠物商店:Petbarn
2017/11/18 全球购物
美国汽车性能部件和赛车零件网站:Vivid Racing
2018/03/27 全球购物
动物科学专业毕业生的自我评价
2013/11/29 职场文书
法律专业学生的自我评价
2014/02/07 职场文书
土地转让协议书范本
2014/04/15 职场文书
放飞理想演讲稿
2014/09/09 职场文书
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
售票员岗位职责
2015/02/15 职场文书
个人政治思想总结
2015/03/05 职场文书
三八妇女节致辞
2015/07/31 职场文书
SpringBoot集成Redis的思路详解
2021/10/16 Redis