实现过程

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

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

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的高度,将页面高度撑起来。

CSS

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

#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);}

jQuery

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

$.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));
});
};

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

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

大功告成,去看下效果吧:

jQuery实现页面元素智能定位的更多相关文章

  1. 关于jquery计算页面元素数量

    这段jquery计算页面元素数量代码,能不能刷新页面直接输出数量,而不用点计算按钮 <scriptsrc="http://ajax.googleapis.com/ajax/libs/j ...

  2. sellenium页面元素的定位方法

    1.findElements函数可用于多个元素定位 (1)使用ID定位:driver.findElement(By.id("ID值")); 例:HTML代码: 定位语句代码:Web ...

  3. Python3 Selenium自动化web测试 ==> 第二节 页面元素的定位方法 <上>

    前置步骤: 上一篇的Python单元测试框架unittest,我认为相当于功能测试测试用例设计中的用例模板,在自动化用例的设计过程中,可以封装一个模板,在新建用例的时候,把需要测试的步骤添加上去即可: ...

  4. 利用 jQuery 操作页面元素的方法,实现电商网站购物车页面商品数量的增加和减少操作,要求单项价格和总价随着数量的改变而改变

    查看本章节 查看作业目录 需求说明: 利用 jQuery 操作页面元素的方法,实现电商网站购物车页面商品数量的增加和减少操作,要求单项价格和总价随着数量的改变而改变 当用户单击"+" ...

  5. 使用 jQuery 操作页面元素的方法,实现浏览大图片的效果,在页面上插入一幅小图片,当鼠标悬停到小图片上时,在小图片的右侧出现与之相对应的大图片

    查看本章节 查看作业目录 需求说明: 使用 jQuery 操作页面元素的方法,实现浏览大图片的效果,在页面上插入一幅小图片,当鼠标悬停到小图片上时,在小图片的右侧出现与之相对应的大图片 实现思路: 在 ...

  6. jQuery 判断页面元素是否存在的代码

    在原生的Javascript里,当我们对某个页面元素进行某种操作前,最好先判断这个元素是否存在.原因是对一个不存在的元素进行操作是不允许的. 例如: document.getElementById(& ...

  7. jQuery修改页面元素的属性

    作为一个后台开发者,在web开发的时候会常常遇到修改前台页面的属性的问题.这两天我发现jQuery的$("#id").attr("prop","值&q ...

  8. 页面元素的定位:getBoundingClientRect()和document.documentElement.scrollTop

    1.document.documentElement.getBoundingClientRect MSDN对此的解释是: Syntax oRect = object.getBoundingClient ...

  9. jquery判断页面元素是否存在

    在传统的Javascript里,当我们对某个页面元素进行某种操作前,最好先判断这个元素是否存在.原因是对一个不存在的元素进行操作是不允许的. 例如: document.getElementById(& ...

随机推荐

  1. .net framework client profile

    .NET Framework Client Profile The .NET Client Profile is a subset of the .NET Framework, which was p ...

  2. BZOJ1610: [Usaco2008 Feb]Line连线游戏

    1610: [Usaco2008 Feb]Line连线游戏 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1301  Solved: 571[Submit ...

  3. unity5 人皮渲染 Skin Shading

    换了一种方法,优化了一下代码,unity5效果很好,消耗不大 点开可查看大图 加入了次表面散射的阴影与自阴影              ------------by wolf96  wolf_crix ...

  4. bzoj 2819 Nim(BIT,dfs序,LCA)

    2819: Nim Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1596  Solved: 597[Submit][Status][Discuss] ...

  5. Java正则表达式(1)

    String类的三个内建正则表达式工具: 1.matches()方法 示例:检查一个句子是否以大写字母开头,以句号结尾 public static boolean checkFormat(String ...

  6. hdu 4432 Sum of divisors(十进制转其他进制)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4432 代码: #include<cstdio> #include<cstring&g ...

  7. 12个强大的Web服务测试工具

    在过去的几年中,web服务或API的普及和使用有所增加. web服务或API是程序或软件组件的集合,可以帮助应用程序进行交互或通过形成其他应用程序或服务器之间的连接执行一些进程/事务处理.基本上有两种 ...

  8. JavaScript之this指针深入详解

    javascript中的this含义非常丰富,它可以是全局对象,当前对象或者是任意对象,这都取决于函数的调用方式.函数有以下几种调用方式:作为对象方法调用.作为函数调用.作为构造函数调用.apply或 ...

  9. 西安Uber优步司机奖励政策(1月25日~1月31日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  10. java 哈希码

    加入新的元素到数组中 /** * Append the given object to the given array, returning a new array * consisting of t ...