javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码


Posted in Javascript onAugust 04, 2015

本文实例讲述了javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果。分享给大家供大家参考。具体如下:

下面的玫瑰绘制用到了HTML 5的canvas,所以你的浏览器需要支持HTML 5。个人还是比较推荐chrome,这个效果在Firefox下也会稍卡。

效果图:

javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码

演示地址:http://demo.3water.com/js/2015/js-flower-canvas.html

具体代码如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
 <title>3D玫瑰花</title>
 <meta name="Generator" content="EditPlus">
 <meta name="Author" content="">
 <meta name="Keywords" content="">
 <meta name="Description" content="">
 </head>
 <body>
 情人节快到了,这里送大家一枝玫瑰,无论是有对象还是没对象的朋友们,情人节快乐~
下面的玫瑰绘制用到了HTML 5的canvas,所以你的浏览器需要支持HTML 5。个人还是比较推荐chrome,这个效果在Firefox下也会稍卡。
<div id="demo" style="width:520; height:500px;"><canvas id="c" height="500" width="500"></canvas></div>
<script> 
  var b = document.body;
  var c = document.getElementsByTagName('canvas')[0];
  var a = c.getContext('2d');
  var canvas = document.getElementsByTagName('canvas')[0];
  var ctx = canvas.getContext('2d');
  document.body.clientWidth; 
  with(m=Math)C=cos,S=sin,P=pow,R=random;
  c.width=c.height=f=500;h=-250;
  function p(a,b,c){
    if(c>60)
      return[S(a*7)*(13+5/(.2+P(b*4,4)))-S(b)*50,b*f+50,625+C(a*7)*(13+5/(.2+P(b*4,4)))+b*400,a*1-b/2,a];
    A=a*2-1;
    B=b*2-1;
    if(A*A+B*B<1)
    {
      if(c>37)
      {
        n=(j=c&1)?6:4;o=.5/(a+.01)+C(b*125)*3-a*300;
        w=b*h;
        return[o*C(n)+w*S(n)+j*610-390,o*S(n)-w*C(n)+550-j*350,1180+C(B+A)*99-j*300,.4-a*.1+P(1-B*B,-h*6)*.15-a*b*.4+C(a+b)/5+P(C((o*(a+1)+(B>0?w:-w))/25),30)*.1*(1-B*B),o/1e3+.7-o*w*3e-6]
      }
      if(c>32)
      {
        c=c*1.16-.15;o=a*45-20;w=b*b*h;z=o*S(c)+w*C(c)+620;
        return[o*C(c)-w*S(c),28+C(B*.5)*99-b*b*b*60-z/2-h,z,(b*b*.3+P((1-(A*A)),7)*.15+.3)*b,b*.7]
      }
      o=A*(2-b)*(80-c*2);
      w=99-C(A)*120-C(b)*(-h-c*4.9)+C(P(1-b,7))*50+c*2;z=o*S(c)+w*C(c)+700;
      return[o*C(c)-w*S(c),B*99-C(P(b, 7))*50-c/3-z/1.35+450,z,(1-b/1.2)*.9+a*.1, P((1-b),20)/4+.05]
    }
  }
  var draw = setInterval('for(i=0;i<1e4;i++)if(s=p(R(),R(),i%46/.74)){z=s[2];x=~~(s[0]*f/z-h);y=~~(s[1]*f/z-h);if(!m[q=y*f+x]|m[q]>z)m[q]=z,a.fillStyle="rgb("+~(s[3]*h)+","+~(s[4]*h)+","+~(s[3]*s[3]*-80)+")",a.fillRect(x,y,1,1)}',0);
  var demo = document.getElementById('demo');
  function redraw(){
    /*
    var d_c = document.createElement("canvas");
    d_c.setAttribute("id","c");
    d_c.setAttribute("width","520");
    d_c.setAttribute("height","500");
    demo.appendChild(d_c);
    */
    draw = setInterval('for(i=0;i<1e4;i++)if(s=p(R(),R(),i%46/.74)){z=s[2];x=~~(s[0]*f/z-h);y=~~(s[1]*f/z-h);if(!m[q=y*f+x]|m[q]>z)m[q]=z,a.fillStyle="rgb("+~(s[3]*h)+","+~(s[4]*h)+","+~(s[3]*s[3]*-80)+")",a.fillRect(x,y,1,1)}',0);
    //alert(d_c);
  }
  function clear_canvas()
  {
    ctx.clearRect(0,0,520,500);
    //canvas.parentNode.removeChild(canvas);  //删除
  }
  function stop_draw(obj){
    clearInterval(obj);
  }
