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

2014-02-17阅读(3910)评论(4)牵着狗狗看MM

苏州实时公交查询

在淘宝商品详情页面上,当我们下拉滚动页面时,用来导航切换的“宝贝详情”、“交易详情”等一排按钮会一直出现在浏览器顶部,方便我们切换导航。
本文将以淘宝网商品详情的简易导航为例,和大家一起分享通过jQuery和CSS实现页面元素(要浮动的层)智能定位的效果。
jQuery实现页面滚动时元素智能定位

实现过程

Js侦听滚动事件,当页面滚动的距离(页面滚动的高度)超出了对象(要滚动的层)距离页面顶部的高度,即要滚动的层到达了浏览器窗口上边缘时,立即将对象定位属性position值改成fixed(固定)。同时为了有个好点的体验效果,可以将对象的样式设置阴影效果以便更好的区分浮动层与页面内容主体。
这里需要注意的是,老前辈IE6不支持fixed,那就只能使用absolute来代替,但是这样会有一个问题,将会导致在IE6下看不到平滑效果。我们可以通过window.XMLHttpRequest来判断是否为IE6,因为除IE6及更低版本IE浏览器外,其他现代浏览器都支持window.XMLHttpRequest。还有就是本例中我们用css3来制造阴影效果,为了兼容IE6-IE8,你也可以使用图片来设置阴影效果。

HTML代码

我们仿淘宝网的商品详情页面,建立一个简易的导航条。

[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>
[/html]

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

CSS代码

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

[css]#nav{width:720px; height:42px; position:absolute; margin-left:20px; border:1px solid #d3d3d3;
background:#f7f7f7;-moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; }
#nav li{float:left; height:42px; line-height:42px; padding:0 10px; border-right:
1px solid #d3d3d3; font-size:14px; font-weight:bold}
#nav li.cur{background:#f1f1f1; border-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);}
[/css]

jQuery代码

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

[js]$.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 &gt; 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));
});
};
[/js]

最后,我们调用以上效果:

[js]$(function(){
$("#nav").smartFloat();
});
[/js]

Demo演示

赞(0) 打赏
转载请注明来源:Web前端(W3Cways.com) - Web前端学习之路 » jQuery实现页面滚动时元素智能定位
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