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 相关文章推荐
js 强制弹出窗口代码研究-又一款代码
Mar 20 Javascript
JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的区别和应用场景简述
Apr 15 Javascript
jquery radio 操作代码
Mar 16 Javascript
jquery判断密码强度的验证代码
Apr 22 Javascript
node-http-proxy修改响应结果实例代码
Jun 06 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
Oct 10 Javascript
微信小程序 自定义对话框实例详解
Jan 20 Javascript
详解JS获取HTML DOM元素的8种方法
Jun 17 Javascript
浅谈Webpack自动化构建实践指南
Dec 18 Javascript
laydate如何根据开始时间或者结束时间限制范围
Nov 15 Javascript
微信小程序使用字体图标的方法
May 23 Javascript
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
Jul 11 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中遍历stdclass object的实现代码
2011/06/09 PHP
写出高质量的PHP程序
2012/02/04 PHP
php获取POST数据的三种方法实例详解
2016/12/20 PHP
Prototype使用指南之dom.js
2007/01/10 Javascript
[原创]保存的js无法执行的解决办法
2007/02/25 Javascript
认识延迟时间为0的setTimeout
2008/05/16 Javascript
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
浅析return false的正确使用
2013/11/04 Javascript
JS阻止冒泡事件以及默认事件发生的简单方法
2014/01/17 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
JavaScript操作Cookie详解
2015/02/28 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
Bootstrap图片轮播组件使用实例解析
2016/06/30 Javascript
bootstrap fileinput完整实例分享
2016/11/08 Javascript
Angular.js中下拉框实现渲染html的方法
2017/06/18 Javascript
JS非行间样式获取函数的实例代码
2018/06/05 Javascript
Nodejs模块的调用操作实例分析
2018/12/25 NodeJs
解决微信小程序云开发中获取数据库的内容为空的方法
2019/05/15 Javascript
小程序云开发教程如何使用云函数实现点赞功能
2019/05/18 Javascript
[40:06]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第一场
2018/04/04 DOTA
Python学习小技巧之列表项的排序
2017/05/20 Python
Python找出最小的K个数实例代码
2018/01/04 Python
python中的闭包函数
2018/02/09 Python
python自动发送邮件脚本
2018/06/20 Python
Tensorflow中tf.ConfigProto()的用法详解
2020/02/06 Python
Python自动化测试笔试面试题精选
2020/03/12 Python
python xlsxwriter模块的使用
2020/12/24 Python
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
物业招聘计划书
2014/01/10 职场文书
机关工会开展学习雷锋活动总结
2014/03/01 职场文书
物业接待员岗位职责
2015/04/15 职场文书
CSS3新特性详解(五):多列columns column-count和flex布局
2021/04/30 HTML / CSS
spring cloud 配置中心客户端启动遇到的问题
2021/09/25 Java/Android
Python超详细分步解析随机漫步
2022/03/17 Python
搞笑Gif:这么白这么长的腿像极了一楼的女朋友
2022/03/21 杂记