jquery 智能浮动层定位解决方法

当页面滚动,智能浮动层开始要淡出浏览器窗口的时候,其浮动于浏览器窗口的最上沿显示。这种效果在国内各大网站屡见不鲜,比如新浪微博、淘宝网等。

实现原理:

默认状态就是默认状态,什么事情也不用做,定位是absolute也好,static也好,都ok。关键是当浏览器滚动的时候,对象(要浮动的层)要移除浏览器界面视区的时候,修改其position属性,让其浮动在窗口的上沿显示就可以了。最好的position属性就是fixed了,可以在IE6+和其他浏览器下浮动层平滑固定定位,由于IE6前辈不支持fixed属性,所以,后退一步,使用absolute属性代替,但是会有副作用——滚动不平滑。但,这也是没有办法的事情了。

现在关键就是如何判断当前层与浏览器窗口的上边缘接触呢?当浮动层与浏览器窗口上边缘接触的一瞬间,其页面垂直偏移值与页面的滚动高度其实是一致的,所以,用这个进行判断就OK了,但是,如何获得页面上元素距离页面的垂直距离呢?纯粹的js代码获得此值还是比较麻烦的,好在JavaScript库帮我们解决了这些工作,所以,我们的工作其实就很平坦,下面就将展示如何在jQuery库以及MooTools库下实现该效果。

 实现方法:

实现的方法有两种,一种是基于Jquery,一种是MooTools库。

方法一:基于Jquery

 代码如下 复制代码

JavaScript代码
$.fn.smartFloat = function() { 
    var position = function(element) { 
        var top = element.position().top, pos = element.css("position"); 
        $(window).scroll(function() { 
            var scrolls = $(this).scrollTop(); 
            if (scrolls > top) { 
                if (window.XMLHttpRequest) { 
                    element.css({ 
                        position: "fixed", 
                        top: 0 
                    }); 
                } else { 
                    element.css({ 
                        top: scrolls 
                    }); 
                } 
            }else { 
                element.css({ 
                    position: "absolute", 
                    top: top 
                }); 
            } 
        }); 
    }; 
    return $(this).each(function() { 
        position($(this)); 
    }); 
};

调用代码:

 代码如下 复制代码

JavaScript代码
$("#float").smartFloat();

方法二:基于Mootools库

 代码如下 复制代码

JavaScript代码
var $smartFloat = function(elements) { 
    var position = function(element) { 
        var top = element.getPosition().y, pos = element.getStyle("position"); 
        window.addEvent("scroll", function() { 
            var scrolls = this.getScroll().y; 
            if (scrolls > top) { 
                if (window.XMLHttpRequest) { 
                    element.setStyles({ 
                        position: "fixed", 
                        top: 0 
                    }); 
                } else { 
                    element.setStyles({ 
                        top: scrolls 
                    }); 
                } 
            }else { 
                element.setStyles({ 
                    position: "absolute", 
                    top: top 
                }); 
            } 
        }); 
    }; 
    if ($type(elements) === "array") { 
        return elements.each(function(items) { 
            position(items); 
        }); 
    } else if ($type(elements) === "element") { 
        position(elements); 
    } 
};

调用代码:

JavaScript代码

 代码如下 复制代码
$smartFloat($("float"));
时间: 2025-01-29 14:25:53

jquery 智能浮动层定位解决方法的相关文章

关于flash遮盖div浮动层的解决方法_javascript技巧

网上的解决方案: From:http://codingforums.com/showthread.php?t=95109 (a) place Flash embed script in <div> container (I use SWFObject.js)[将flash嵌入脚本放到一个div容器中] (b) add wmode=transparent to Flash embed script[增加wmode=transparent 到flash嵌入脚本] (c) set <div i

jQuery实现浮动层随浏览器滚动条滚动的方法_jquery

本文实例讲述了jQuery实现浮动层随浏览器滚动条滚动的方法.分享给大家供大家参考.具体如下: 这是jQuery实现的一个浮动层效果,随浏览器滚动条而滚动,并一直保持在顶部位置,请使用火狐测试,IE下表现不尽理想. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/jquery-float-follow-nav-style-codes/ 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0

js实现从右向左缓缓浮出网页浮动层广告的方法

  这篇文章主要介绍了js实现从右向左缓缓浮出网页浮动层广告的方法,可实现右侧浮动广告的定时弹出及点击展开.折叠等功能,非常具有实用价值,需要的朋友可以参考下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59

messagebox相对于div层居中解决方法

messagebox相对于div层居中解决方法 public void wndprocret(object sender, wndprocreteventargs e)         { switch (e.cw.message)             {                 case wndmessage.wm_initdialog:                 case wndmessage.wm_unknowinit:                     user3

flash 挡住层的解决方法_相关技巧

出现问题: 1. 使用层制作的下拉菜单下正好有FLASH动画,菜单被动画遮挡. 2. 页面中的层浮动广告当经过FLASH动画时,浮动层从动画画穿过,实际显示被遮挡. 解决方法: 按如下任一方法设置设置FLASH对象的属性 <param name="wmode" value="transparent"> FLASH将透明 <param name="wmode" value="Opaque"> FLASH仍

技巧:div+css设计网页时浮动问题的解决方法

css|浮动|技巧|解决|设计|网页|问题 前我最常用的方法有两种: 方法一: 使用块级clear,即声明一个块的类属性为.clear {clear:both;} 方法二: 使用内联元素清理,比如说在主浮动内容后跟一个内联元素. .inlineclear {clear:both;}<span class="inlineclear"></span> 方法三:使用双层div嵌套 #pubpage {display:block;clear:both;}#main {d

DIV CSS制作网页时浮动问题的解决方法

css|浮动|解决|网页|问题 前最常用的方法有两种︰ 方法一.使用块级clear,即声明一个块的类属性为 .clear {clear:both;} 方法二.使用内联元素清理,比如说在主浮动内容后跟一个内联元素. .inlineclear {clear:both;}<span class="inlineclear"></span> 方法三,使用双层div巢状 #pubpage {display:block;clear:both;}#main {display:b

jquery live()重复绑定的解决方法介绍

 本篇文章主要是对jquery中live()重复绑定的解决方法进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助 Query中.live()方法的使用方法    今天在写代码的时候遇到一个问题,直接上代码看: $(function(){            $(".file").live("click",function(){                     var task_name=$(this).text();            

float引起层飘出父层的解决方法_经验交流

1.加clear空div .clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden;} .clearfix {display: inline-block;} /* Hides from IE-mac \*/ * html .clearfix {height: 1%;} .clearfix {display: block;}/* End hide from IE-m