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 中的 MVC 模式
Apr 11 Javascript
HTTP 304错误的详细讲解
Nov 13 Javascript
javaScript中的this示例学习详解及工作原理
Jan 13 Javascript
javascript从image转换为base64位编码的String
Jul 29 Javascript
JS中产生20位随机数以0-9为例也可以是a-z A-Z
Aug 01 Javascript
JS获取网页图片name属性的方法
Apr 01 Javascript
javascript 继承学习心得总结
Mar 17 Javascript
JavaScript易错知识点整理
Dec 05 Javascript
js实现打地鼠小游戏
Feb 13 Javascript
MVVM框架下实现分页功能示例
Jun 14 Javascript
jQuery实现购物车的总价计算和总价传值功能
Nov 28 jQuery
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
May 30 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下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
2011/09/19 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
2015/01/07 PHP
用jquery与css打造个性化的单选框和复选框
2010/10/20 Javascript
读jQuery之四(优雅的迭代)
2011/06/20 Javascript
javascript 数字格式化输出的实现代码
2013/12/10 Javascript
jquery获取tr并更改tr内容示例代码
2014/02/13 Javascript
JS数组的遍历方式for循环与for...in
2014/07/31 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
2014/11/16 Javascript
JavaScript数组的一些奇葩行为
2016/01/25 Javascript
js中遍历Map对象的简单实例
2016/08/08 Javascript
JavaScript学习笔记之图片库案例分析
2019/01/08 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
在vue项目中封装echarts的步骤
2020/12/25 Vue.js
详解Python中的静态方法与类成员方法
2017/02/28 Python
python中文分词教程之前向最大正向匹配算法详解
2017/11/02 Python
Python内建模块struct实例详解
2018/02/02 Python
解决python 输出是省略号的问题
2018/04/19 Python
Python动态导入模块的方法实例分析
2018/06/28 Python
win7 x64系统中安装Scrapy的方法
2018/11/18 Python
解决Python下imread,imwrite不支持中文的问题
2018/12/05 Python
python3 selenium自动化 frame表单嵌套的切换方法
2019/08/23 Python
django序列化serializers过程解析
2019/12/14 Python
python读取raw binary图片并提取统计信息的实例
2020/01/09 Python
使用Python发现隐藏的wifi
2020/03/04 Python
Python利用pip安装tar.gz格式的离线资源包
2020/09/14 Python
请解释在new与override的区别
2012/10/29 面试题
运动会广播稿50字
2014/01/26 职场文书
国际贸易专业求职信
2014/06/04 职场文书
2014派出所所长群众路线对照检查材料思想汇报
2014/09/18 职场文书
2014年销售员工作总结
2014/12/01 职场文书
2015年清明节活动总结
2015/02/09 职场文书
尼克胡哲观后感
2015/06/08 职场文书
Golang 编译成DLL文件的操作
2021/05/06 Golang
Mysql8.0递归查询的简单用法示例
2021/08/04 MySQL
Python中的程序流程控制语句
2022/02/24 Python
MySQL索引 高效获取数据的数据结构
2022/05/02 MySQL