jQuery+canvas实现简单的球体斜抛及颜色动态变换效果


Posted in Javascript onJanuary 28, 2016

本文实例讲述了jQuery+canvas实现简单的球体斜抛及颜色动态变换效果。分享给大家供大家参考,具体如下:

运行效果截图如下:

jQuery+canvas实现简单的球体斜抛及颜色动态变换效果

具体代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>canvas简单斜抛</title>
  <script src="jquery-1.7.1.min.js" type="text/javascript"></script>
  <script type="text/javascript" >
    var canvasHeight = 0;
    var canvasWidth = 0;
    var g = 9.8;
    function Cast(context, castSettings) {
      Cast.createColor = function () {
        var r = Math.round(Math.random() * 256),
          g = Math.round(Math.random() * 256),
          b = Math.round(Math.random() * 256);
        return "rgb("+r+","+g+","+b+")";
      }
      var _self = this;
      // x, y, radian, r, v
      $.extend(_self, castSettings);
      _self.radian = _self.radian / 180 * Math.PI;
      _self.vo = _self.v;
      _self.vxo = Math.cos(_self.radian) * _self.vo;
      _self.vyo = Math.sin(_self.radian) * _self.vo;
      console.log("vyo:"+_self.vyo+":vxo:"+_self.vxo+":"+_self.radian);
      _self.prevTime = new Date().getTime();
      _self.xo = _self.x;
      _self.yo = _self.y;
      _self.cast = function () {
        if (_self.x > canvasWidth - _self.r || _self.y > _self.yo) {
          return;
        }
        var time = (new Date().getTime() - _self.prevTime) / 1000;
        var x = _self.vxo * time;
        var y = _self.vyo * time - 1 / 2 * g * time * time;
        console.log(time+":"+_self.yo+":"+_self.xo+":"+y);
        context.beginPath();
        context.fillStyle = Cast.createColor();
        context.arc(x + _self.xo, _self.yo- y , _self.r, 0, 2 * Math.PI);
        context.fill();
        context.closePath();
        _self.x = x + _self.xo;
        _self.y = _self.yo - y;
        setTimeout(function () {
          _self.cast();
        }, 30);
      }
      _self.cast();
    }
    $(document).ready(function () {
      var canvas = $("#canvas");
      var context = canvas.get(0).getContext('2d');
      canvasHeight = canvas.height();
      canvasWidth = canvas.width();
      new Cast(context, { x: 0, y: 400, v: 70, r: 5, radian: 20 });
      new Cast(context, { x: 0, y: 400, v: 70, r: 5, radian: 30 });
      new Cast(context, { x: 0, y: 400, v: 70, r: 5, radian: 40 });
      new Cast(context, { x: 0, y: 400, v: 70, r: 5, radian: 50 });
      new Cast(context, { x: 0, y: 400, v: 70, r: 5, radian: 60 });
      new Cast(context, { x: 0, y: 400, v: 70, r: 5, radian: 70 });
    });
  </script>
  <style type="text/css" >
    h2 { color:Gray; line-height:50px; }
    #canvas { background:#DDDDDD;}
  </style>
</head>
<body>
 <center>
 <h3>canvas实现斜抛效果</h3>
 <hr />
 <canvas id="canvas" width="500" height="500"></canvas>
 <hr />
 </center>
</body>
</html>

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

Javascript 相关文章推荐
js宝典学习笔记(上)
Jan 10 Javascript
理解Javascript_01_理解内存分配原理分析
Oct 11 Javascript
HTML长文本截取含有HTML代码同样适用的两种方法
Jul 31 Javascript
escape函数解决js中ajax传递中文出现乱码问题
Oct 30 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
May 09 Javascript
常用的Javascript设计模式小结
Dec 09 Javascript
详解Node.js中的事件机制
Sep 22 Javascript
JS点击某个图标或按钮弹出文件选择框的实现代码
Sep 27 Javascript
JavaScript 链式结构序列化详解
Sep 30 Javascript
使用Vue完成一个简单的todolist的方法
Dec 01 Javascript
JavaScript时间与时间戳的转换操作实例分析
Dec 07 Javascript
vue中音频wavesurfer.js的使用方法
Feb 20 Vue.js
基于javascript实现动态显示当前系统时间
Jan 28 #Javascript
jQuery实现div随意拖动的实例代码(通用代码)
Jan 28 #Javascript
jQuery+css实现炫目的动态块漂移效果
Jan 28 #Javascript
使用node+vue.js实现SPA应用
Jan 28 #Javascript
jQuery+css实现的tab切换标签(兼容各浏览器)
Jan 28 #Javascript
javascript实现随机显示星星特效
Jan 28 #Javascript
基于javascript实现全国省市二级联动下拉选择菜单
Jan 28 #Javascript
You might like
php数值转换时间及时间转换数值用法示例
2017/05/18 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
2017/08/01 PHP
PHP中如何使用Redis接管文件存储Session详解
2018/11/28 PHP
简单的js分页脚本
2009/05/21 Javascript
jQuery+jqmodal弹出窗口实现代码分明
2010/06/14 Javascript
JS的replace方法介绍
2012/10/20 Javascript
javascript中的取反再取反~~没有意义
2014/04/06 Javascript
js控制鼠标事件移动及移出效果显示
2014/10/19 Javascript
AngularJS 文件上传控件 ng-file-upload详解
2017/01/13 Javascript
vue用addRoutes实现动态路由的示例
2017/09/15 Javascript
JavaScript实现的简单Tab点击切换功能示例
2018/07/06 Javascript
详解Angular中通过$location获取地址栏的参数
2018/08/02 Javascript
Layui 设置select下拉框自动选中某项的方法
2018/08/14 Javascript
mpvue微信小程序多列选择器用法之省份城市选择的实现
2019/03/07 Javascript
如何给element添加一个抽屉组件的方法步骤
2019/07/14 Javascript
分享一款超好用的JavaScript 打包压缩工具
2020/04/26 Javascript
Python进行数据科学工作的简单入门教程
2015/04/01 Python
Python的字典和列表的使用中一些需要注意的地方
2015/04/24 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
2016/03/13 Python
Python学习入门之区块链详解
2017/07/25 Python
Python实现模拟分割大文件及多线程处理的方法
2017/10/10 Python
Python enumerate索引迭代代码解析
2018/01/19 Python
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
python 检查是否为中文字符串的方法
2018/12/28 Python
在Python 中同一个类两个函数间变量的调用方法
2019/01/31 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
2019/03/26 Python
Python的赋值、深拷贝与浅拷贝的区别详解
2020/02/12 Python
Python datetime 格式化 明天,昨天实例
2020/03/02 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
领先的钻石和订婚戒指零售商:Diamonds-USA
2016/12/11 全球购物
Linux如何压缩可执行文件
2013/10/21 面试题
4s店机修工岗位职责
2013/12/20 职场文书
优秀毕业生求职信范文
2014/01/02 职场文书
兵马俑的导游词
2015/02/02 职场文书
一个都不能少观后感
2015/06/04 职场文书
Vertica集成Apache Hudi重磅使用指南
2022/03/31 Servers