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高级程序设计 扩展--关于动态原型
Nov 09 Javascript
在JQuery dialog里的服务器控件 事件失效问题
Dec 08 Javascript
Js中使用hasOwnProperty方法检索ajax响应对象的例子
Dec 08 Javascript
原生javascript实现隔行换色
Jan 04 Javascript
JS实现模拟百度搜索“2012世界末日”网页地震撕裂效果代码
Oct 31 Javascript
Extjs 点击复选框在表格中增加相关信息行
Jul 12 Javascript
基于JavaScript实现移动端无限加载分页
Mar 27 Javascript
在博客园博文中添加自定义右键菜单的方法详解
Feb 05 Javascript
Vue的双向数据绑定实现原理解析
Feb 17 Javascript
JS定时器如何实现提交成功提示功能
Jun 12 Javascript
JavaScript实现单点登录的示例
Sep 23 Javascript
一文帮你理解PReact10.5.13源码
Apr 03 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
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
2010/01/22 Javascript
Javascript中的this绑定介绍
2011/09/22 Javascript
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
json+jQuery实现的无限级树形菜单效果代码
2015/08/27 Javascript
jquery判断输入密码两次是否相等
2020/04/22 Javascript
jQuery实现二级下拉菜单效果
2016/01/05 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
2017/02/13 Javascript
canvas仿iwatch时钟效果
2017/03/06 Javascript
Angular使用动态加载组件方法实现Dialog的示例
2018/05/11 Javascript
Vue组件实现触底判断
2019/06/26 Javascript
小程序实现搜索框功能
2020/03/26 Javascript
JS实现横向轮播图(初级版)
2020/06/24 Javascript
下载糗事百科的内容_python版
2008/12/07 Python
Python开发的实用计算器完整实例
2017/05/10 Python
Python基于identicon库创建类似Github上用的头像功能
2017/09/25 Python
详解Python核心编程中的浅拷贝与深拷贝
2018/01/07 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
2018/11/30 Python
python区分不同数据类型的方法
2019/10/14 Python
python 字典访问的三种方法小结
2019/12/05 Python
使用Python串口实时显示数据并绘图的例子
2019/12/26 Python
python如何对链表操作
2020/10/10 Python
Python用requests库爬取返回为空的解决办法
2021/02/21 Python
canvas 实现 github404动态效果的示例代码
2017/11/15 HTML / CSS
捐赠仪式主持词
2014/03/19 职场文书
保护环境建议书400字
2014/05/13 职场文书
公安派出所所长四风问题个人对照检查材料
2014/10/04 职场文书
2015年感恩节活动总结
2015/03/24 职场文书
2015年健康教育工作总结
2015/04/10 职场文书
煤矿安全生产管理协议书
2016/03/22 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers
MySQL基础(二)
2021/04/05 MySQL
使用RedisTemplat实现简单的分布式锁
2021/11/20 Redis
Meta增速拉垮,元宇宙难当重任
2022/04/29 数码科技