JS实现小球的弹性碰撞效果


Posted in Javascript onNovember 11, 2017

一、HTML代码(body部分)

<body>
   <!--只需要做一个大div包裹几个小div即可,你想要几个小球碰撞就在内部做几个div即可,这里我们做了6个小球-->
   <div id="main">
     <div></div>
     <div></div>
     <div></div>
     <div></div>
     <div></div>
     <div></div>
   </div> 
 </body>

上面body部分这样就算是完成了,下面我们给body中的div做一些小样式。

二、CSS小球样式部分

<style type="text/css">
   /*将body默认的margin和padding部分去掉*/
   *{
     margin: 0px;
     padding: 0px;
    }
    /*采用定位的方式,让小球运动起来*/
    #main{
      margin: 0px auto;
     position: relative;
   }
   /*小球的样式*/
   #main div{
     overflow: hidden;
     position: absolute;
     width: 80px;
     height: 80px;
    opacity: 0.5;
     border-radius: 50%;
     background-color: red;
   }
 </style>

 

小球是要运动起来的,我们通过给小球和它的父元素添加定位,最后用js改变其top、bottom、left、right值来让小球运动。现在我们小球的样式已经做好了,下面的js代码才是重中之重。

3.1 Android 事件基础知识

其实,我们通过上面的代码就可以完全实现一个小球碰撞检测的功能了。但是仅仅是上面的代码,还是会存在一定的bug,就是当整个网站存在右侧滚动条时,当小球碰到屏幕右侧的时候,会出现一瞬的横向滚动条,这就是做网站比较忌讳的了,横向滚动条的出现太丑了。所以我们可以通过以下代码来解决。

//滚动条宽度计算函数
    function getScrollbarWidth() {
      var oP = document.createElement("p"),
        styles = {
          width: "100px",
          height: "100px",
          overflowY: "scroll"
        }, i, scrollbarWidth;
      for (i in styles) oP.style[i] = styles[i];
      document.body.appendChild(oP);
      scrollbarWidth = oP.offsetWidth - oP.clientWidth;
      oP.remove();
      return scrollbarWidth;
    }

以上是一个计算滚动条宽度的函数,此函数可以计算右侧滚动条的宽度,我们只需要在“根据浏览器窗口的大小自动调节小球的运动空间”上面,调用此函数

var scrollbarWidth = getScrollbarWidth(); 再修改小球的最大运动宽度   maxW=window.innerWidth-circles[0].clientWidth-scrollbarWidth ;这样这个bug就修改好了。

总结

以上所述是小编给大家介绍的JS实现小球的弹性碰撞效果 ,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
javascript instanceof 与typeof使用说明
Jan 11 Javascript
JavaScript闭包 懂不懂由你反正我是懂了
Oct 21 Javascript
JavaScript对象和字串之间的转换实例探讨
Apr 21 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
Aug 05 Javascript
javascript实现简单查找与替换的方法
Jul 22 Javascript
谈谈我对JavaScript DOM事件的理解
Dec 18 Javascript
实例解析jQuery中proxy()函数的用法
May 24 Javascript
JS获取和修改元素样式的实例代码
Aug 06 Javascript
最好用的Bootstrap fileinput.js文件上传组件
Dec 12 Javascript
js代码延迟一定时间后执行一个函数的实例
Feb 15 Javascript
一次微信小程序内地图的使用实战记录
Sep 09 Javascript
Openlayers绘制聚合标注
Sep 28 Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
Nov 11 #jQuery
解决vue组件中使用v-for出现告警问题及v for指令介绍
Nov 11 #Javascript
JS Input里添加小图标的两种方法
Nov 11 #Javascript
fetch 使用及如何接收JS传值
Nov 11 #Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
Nov 11 #Javascript
AngularJS遍历获取数组元素的方法示例
Nov 11 #Javascript
vue jsx 使用指南及vue.js 使用jsx语法的方法
Nov 11 #Javascript
You might like
PHP图形操作之Jpgraph学习笔记
2015/12/25 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
2019/06/12 PHP
jquery.validate使用攻略 第二部
2010/07/01 Javascript
深入理解javascript中return的作用
2013/12/30 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
2014/05/19 Javascript
IE下支持文本框和密码框placeholder效果的JQuery插件分享
2015/01/31 Javascript
JavaScript实现页面5秒后自动跳转的方法
2015/04/16 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
2016/05/28 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
node.js的事件机制
2017/02/08 Javascript
javascript 正则表达式分组、断言详解
2017/04/20 Javascript
三步实现ionic3点击退出app程序
2019/09/17 Javascript
微信小程序 点击切换样式scroll-view实现代码实例
2019/10/11 Javascript
[12:51]71泪洒现场!是DOTA2让经典重现
2014/03/24 DOTA
Python 多线程实例详解
2017/03/25 Python
Python实现动态图解析、合成与倒放
2018/01/18 Python
python实现拓扑排序的基本教程
2018/03/11 Python
解决python中使用plot画图,图不显示的问题
2018/07/04 Python
详解Python爬取并下载《电影天堂》3千多部电影
2019/04/26 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
pycharm-professional-2020.1下载与激活的教程
2020/09/21 Python
Python+OpenCV图像处理——实现直线检测
2020/10/23 Python
HTML5实现获取地理位置信息并定位功能
2015/04/25 HTML / CSS
美国东北部户外服装和设备零售商:Eastern Mountain Sports
2016/10/05 全球购物
安德玛加拿大官网:Under Armour加拿大
2019/10/02 全球购物
体育课课后反思
2014/04/24 职场文书
法定代表人授权委托书范文
2014/09/22 职场文书
交通事故协议书范文
2014/10/23 职场文书
2015年保险公司工作总结
2015/04/24 职场文书
工作调动申请报告
2015/05/18 职场文书
奠基仪式致辞
2015/07/30 职场文书
团结友爱主题班会
2015/08/13 职场文书
python如何利用traceback获取详细的异常信息
2021/06/05 Python