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 相关文章推荐
WordPress 插件——CoolCode使用方法与下载
Jul 02 Javascript
两个select之间option的互相添加操作(jquery实现)
Nov 12 Javascript
jQuery及JS实现循环中暂停的方法
Feb 02 Javascript
jQuery DOM插入节点操作指南
Mar 03 Javascript
javascript顺序加载图片的方法
Jul 18 Javascript
js实现音乐播放控制条
Sep 09 Javascript
vue实现树形菜单效果
Mar 19 Javascript
JS中的防抖与节流及作用详解
Apr 01 Javascript
简述pm2常用命令集合及配置文件说明
May 30 Javascript
vue 实现购物车总价计算
Nov 06 Javascript
jsonp格式前端发送和后台接受写法的代码详解
Nov 07 Javascript
vue 递归组件的简单使用示例
Jan 14 Vue.js
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用mysql数据库存储session的代码
2010/03/05 PHP
php+ajax实现图片文件上传功能实例
2014/06/17 PHP
ThinkPHP开发框架函数详解:C方法
2015/08/14 PHP
PHP生成各种常见验证码和Ajax验证过程
2016/01/10 PHP
用Javscript实现表单复选框的全选功能
2007/05/25 Javascript
Javascript 陷阱 window全局对象
2008/11/26 Javascript
Javascript 面向对象(三)接口代码
2012/05/23 Javascript
node.js中的console用法总结
2014/12/15 Javascript
jQuery显示和隐藏 常用的状态判断方法
2015/01/29 Javascript
jQuery简单注册和禁用全局事件的方法
2016/07/25 Javascript
基于vuejs+webpack的日期选择插件
2020/05/21 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
2017/01/05 Javascript
JS设置CSS样式的方式汇总
2017/01/21 Javascript
Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件的方法
2017/09/20 Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
2018/04/23 Javascript
vue实现搜索过滤效果
2019/05/28 Javascript
15 分钟掌握vue-next响应式原理
2019/10/13 Javascript
你可能从未使用过的11+个JavaScript特性(小结)
2020/01/08 Javascript
Python实现的基数排序算法原理与用法实例分析
2017/11/23 Python
遗传算法python版
2018/03/19 Python
python自动截取需要区域,进行图像识别的方法
2018/05/17 Python
Python实现将多个空格换为一个空格.md的方法
2018/12/20 Python
Python后台开发Django会话控制的实现
2019/04/15 Python
一篇文章搞定Python操作文件与目录
2019/08/13 Python
Python中的 ansible 动态Inventory 脚本
2020/01/19 Python
Django-rest-framework中过滤器的定制实例
2020/04/01 Python
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
Microsoft新加坡官方网站:购买微软最新软件和技术产品
2016/10/28 全球购物
世界第一曲奇连锁店:Mrs. Fields Cookies
2017/02/04 全球购物
具有防紫外线功能的高性能钓鱼服装:Hook&Tackle
2018/08/16 全球购物
药店促销活动总结
2014/07/10 职场文书
升学宴答谢词
2015/01/05 职场文书
承诺函范文
2015/01/21 职场文书
讲座新闻稿
2015/07/18 职场文书
2015元旦感言
2015/12/09 职场文书
学校中层领导培训心得体会
2016/01/11 职场文书