</script>
 </body>
</html>

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

Javascript 相关文章推荐
javascript字符串拼接的效率问题
Dec 25 Javascript
在JavaScript中监听IME键盘输入事件
May 29 Javascript
JQUERY1.6 使用方法四 检测浏览器
Nov 23 Javascript
jQuery实现验证年龄简单思路
Feb 24 Javascript
JavaScript地理位置信息API
Jun 11 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
Jul 12 Javascript
vue组件的写法汇总
Apr 12 Javascript
vue监听键盘事件的快捷方法【推荐】
Jul 11 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
May 13 Javascript
element-ui table组件如何使用render属性的实现
Nov 04 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
Dec 17 Javascript
bootstrap-table后端分页功能完整实例
Jun 01 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
Aug 04 #Javascript
javascript控制图片播放的实现代码
Jul 29 #Javascript
两种JS实现屏蔽鼠标右键的方法
Aug 20 #Javascript
Javascript实现鼠标右键特色菜单
Aug 04 #Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
Aug 04 #Javascript
常用的Javascript数据验证插件
Aug 04 #Javascript
网页收藏夹显示ICO图标(代码少)
Aug 04 #Javascript
You might like
PHP IN_ARRAY 函数使用注意事项
2010/07/24 PHP
PHP单例模式详解及实例代码
2016/12/21 PHP
yii插入数据库防并发的简单代码
2017/05/27 PHP
js 获取服务器控件值的代码
2010/03/05 Javascript
拖动table标题实现改变td的大小(css+js代码)
2013/04/16 Javascript
Javascript设置对象的ReadOnly属性(示例代码)
2013/12/25 Javascript
js事件处理程序跨浏览器解决方案
2016/03/27 Javascript
每日十条JavaScript经验技巧(二)
2016/06/23 Javascript
Bootstrap学习系列之使用 Bootstrap Typeahead 组件实现百度下拉效果
2016/07/07 Javascript
浅谈js中的引用和复制(传值和传址)
2016/09/18 Javascript
Jquery 整理元素选取、常用方法一览表
2016/11/26 Javascript
Angular的$http与$location
2016/12/26 Javascript
微信小程序 数据交互与渲染实例详解
2017/01/21 Javascript
详解Vue中watch的高级用法
2018/05/02 Javascript
JavaScript轮播停留效果的实现思路
2018/05/24 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
vue中keep-alive、activated的探讨和使用详解
2020/07/26 Javascript
在Django的URLconf中使用命名组的方法
2015/07/18 Python
python魔法方法-属性访问控制详解
2016/07/25 Python
Python优化技巧之利用ctypes提高执行速度
2016/09/11 Python
使用Python+wxpy 找出微信里把你删除的好友实例
2019/02/21 Python
python使用pandas处理excel文件转为csv文件的方法示例
2019/07/18 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
Python中私有属性的定义方式
2020/03/05 Python
Python如何对XML 解析
2020/06/28 Python
德国PC硬件网站:CASEKING
2016/10/20 全球购物
Linux Interview Questions For software testers
2013/05/17 面试题
个人实用简单的自我评价
2013/10/19 职场文书
会计助理岗位职责
2014/02/17 职场文书
安全生产责任书
2014/03/12 职场文书
毕业班联欢会主持词
2014/03/27 职场文书
应届本科毕业生求职信
2014/07/23 职场文书
领导干部作风建设剖析材料
2014/10/11 职场文书
PyCharm 安装与使用配置教程(windows,mac通用)
2021/05/12 Python
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL
草系十大最强宝可梦,纸片人上榜,榜首大家最熟悉
2022/03/18 日漫