原生js结合html5制作小飞龙的简易跳球


Posted in Javascript onMarch 30, 2015

演示地址:http://runjs.cn/detail/yjpvqhal

html代码

<html>
  <head>
    <meta charset="utf-8"/>
    <title>小飞龙的跳球</title>
  </head>
  <body onload="init()">
    <canvas id="game" width="400" height="400" style="border:1px solid #c3c3c3">
      你的游览器不支持html5的画布元素,请升级到IE9+或使用firefox、chrome这类高级的智能游览器!
    </canvas>
    <script>
      var canvas = document.getElementById('game');
      var ctx = canvas.getContext('2d');
      var grad;
      //盒子的起始位置和大小以及球的半径
      var box = {x:20,y:20,w:350,h:350,r:20};
      //球的中心位置和偏移位置
      var inbox = {//box内的限制范围
          bx:(box.w+box.x-box.r),
          by:(box.h+box.y-box.r),
          ix:box.x+(box.r*2),
          iy:box.y+(box.r*2)
        };
      //球的初始位置和变化位置  
      var ball = {x:50,y:50,vx:4,vy:8};
      var img = new Image();
      img.src = 'images/qiuqiu.png';
      var hue = [[255,0,0],[255,255,0],[0,255,0],[0,255,255],[0,0,255],[255,0,0]];
      function init(){
        grad = ctx.createLinearGradient(box.x,box.y,box.w,box.h);
        for(var i=0;i<hue.length;i++){
          var color = 'rgb('+hue[i][0]+','+hue[i][1]+','+hue[i][2]+')';
          grad.addColorStop(i/hue.length,color);
        }
        ctx.lineWidth = box.r;
        ctx.fillStyle = 'rgb(200,0,50)';
        ctx.fillStyle = grad;
        moveBall();
        setInterval(moveBall,50);
      }  
      //碰撞检测并重新确定球的位置
      function moveBallEndCheck(){
        var nx = ball.x + ball.vx;
        var ny = ball.y + ball.vy;
        if(nx > inbox.bx){//当前x大于上边框边界
          ball.vx = -ball.vx;//球的变化x坐标当前当前变化x坐标的负数
          nx = inbox.bx;//当前位置为上边框的位置
        }
        if(nx < inbox.ix){//当前位置小于下边框
          nx = inbox.ix;//当前位置为下边框的x
          ball.vx = -ball.vx;//球的变化x坐标翻转取负
        }
        if(ny > inbox.by){
          ny = inbox.by;
          ball.vy = -ball.vy;
        }
        if(ny < inbox.iy){
          ny = inbox.iy;
          ball.vy = -ball.vy;
        }
        ball.x = nx;
        ball.y = ny;
      }
      function moveBall(){
        ctx.clearRect(box.x,box.y,box.w,box.h);
        moveBallEndCheck();
        ctx.beginPath();
        //console.log(ball.x+"\t"+ball.y+"\t"+ball.vx+"\t"+ball.vy+"\t"+(ball.x-box.r)+"\t"+(ball.y-box.r));
        ctx.drawImage(img,(ball.x-box.r),(ball.y-box.r));
        ctx.fillRect(box.x,box.y,box.r,box.h);
        ctx.fillRect((box.x+box.w-box.r),box.y,box.r,box.h);
        ctx.fillRect(box.x,box.y,box.w,box.r);
        ctx.fillRect(box.x,(box.y+box.h-box.r),box.w,box.r);
        ctx.closePath();
        ctx.fill();
      }
    </script>
  </body>
</html>

演示图片

原生js结合html5制作小飞龙的简易跳球

以上所述就是本文的全部代码,希望大家能够喜欢。

Javascript 相关文章推荐
js window.event对象详尽解析
Feb 17 Javascript
JS二维数组的定义说明
Mar 03 Javascript
javascript移动设备Web开发中对touch事件的封装实例
Jun 05 Javascript
javascript判断css3动画结束 css3动画结束的回调函数
Mar 10 Javascript
javascript正则表达式中的replace方法详解
Apr 20 Javascript
javascript数据结构之双链表插入排序实例详解
Nov 25 Javascript
前端弹出对话框 js实现ajax交互
Sep 09 Javascript
vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
Feb 22 Javascript
Angular简单验证功能示例
Dec 22 Javascript
JavaScript实现邮箱后缀提示功能的示例代码
Dec 13 Javascript
vue实现节点增删改功能
Sep 26 Javascript
用vue设计一个日历表
Dec 03 Vue.js
PHPMyAdmin导入时提示文件大小超出PHP限制的解决方法
Mar 30 #Javascript
浅谈类似于(function(){}).call()的js语句
Mar 30 #Javascript
jquery实现右键菜单插件
Mar 29 #Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
Mar 28 #Javascript
jquery表单验证插件(jquery.validate.js)的3种使用方式
Mar 28 #Javascript
JQuery调用绑定click事件的3种写法
Mar 28 #Javascript
对Web开发中前端框架与前端类库的一些思考
Mar 27 #Javascript
You might like
《一拳超人》埼玉一拳下去,他们存在了800年毫无意义!
2020/03/02 日漫
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
2012/08/09 PHP
PHP中require和include路径问题详解
2014/12/25 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
2017/05/05 PHP
javascript中的location用法简单介绍
2007/03/07 Javascript
js单词形式的运算符
2014/05/06 Javascript
asp.net+jquery.form实现图片异步上传的方法(附jquery.form.js下载)
2016/05/05 Javascript
最棒的Angular2表格控件
2016/08/10 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
javascript入门之window对象【新手必看】
2016/11/22 Javascript
Javascript 引擎工作机制详解
2016/11/30 Javascript
js制作可以延时消失的菜单
2017/01/13 Javascript
jquery横向纵向鼠标滚轮全屏切换
2017/02/27 Javascript
Vue渲染函数详解
2017/09/15 Javascript
angular4自定义组件详解
2017/09/28 Javascript
VuePress 静态网站生成方法步骤
2019/02/14 Javascript
Vue+Koa2 打包后进行线上部署的教程详解
2019/07/31 Javascript
k8s node节点重新加入master集群的实现
2021/02/22 Javascript
Python中.py文件打包成exe可执行文件详解
2017/03/22 Python
python中matplotlib的颜色及线条控制的示例
2018/03/16 Python
Python装饰器知识点补充
2018/05/28 Python
详解Python字典小结
2018/10/20 Python
Python父目录、子目录的相互调用方法
2019/02/16 Python
django之对FileField字段的upload_to的设定方法
2019/07/28 Python
python paramiko远程服务器终端操作过程解析
2019/12/14 Python
PyCharm下载和安装详细步骤
2019/12/17 Python
PyChon中关于Jekins的详细安装(推荐)
2020/12/28 Python
德国BA保镖药房韩文网:kr.ba.de
2017/09/04 全球购物
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
刊首寄语大全
2014/04/11 职场文书
2014年学校法制宣传日活动总结
2014/11/01 职场文书
党小组考察意见
2015/06/02 职场文书
家长对孩子的寒假评语
2015/10/09 职场文书
在HTML5 localStorage中存储对象的示例代码
2021/04/21 Javascript
详解CSS不定宽溢出文本适配滚动
2021/05/24 HTML / CSS
python模板入门教程之flask Jinja
2022/04/11 Python