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 相关文章推荐
设置下载不需要倒计时cookie(倒计时代码)
Nov 19 Javascript
jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配
May 31 Javascript
javascript函数定义的几种区别小结
Jan 06 Javascript
JS执行删除前的判断代码
Feb 18 Javascript
JavaScript实现快速排序的方法
Jul 31 Javascript
JS处理json日期格式化问题
Oct 01 Javascript
JS双向链表实现与使用方法示例(增加一个previous属性实现)
Jan 31 Javascript
vue下的@change事件的实现
Oct 25 Javascript
JavaScript代理模式原理与用法实例详解
Mar 10 Javascript
JS Thunk 函数的含义和用法实例总结
Apr 08 Javascript
jQuery实现飞机大战小游戏
Jul 05 jQuery
Bootstrap告警框(alert)实现弹出效果和短暂显示后上浮消失的示例代码
Aug 27 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
我的论坛源代码(七)
2006/10/09 PHP
PHP中include()与require()的区别说明
2010/03/10 PHP
深入PHP数据缓存的使用说明
2013/05/10 PHP
简单的php缓存类分享     php缓存机制
2014/01/22 PHP
从wamp到xampp的升级之路
2015/04/08 PHP
php实现留言板功能(代码详解)
2017/03/28 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
php实现数组中出现次数超过一半的数字的统计方法
2018/10/14 PHP
在视频前插入广告
2006/11/20 Javascript
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
javascript实现unicode与ASCII相互转换的方法
2015/12/10 Javascript
轻松掌握JavaScript代理模式
2016/08/26 Javascript
运用js教你轻松制作html音乐播放器
2020/04/17 Javascript
原生js实现手风琴功能(支持横纵向调用)
2017/01/13 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
2018/09/07 Javascript
vue 优化CDN加速的方法示例
2018/09/19 Javascript
Vue中Quill富文本编辑器的使用教程
2018/09/21 Javascript
使用 Element UI Table 的 slot-scope方法
2019/10/10 Javascript
详解用python实现简单的遗传算法
2018/01/02 Python
Pycharm无法使用已经安装Selenium的解决方法
2018/10/13 Python
Python中Unittest框架的具体使用
2019/08/27 Python
Python SQLAlchemy入门教程(基本用法)
2019/11/11 Python
如何在django中实现分页功能
2020/04/22 Python
详解Html5原生拖拽操作
2018/01/12 HTML / CSS
EJB timer的种类
2014/10/28 面试题
机械设计制造专业个人求职信
2013/09/25 职场文书
面试求职的个人自我评价
2013/11/16 职场文书
酒店营销策划方案
2014/02/07 职场文书
历史专业大学生职业生涯规划书
2014/03/13 职场文书
美术指导助理求职信
2014/04/20 职场文书
上海世博会志愿者口号
2014/06/17 职场文书
关于对大人不礼貌的检讨书
2014/09/29 职场文书
2015年乡镇信访工作总结
2015/04/07 职场文书
员工表扬信怎么写
2015/05/05 职场文书
2019单位介绍信怎么写
2019/06/24 职场文书