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 相关文章推荐
javascript写的日历类(基于pj)
Dec 28 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
Apr 02 Javascript
可以用鼠标拖动的DIV实现思路及代码
Oct 21 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
Dec 01 Javascript
原生js实现图片轮播特效
Dec 18 Javascript
BooStrap对导航条的改造实践小结
Sep 21 Javascript
用jQuery实现优酷首页轮播图
Jan 09 Javascript
Bootstrap 模态框(Modal)带参数传值实例
Aug 20 Javascript
jquery 动态遍历select 赋值的实例
Sep 12 jQuery
微信小程序webview与h5通过postMessage实现实时通讯的实现
Aug 20 Javascript
vue.config.js中配置Vue的路径别名的方法
Feb 11 Javascript
JavaScript如何利用Promise控制并发请求个数
May 14 Javascript
在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
将数组写入txt文件 var_export
2009/04/21 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
php实现读取内存顺序号
2015/03/29 PHP
PHP实现通过URL提取根域名
2016/03/31 PHP
docker-compose部署php项目实例详解
2019/07/30 PHP
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
jquery实现多屏多图焦点图切换特效的方法
2015/05/04 Javascript
js实现头像图片切割缩放及无刷新上传图片的方法
2015/07/17 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
浅谈jquery设置和获得checkbox选中的问题
2016/08/19 Javascript
BootStrap学习笔记之nav导航栏和面包屑导航
2017/01/03 Javascript
jQuery给表格添加分页效果
2017/03/02 Javascript
JS学习笔记之闭包小案例分析
2019/05/29 Javascript
小程序实现按下录音松开识别语音
2019/11/22 Javascript
JS实现无限轮播无倒退效果
2020/09/21 Javascript
vue实现按钮切换图片
2021/01/20 Vue.js
[01:01:52]完美世界DOTA2联赛PWL S2 GXR vs Magma 第二场 11.25
2020/11/26 DOTA
在Linux下使用Python的matplotlib绘制数据图的教程
2015/06/11 Python
Windows下Python使用Pandas模块操作Excel文件的教程
2016/05/31 Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
2016/06/07 Python
Python 实现使用dict 创建二维数据、DataFrame
2018/04/13 Python
Python设置在shell脚本中自动补全功能的方法
2018/06/25 Python
荷兰DOD药房中文官网:DeOnlineDrogist
2020/12/27 全球购物
shell变量的作用空间是什么
2013/08/17 面试题
售后专员岗位职责
2013/12/08 职场文书
车祸赔偿收入证明
2014/01/09 职场文书
大专生毕业的自我评价
2014/02/06 职场文书
阳光体育活动方案
2014/02/16 职场文书
遗产继承公证书
2014/04/09 职场文书
秋天的图画教学反思
2014/05/01 职场文书
敬老月活动总结
2014/08/28 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书
2019年大学毕业生个人自我鉴定范文大全
2019/03/21 职场文书
一文搞懂Java中的注解和反射
2022/06/21 Java/Android
SpringBoot Http远程调用的方法
2022/08/14 Java/Android
MySQL远程无法连接的一些常见原因总结
2022/09/23 MySQL