jQuery实现页面滚动时元素智能定位

本文将以淘宝网商品详情的简易导航为例,和你们一块儿分享经过jQuery和CSS实现页面元素(要浮动的层)智能定位的效果。

查看演示DEMO 下载源码css

实现过程

Js侦听滚动事件,当页面滚动的距离(页面滚动的高度)超出了对象(要滚动的层)距离页面顶部的高度,即要滚动的层到达了浏览器窗口上边缘时,当即 将对象定位属性position值改为fixed(固定)。同时为了有个好点的体验效果,能够将对象的样式设置阴影效果以便更好的区分浮动层与页面内容主 体。css3

这里须要注意的是,老前辈IE6不支持fixed,那就只能使用absolute来代替,可是这样会有一个问题,将会致使在IE6下看不到平滑效 果。咱们能够经过window.XMLHttpRequest来判断是否为IE6,由于除IE6及更低版本IE浏览器外,其余现代浏览器都支持 window.XMLHttpRequest。还有就是本例中咱们用css3来制造阴影效果,为了兼容IE6-IE8,你也可使用图片来设置阴影效果。web

HTML

咱们仿淘宝网的商品详情页面,创建一个简易的导航条。浏览器

<div id="nav"> 
    <ul> 
        <li><a href="#">宝贝详情</a></li> 
        <li class="cur"><a href="#">评价详情(123)</a></li> 
        <li><a href="#">成交记录(68件)</a></li> 
    </ul> 
</div> 

为了达到滚动效果,咱们应该在页面中放置一些其余的元素或者设置body的高度,将页面高度撑起来。this

CSS

咱们运用css3,将导航条包装的稍显正规点,固然你也能够发挥你的美工特长,让它不那么土。注意咱们使用了阴影效果的样式.shadow,用来动态的将效果赋给浮动的对象。spa

#nav{width:720pxheight:42pxposition:absolutemargin-left:20pxborder:1px solid #d3d3d3;  
background:#f7f7f7;-moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; } 
#nav li{float:leftheight:42pxline-height:42pxpadding:0 10pxborder-right: 
1px solid #d3d3d3font-size:14pxfont-weight:bold
#nav li.cur{background:#f1f1f1border-top:1px solid #f60
#nav li a{text-decoration:none;} 
#nav li.cur a{color:#333
#nav li a:hover{color:#f30
.shadow{-moz-box-shadow:1px 1px 2px rgba(0,0,0,.2); -webkit-box-shadow:1px 1px 2px  
rgba(0,0,0,.2); box-shadow:1px 1px 2px rgba(0,0,0,.2);} 

jQuery

本例中依赖jQuery库,因此必须先引入jQuery库文件。接着,咱们按实现流程完成智能定位效果,请看代码及注释。3d

$.fn.smartFloat = function() { 
    var position = function(element) { 
        var top = element.position().top; //当前元素对象element距离浏览器上边缘的距离 
        var pos = element.css("position"); //当前元素距离页面document顶部的距离 
        $(window).scroll(function() { //侦听滚动时 
            var scrolls = $(this).scrollTop(); 
            if (scrolls > top) { //若是滚动到页面超出了当前元素element的相对页面顶部的高度 
                if (window.XMLHttpRequest) { //若是不是ie6 
                    element.css({ //设置css 
                        position: "fixed"//固定定位,即再也不跟随滚动 
                        top: 0 //距离页面顶部为0 
                    }).addClass("shadow"); //加上阴影样式.shadow 
                } else { //若是是ie6 
                    element.css({ 
                        top: scrolls  //与页面顶部距离 
                    });     
                } 
            }else { 
                element.css({ //若是当前元素element未滚动到浏览器上边缘,则使用默认样式 
                    position: pos, 
                    top: top 
                }).removeClass("shadow");//移除阴影样式.shadow 
            } 
        }); 
    }
    return $(this).each(function() { 
        position($(this));                          
    }); 
};

最后,咱们调用以上效果:code

$(function(){ 
    $("#nav").smartFloat(); 
});

大功告成,去看下效果吧: demo.
对象

相关文章
相关标签/搜索