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 相关文章推荐
学习ExtJS Column布局
Oct 08 Javascript
jQuery常用的一些技巧汇总
Mar 26 Javascript
js学习笔记之事件处理模型
Oct 31 Javascript
d3.js实现简单的网络拓扑图实例代码
Nov 06 Javascript
详解使用nvm安装node.js
Jul 18 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
Aug 11 Javascript
vue中post请求以a=a&amp;b=b 的格式写遇到的问题
Apr 27 Javascript
Vue使用高德地图搭建实时公交应用功能(地图 + 附近站点+线路详情 + 输入提示+换乘详情)
May 16 Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
Nov 25 Javascript
小程序组件之自定义顶部导航实例
Jun 12 Javascript
浅谈如何优雅处理JavaScript异步错误
Nov 12 Javascript
使用JavaScript获取Django模板指定键值数据
May 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
php压缩HTML函数轻松实现压缩html/js/Css及注意事项
2013/01/27 PHP
zf框架的zend_cache缓存使用方法(zend框架)
2014/03/14 PHP
PHP+JQUERY操作JSON实例
2017/03/23 PHP
PHP的PDO连接讲解
2019/01/24 PHP
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
2006/09/22 Javascript
ExtJs3.0中Store添加 baseParams 的Bug
2010/03/10 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
JavaScript运行机制之事件循环(Event Loop)详解
2014/10/10 Javascript
jQuery在ul中显示某个li索引号的方法
2015/03/17 Javascript
javascript实现仿腾讯游戏选择
2015/05/14 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
2015/08/13 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
jquery常用的12个小功能
2016/07/22 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
2016/12/26 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
JS获取字符对应的ASCII码实例
2017/09/10 Javascript
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
详解利用nodejs对本地json文件进行增删改查
2019/09/20 NodeJs
jQuery实现验证用户登录
2019/12/10 jQuery
[01:18]DOTA2超级联赛专访hanci ForLove淘汰感言曝光
2013/06/04 DOTA
python的urllib模块显示下载进度示例
2014/01/17 Python
python笔记:mysql、redis操作方法
2017/06/28 Python
Python多线程处理实例详解【单进程/多进程】
2019/01/30 Python
python datetime中strptime用法详解
2019/08/29 Python
python使用 __init__初始化操作简单示例
2019/09/26 Python
Python包,__init__.py功能与用法分析
2020/01/07 Python
Python中return函数返回值实例用法
2020/11/19 Python
高清安全摄像头系统:Lorex Technology
2018/07/20 全球购物
群众路线剖析材料
2014/02/02 职场文书
暑期培训随笔感言
2014/03/10 职场文书
预备党员入党自我评价范文
2014/03/10 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
2015年党支部公开承诺书
2015/01/22 职场文书
2015年学生资助工作总结
2015/05/25 职场文书
同乡会致辞
2015/07/30 职场文书