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 读取xml,写入xml 实现代码
Jul 10 Javascript
E3 tree 1.6在Firefox下显示问题的修复方法
Jan 30 Javascript
javascript Deferred和递归次数限制实例
Oct 21 Javascript
详谈javascript中的cookie
Jun 03 Javascript
JavaScript中rem布局在react中的应用
Dec 09 Javascript
Javascript将JSON日期格式化
Aug 23 Javascript
jquery submit()不能提交表单的解决方法
Apr 24 jQuery
js微信应用场景之微信音乐相册案例分享
Aug 11 Javascript
Vue.js通用应用框架-Nuxt.js的上手教程
Dec 25 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
Jul 31 Javascript
微信小程序聊天功能的示例代码
Jan 13 Javascript
Vue中key的作用示例代码详解
Jun 10 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中获得视频时间总长度的另一种方法
2011/09/15 PHP
php站内搜索并高亮显示关键字的实现代码
2011/12/29 PHP
Code:loadScript( )加载js的功能函数
2007/02/02 Javascript
jQuery Ajax文件上传(php)
2009/06/16 Javascript
JavaScript 精粹读书笔记(1,2)
2010/02/07 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
Javascript计算两个marker之间的距离(Google Map V3)
2013/04/26 Javascript
解析dom中的children对象数组元素firstChild,lastChild的使用
2013/07/10 Javascript
document.compatMode的CSS1compat使用介绍
2014/04/03 Javascript
jQuery实现页面滚动时动态加载内容的方法
2015/03/20 Javascript
理解js回收机制通俗易懂版
2016/02/29 Javascript
Jquery表单验证失败后不提交的解决方法
2016/10/18 Javascript
基于daterangepicker日历插件使用参数注意的问题
2017/08/10 Javascript
vue 组件的封装之基于axios的ajax请求方法
2018/08/11 Javascript
浅谈ElementUI中switch回调函数change的参数问题
2018/08/24 Javascript
Vuex 使用 v-model 配合 state的方法
2018/11/13 Javascript
Vue组件的使用及个人理解与介绍
2019/02/09 Javascript
浅谈Vue CLI 3结合Lerna进行UI框架设计
2019/04/14 Javascript
为vue项目自动设置请求状态的配置方法
2019/06/09 Javascript
ES6中的Javascript解构的实现
2020/10/30 Javascript
wxpython学习笔记(推荐查看)
2014/06/09 Python
Python代码解决RenderView窗口not found问题
2016/08/28 Python
Python 逐行分割大txt文件的方法
2017/10/10 Python
Flask模拟实现CSRF攻击的方法
2018/07/24 Python
Falsk 与 Django 过滤器的使用与区别详解
2019/06/04 Python
代理协议书
2014/04/22 职场文书
竞选部长演讲稿
2014/04/26 职场文书
迎国庆演讲稿
2014/09/15 职场文书
2014年煤矿工作总结
2014/11/24 职场文书
邀请函模板
2015/02/02 职场文书
医德医风自我评价2015
2015/03/03 职场文书
高中生综合素质自我评价
2015/03/06 职场文书
人民调解协议书
2016/03/21 职场文书
win11高清晰音频管理器在哪里?win11找不到高清晰音频管理器解决办法
2022/04/08 数码科技
JavaScript声明变量和数据类型的转换
2022/04/12 Javascript
css如何把元素固定在容器底部的四种方式
2022/06/16 HTML / CSS