JavaScript实现跟随滚动缓冲运动的广告框
本文介绍如何使用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>
以上为本文的全部内容,希望对读者的学习有所帮助,也欢迎大家继续支持本站。
JavaScript零基础入门:从环境搭建到运行第一段代码
2026-11-05 15:29:58
HTML链接中javascript:void(0)的作用及现代替代方案
2026-11-05 10:07:47
在线调试 JS 时怎么引入 jQuery 或 Vue 等第三方库
2026-11-05 08:53:56
原生JavaScript实现简易颜色选择器原理与代码
2026-11-03 23:22:19
JS原生表单序列化:FormData与URLSearchParams用法详解
2026-11-03 23:13:21
