JS基于HTML5的canvas标签实现炫目的色相球动画效果实例


Posted in Javascript onAugust 24, 2016

本文实例讲述了JS基于HTML5的canvas标签实现色相球效果。分享给大家供大家参考,具体如下:

运行效果截图如下:

JS基于HTML5的canvas标签实现炫目的色相球动画效果实例

具体代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>JS canvas标签制作色相球</title>
</head>
<body>
<canvas></canvas>
<script type="text/javascript">
var canvas,ctx,max,p,count;
window.onload=function(){
 var a,b,r;
 canvas = document.getElementsByTagName('canvas')[0];
 ctx = canvas.getContext('2d');
 canvas.width=canvas.height=400;
 ctx.fillRect(0,0,400,400);
 max=80;
 count=150;
 p=[];
 r=0;
 for(a=0;a<max;a++){
  p.push([Math.cos(r),Math.sin(r),0]);
  r+=Math.PI*2/max;
 }
 for(a=0;a<max;a++)p.push([0,p[a][0],p[a][1]]);
 for(a=0;a<max;a++)p.push([p[a][1],0,p[a][0]]);
 rus();
};
function rus(){
 var a,b,c,d,e,s,tim,p2,xp,yp,xp2,yp2,x,y,z,x1,y1,z1;
 ctx.globalCompositeOperation = "source-over";
 ctx.fillStyle="rgba(0,0,0,0.03)";
 ctx.fillRect(0,0,canvas.width,canvas.height);
 ctx.globalCompositeOperation = "lighter";
 tim=count/5;
 for(e=0;e<3;e++){
  tim*=1.7;
  s=1-e/3;
  a=tim/59;
  yp=Math.cos(a);
  yp2=Math.sin(a);
  a=tim/23;
  xp=Math.cos(a);
  xp2=Math.sin(a);
  p2=[];
  for(a=0;a<p.length;a++){
   x=p[a][0];y=p[a][1];z=p[a][2];
   y1=y*yp+z*yp2;
   z1=y*yp2-z*yp;
   x1=x*xp+z1*xp2;
   z=x*xp2-z1*xp;
   z1=Math.pow(2,z*s);
   x=x1*z1;
   y=y1*z1;
   p2.push([x,y,z]);
  }
  s*=120;
  for(d=0;d<3;d++){
   for(a=0;a<max;a++){
    b=p2[d*max+a];
    c=p2[((a+1)%max)+d*max];
    ctx.beginPath();
    ctx.strokeStyle="hsla("+((a/max*360)|0)+",70%,60%,0.15)";
    ctx.lineWidth=Math.pow(6,b[2]);
    ctx.lineTo(b[0]*s+200,b[1]*s+200);
    ctx.lineTo(c[0]*s+200,c[1]*s+200);
    ctx.stroke();
   }
  }
 }
 count++;
 requestAnimationFrame(rus);
}
</script>
</body>
</html>

PS:由于这里使用了HTML5的相关技术,建议读者使用火狐、谷歌、opera等支持HTML5效果较好的浏览器运行该上述代码。

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

Javascript 相关文章推荐
人人网javascript面试题 可以提前实现下
Jan 05 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
Sep 01 Javascript
JavaScript数组常用操作技巧汇总
Nov 17 Javascript
jQuery实现定时读取分析xml文件的方法
Jul 16 Javascript
javascript中利用柯里化函数实现bind方法
Apr 29 Javascript
json的使用小结
Jun 08 Javascript
JS实现探测网站链接的方法【测试可用】
Nov 08 Javascript
在 vue-cli v3.0 中使用 SCSS/SASS的方法
Jun 14 Javascript
关于在vue 中使用百度ueEditor编辑器的方法实例代码
Sep 14 Javascript
13 个npm 快速开发技巧(推荐)
Jul 04 Javascript
Vue监听滚动实现锚点定位(双向)示例
Nov 13 Javascript
关于JavaScript回调函数的深入理解
Jun 27 Javascript
Javascript中indexOf()和lastIndexOf应用方法实例
Aug 24 #Javascript
详解Bootstrap的iCheck插件checkbox和radio
Aug 24 #Javascript
JS简单实现无缝滚动效果实例
Aug 24 #Javascript
JS动态加载脚本并执行回调操作
Aug 24 #Javascript
利用jsonp跨域调用百度js实现搜索框智能提示
Aug 24 #Javascript
归纳下js面向对象的几种常见写法总结
Aug 24 #Javascript
BootStrap iCheck插件全选与获取value值的解决方法
Aug 24 #Javascript
You might like
php中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
2013/11/11 PHP
php中文乱码问题的终极解决方案汇总
2017/08/01 PHP
laravel ORM关联关系中的 with和whereHas用法
2019/10/16 PHP
javascript与webservice的通信实现代码
2010/12/25 Javascript
eval的两组性能测试数据
2012/08/17 Javascript
jQuery淡入淡出元素让其效果更为生动
2014/09/01 Javascript
JavaScript中连接操作Oracle数据库实例
2015/04/02 Javascript
js老生常谈之this,constructor ,prototype全面解析
2016/04/05 Javascript
jQuery插件FusionWidgets实现的Cylinder图效果示例【附demo源码】
2017/03/23 jQuery
解决vue router使用 history 模式刷新后404问题
2017/07/19 Javascript
js实现随机点名系统(实例讲解)
2017/10/18 Javascript
基于vue+canvas的excel-like组件实例详解
2017/11/28 Javascript
浅谈vue加载优化策略
2019/03/19 Javascript
nodejs实现用户登录路由功能
2019/05/22 NodeJs
vue实现PC端录音功能的实例代码
2019/06/05 Javascript
python实现求最长回文子串长度
2018/01/22 Python
使用django的objects.filter()方法匹配多个关键字的方法
2019/07/18 Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
2019/09/02 Python
将python包发布到PyPI和制作whl文件方式
2019/12/25 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
Boda Skins皮衣官网:奢侈皮夹克,全球配送
2016/12/15 全球购物
经济系大学生求职信
2013/10/01 职场文书
数控机械专业个人的自我评价
2014/01/02 职场文书
基层干部十八大感言
2014/01/19 职场文书
学习十八大报告感言
2014/02/04 职场文书
《红军不怕远征难》教学反思
2014/04/14 职场文书
见习报告的格式
2014/11/04 职场文书
不尊敬老师检讨书范文
2014/11/19 职场文书
2014年环保局工作总结
2014/12/11 职场文书
2015双创工作总结
2015/07/24 职场文书
七年级数学教学反思
2016/02/17 职场文书
如何在向量化NumPy数组上进行移动窗口
2021/05/18 Python
Go gorilla/sessions库安装使用
2022/08/14 Golang