JS实现小球弹性碰撞及横向滚动条修复方案

作者:纸飞机

时间:2026-10-22

浏览:313

本文详细介绍如何使用JavaScript实现多个小球的弹性碰撞动画,涵盖HTML结构搭建、CSS样式定位及JS运动逻辑。重点解决当页面存在右侧滚动条时,小球碰撞屏幕边缘引发的横向滚动条闪现Bug,通过计算滚动条宽度并修正最大运动边界,确保页面布局稳定美观。

文章目录

HTML结构搭建

HTML结构部分


 <body>
   <!--只需要做一个大div包裹几个小div即可,你想要几个小球碰撞就在内部做几个div即可,这里我们做了6个小球-->
   <div id="main">
     <div></div>
     <div></div>
     <div></div>
     <div></div>
     <div></div>
     <div></div>
   </div> 
 </body>

完成上述HTML结构后,接下来为body中的div元素添加基础样式。

CSS样式设置

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>

为了使小球产生运动效果,需为小球及其父容器设置定位属性,随后通过JavaScript动态修改top、bottom、left、right等坐标值来实现移动。当前小球样式已配置完毕,接下来的JavaScript代码是实现核心功能的关键。

JavaScript核心逻辑与滚动条Bug修复

3.1 Android 事件基础知识

基于前述代码已能实现基本的碰撞检测功能,但仍存在一个潜在缺陷:若网页右侧存在垂直滚动条,当小球撞击屏幕右边缘时,会瞬间触发横向滚动条显示,这在网页设计中属于需要避免的视觉瑕疵。为此,可通过以下代码进行修正。


//滚动条宽度计算函数
    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就修改好了。

总结

以上介绍了利用JavaScript实现小球弹性碰撞效果的方法,希望能为读者提供帮助。如有任何疑问,欢迎留言,小编将及时回复!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章