JS跟随页面移动的div

这段代码定义了一个scrollDiv函数,用于实现div元素随着页面滚动而固定在屏幕上的效果。它通过监听window的onscroll事件,判断div的当前位置是否超过预设值,从而切换div的样式。当滚动超过指定位置时,div会设置为position: fixed并固定在顶部;否则,移除此样式。代码还包含了兼容IE6的处理,并提供了获取元素位置的辅助函数。
<script type="text/javascript">
         /*
         divID = 元素id
         fistTop = 元素起始位置
         */
         function scrollDiv(divID, fistTop) {
             this.fistTop = fistTop;
             this.onscroll(divID);
         }

         scrollDiv.prototype = {
             $: function (id) { return document.getElementById(id) },

             timer: "", //定时器

             onscroll: function (divID) {
                 var that = this;
                 window.onscroll = function () {
                     clearTimeout(that.timer);
                     that.timer = setTimeout(function () {
                         that.sDiv(divID)
                     }, 50);
                 }

             },

             sDiv: function (divID) {
                 var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;

                 if (!!window.ActiveXObject && !window.XMLHttpRequest) {  //ie6

                     if (scrollTop >= this.fistTop) {
                         this.$(divID).className = "active";//设置CSS的position: fixed
                         this.$(divID).style.top = scrollTop + "px";
                     } else {
                         // this.$(divID).className = "pop";
                     }

                 } else {  //其它浏览器
                     scrollTop >= this.fistTop ? this.$(divID).className = "active" : this.$(divID).className = "pop";
                 }

             },

             getPosition: function (obj) {  //获取元素的位置
                 var top = 0,
                     left = 0,
                     width = obj.offsetWidth,
                     height = obj.offsetHeight;
                 while (obj.offsetParent) {
                     top += obj.offsetTop;
                     left += obj.offsetLeft;
                     obj = obj.offsetParent;
                 }
                 return { "top": top, "left": left, "width": width, "height": height };
             }

         }

         var myDiv = new scrollDiv("left-column", 100);//开始调用

   </script>
 <style type="text/css">
   .active{position: fixed;_position:absolute;display: block;margin: 0;top:0}
   </style>


一、遇顶固定的例子 我一直以为是某个div或层随屏幕滚动,遇顶则固定,离开浏览器顶部又还原这样的例子其实不少,其实它的名字叫“层的智能浮动效果”。目前我们在国内的商业网站上就常常看到这样的效果了。例如淘宝网的搜索结果页的排序水平条,在默认状态时,该工具条是跟随页面滚动的,如下图: 而当我们下拉滚动条,随着页面向下滚动,当此工具条接触到浏览器的上边缘时,这时就会独立出来固定在顶部,不跟随页面滚动滚动了,如下图: 类似的例子效果我们在别的网站上都有看到过,例如腾讯微博首页上,当我们下拉屏幕浏览最新微博时,工具条也会出现这个效果,如下图: 这个效果看上去方便,贴心,也许还带推动广告的促销呢。原理其实很简单,本文展示两种方法。 二、智能浮动效果的实现原理 它分两种状态,一是默认状态,二是浮动固顶状态。 默认状态就是默认状态,什么也不用做,保持原有的CSS就好。无论有没有对它做定位,做了absolute也好,没做也好,都行。 关键是当浏览器屏幕滚动时,该对象div层要移除浏览器界面视区的时候,是要修改它的position属性,让它浮动在窗口的上沿显示就行了。最好的position属性是fixed,可以在IE6+和其他浏览器浮动层平滑的固定定位,由于IE6老大哥不支持fixed属性,所以可以另外赋予它absolute属性。当然也会产生副作用——滚动不平滑。不过也无所谓了,在微软公布不再修补更新XP漏洞,在中国360安全卫士的帮助下虽然大家仍然使用XP,但IE的用户已经是少之又少了。 那接下来,如何判断当前div层与浏览器窗口的上边缘接触了呢?遇到浏览器顶部了呢? 当浮动层div与浏览器窗口上边缘接触的一瞬间,其页面垂直偏移值与页面滚动高度是一致的,所以我们就用这个进行判断。那如何获得页面上元素距离页面的垂直距离呢? 这里则是使用javaScript库实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值