js实现带积分弹球小游戏


Posted in Javascript onJuly 21, 2020

本文实例为大家分享了js实现带积分的弹球小游戏的具体代码,供大家参考,具体内容如下

注:如果小球与底部方块的角碰撞,积分可能有些许bug

<style>
  #box {
   width: 400px;
   height: 400px;
   border: 1px solid #000000;
   margin: 50px auto;
   position: relative;
  }

  #ball {
   height: 60px;
   width: 60px;
   border-radius: 50%;
   background-color: red;
   position: absolute;
   left: 0;
   top: 0;
  }

  #block {
   width: 100px;
   height: 20px;
   position: absolute;
   left: 150px;
   bottom: 0;
   background-color: black;
  }

  #count {
   color: #ff0000;
   font-size: 18px;
   position: absolute;
   width: 20px;
   height: 20px;
   left: -20px;
   top: 0;
  }
</style>
<body>
 <div id="box">
  <div id="count">0</div>
  <div id="ball"></div>
  <div id="block"></div>
 </div>
</body>
<script>
 var oBox = document.querySelector('#box');
 var oBall = document.querySelector('#ball');
 var oBlock = document.querySelector('#block');
 var oCount = document.querySelector('#count');

 var speedBlock = 5;
 var speedX = 5;
 var speedY = 4;

 var maxLeft = oBox.clientWidth - oBall.offsetWidth;
 var maxTop = oBox.clientHeight - oBall.offsetHeight;
 var max = oBox.clientWidth - oBlock.offsetWidth;

 setInterval(function () {
  var left = oBall.offsetLeft;
  var top = oBall.offsetTop;

  left += speedX;
  top += speedY;

  if (left < 0 || left > maxLeft) {
   speedX = -speedX;
  }

  if (top < 0) {
   speedY *= -1;
  }

  var r = oBall.offsetWidth / 2;

  if (left >= oBlock.offsetLeft - r && // 左边线碰撞条件
   left <= oBlock.offsetLeft - r + oBlock.offsetWidth && // 右边线碰撞条件
   top >= maxTop - oBlock.offsetHeight   // 下边线碰撞条件
  ) {
   // console.log('撞上了');
   speedY = -Math.abs(speedY);
   // speedY *= -1;
   oCount.innerHTML = oCount.innerHTML * 1 + 1;
  }

  if (top > maxTop) {
   left = 0;
   top = 0;
  }

  oBall.style.left = left + 'px';
  oBall.style.top = top + 'px';

 }, 50);

 document.onkeydown = function (e) {
  var ev = event || e;
  var keyCode = ev.keyCode || ev.which;

  var left = oBlock.offsetLeft;

  if (keyCode === 37) {
   left -= speedBlock;
  }
  if (keyCode === 39) {
   left += speedBlock;
  }

  if (left <= 0) {
   left = 0
  }

  if (left >= max) {
   left = max;
  }

  oBlock.style.left = left + 'px';
 }
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery Mobile页面跳转后未加载外部JS原因分析及解决
Mar 18 Javascript
extjs ColumnChart设置不同的颜色实现代码
May 17 Javascript
JQuery插件fancybox无法在弹出层使用左右键的解决办法
Dec 25 Javascript
js数组循环遍历数组内所有元素的方法
Jan 18 Javascript
js用拖动滑块来控制图片大小的方法
Feb 27 Javascript
jQuery简单绑定单个事件的方法示例
Jun 10 jQuery
Node.js学习之地址解析模块URL的使用详解
Sep 28 Javascript
ng-repeat指令在迭代对象时的去重方法
Oct 02 Javascript
vue实现文字横向无缝走马灯组件效果的实例代码
Apr 09 Javascript
详解vue 路由跳转四种方式 (带参数)
Apr 28 Javascript
JavaScript中BOM对象原理与用法分析
Jul 09 Javascript
Vue项目如何引入bootstrap、elementUI、echarts
Nov 26 Vue.js
在vue中created、mounted等方法使用小结
Jul 21 #Javascript
解决vue的touchStart事件及click事件冲突问题
Jul 21 #Javascript
解决Vue 移动端点击出现300毫秒延迟的问题
Jul 21 #Javascript
解决Vue中的生命周期beforeDestory不触发的问题
Jul 21 #Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
Jul 21 #Javascript
vue 清空input标签 中file的值操作
Jul 21 #Javascript
Vue-resource安装过程及使用方法解析
Jul 21 #Javascript
You might like
PHP读书笔记_运算符详解
2016/07/01 PHP
JQuery 学习笔记 element属性控制
2009/07/23 Javascript
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
2009/11/12 Javascript
js parentElement和offsetParent之间的区别
2010/03/23 Javascript
JQuery为textarea添加maxlength属性的代码
2010/04/07 Javascript
Fastest way to build an HTML string(拼装html字符串的最快方法)
2011/08/20 Javascript
自动刷新网页,自动刷新当前页面,JS调用
2013/06/24 Javascript
JS复制到剪贴板示例代码
2013/10/30 Javascript
jQuery filter函数使用方法
2014/05/19 Javascript
网页运行时提示对象不支持abigimage属性或方法
2014/08/10 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
2016/09/24 Javascript
jQuery实现的模拟弹出窗口功能示例
2016/11/24 Javascript
javascript简单写的判断电话号码实例
2017/05/24 Javascript
关于webpack2和模块打包的新手指南(小结)
2017/08/07 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
基于Vue自定义指令实现按钮级权限控制思路详解
2018/05/23 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
2018/08/08 jQuery
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
Layui动态生成select下拉选择框不显示的解决方法
2019/09/24 Javascript
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
2020/08/20 NodeJs
Openlayers+EasyUI Tree动态实现图层控制
2020/09/28 Javascript
简单谈谈python中的Queue与多进程
2016/08/25 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
python3实现跳一跳点击跳跃
2018/01/08 Python
python程序 创建多线程过程详解
2019/09/23 Python
Python 迭代,for...in遍历,迭代原理与应用示例
2019/10/12 Python
python异常处理之try finally不报错的原因
2020/05/18 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
企事业单位求职者的自我评价
2013/12/28 职场文书
计算机应用专业自荐信
2014/07/05 职场文书
2014年酒店服务员工作总结
2014/12/08 职场文书
清洁工个人工作总结
2015/03/05 职场文书
幼儿园中秋节活动总结
2015/03/23 职场文书
2015年公务员工作总结
2015/04/24 职场文书
学前教育见习总结
2015/06/23 职场文书
2016年法制宣传月活动总结
2016/04/01 职场文书