JavaScript实现跟随滚动缓冲运动的广告框

作者:微光时间:2026-10-22 06:00:32浏览:652

本文介绍如何使用JavaScript实现跟随页面滚动并带有缓冲效果的广告框。通过自定义运动框架,计算滚动距离与浏览器视口高度,使广告框平滑移动至屏幕垂直居中位置。代码涵盖HTML布局、CSS定位及JS事件监听,解决滚动与窗口大小改变时的兼容性问题。

广告框滚动效果概述

浏览网页时,常可见侧边存在广告图片,当用户滚动页面时,这些广告会随之移动,此类组件通常被称为广告框。部分网页采用固定定位方式,通过CSS属性background: fixed实现吸附效果。本文旨在通过JavaScript代码,演示如何制作一个具有缓冲运动效果的跟随滚动广告框。

广告框滚动效果概述

实现原理与关键点

实现原理相对直观,前提是需要具备一个成熟的JavaScript运动框架,其中缓冲运动逻辑是核心。本例中,广告框被设定为跟随滚动条进行缓冲移动,并最终停止在浏览器视口的垂直中间位置。关键点在于准确计算运动距离,并处理细节以预防潜在的程序Bug。

运动框架说明

此处使用了一个简化的JavaScript运动框架,其传递参数仅包含一个目标值,并非功能完备的运动框架。该参数指定了广告框的运动目标距离,因此需要在运动框架内部再次获取相关对象引用。


var timer=null;
    function startMover(iTarget){
      var oDiv=document.getElementById('div1');
      clearInterval(timer);
      timer=setInterval(function(){
          var ispeed=(iTarget-oDiv.offsetTop)/8;
          //速度设置为逐渐减小
          ispeed=ispeed>0?Math.ceil(ispeed):Math.floor(ispeed);
          //避免速度产生小数点
          if(oDiv.offsetTop==iTarget){
            clearInterval(timer);
          }
          else{
          oDiv.style.top=oDiv.offsetTop+ispeed+"px";
          }

    },30);
    };

样式与布局代码

以下是相关的CSS样式与HTML布局代码。


  <style>
    #div1{
      width: 100px;
      height: 100px;
      background: #ccc;
      position: absolute;
      //使用绝对定位让其处于右上方
      right: 0;
      top: 0;
  </style>

  <body style="height: 2000px;">
    <div id="div1"></div>
  </body>


JavaScript核心逻辑

接下来是核心的JavaScript逻辑代码。

滚动与窗口大小事件处理

代码中增加了window.onscroll事件监听,目的是在用户滚动滚动条时触发页面逻辑,使广告框能随滚动条同步运动。同时,增加了window.onresize事件监听,因为需求要求广告框始终保持在浏览器视口的中间位置。当浏览器窗口大小发生变化时,需重新计算位置并触发运动,因此添加了该属性以在窗口尺寸改变时重新加载逻辑。


<script>
    window.onload=window.onscroll=window.onresize=function(){

      var oDiv=document.getElementById('div1');
      var scrolltop=document.documentElement.scrollTop||document.body.scrollTop;
"scrolltop"是滚动条滚动的距离,这里有一个兼容chrome不支持document.documentElement.scrollTop获取语句,其他浏览器支持。          
      var t=(document.documentElement.clientHeight-oDiv.offsetHeight)/2;
"t"为让广告框处于中间位置的高度距离,(获取浏览器的总高度-广告框自身高度)/2      
      startMover(parseInt(t+scrolltop));
"parseIn"返回一个整数,避免小数生成。这里广告框的总移动距离为(t+scrolltop)    
    };

    var timer=null;
    function startMover(iTarget){
      var oDiv=document.getElementById('div1');
      clearInterval(timer);
      timer=setInterval(function(){
          var ispeed=(iTarget-oDiv.offsetTop)/8;

          ispeed=ispeed>0?Math.ceil(ispeed):Math.floor(ispeed);

          if(oDiv.offsetTop==iTarget){
            clearInterval(timer);
          }
          else{
          oDiv.style.top=oDiv.offsetTop+ispeed+"px";
          }

    },30);
    };

  </script>

以上为本文的全部内容,希望对读者的学习有所帮助,也欢迎大家继续支持本站。

作者最新文章