zoukankan      html  css  js  c++  java
  • 让文档某一块区域 智能浮动

      这个插件原理非常简单,只需要获得两个分界点:startHeight和maxHeight,当窗口滚动到startHeight的时候,设定元素的position:fixed,top:0,当窗口滚动到maxHeight的时候,设定元素的position:absolute,top:maxHeight,这样就可以达到这个效果:当窗口滚动到startHeight的时候,元素会被固定在整个窗口的顶部,不会跟随窗口的滚动而滚动,当窗口滚动到maxHeight的时候,元素就会被固定在当前相对于整个文档的位置,重新跟随窗口滚动而滚动。

      需要注意的是,一般插件都是在文档加载完之后调用一次,这样当页面文档结构发生变化,且页面没有重新载入的情况下,startHeight和maxHeight的值都不会被重新计算,这样浮动的起始就会和新的结构不相符,看起来很别扭。为了解决这个问题,在更改页面之后,一定要记得重新调用一次这个插件!

    $.fn.smartFloat = function (options) {
    
        var ele = $(this);
    
        var eleHeight = ele.outerHeight(true);
    
    
        var defaults = {
            startHeight: ele.parent().offset().top,//最好元素外面包含一个父节点,父节点的offset要和此元素一致,不要有padding,以防页面无刷新结构变化且元素已经出于fixed状态,获取初始高度不准确的情况
            maxHeight: $("#footer").offset().top - 25 - eleHeight//最大浮动的值,超过此值之后,元素定位改变成absolute,跟随scroll滚动而滚动
        };
    
        var opts = $.extend({},defaults, options);
    
    
        var position = function (element) {
            
    
            $(window).scroll(function () {
                var scrolls = $(this).scrollTop();
                if (scrolls > opts.startHeight && scrolls < opts.maxHeight) {
                    if (window.XMLHttpRequest) {
                        element.css({
                            position: "fixed",
                            top: 0
                        });
                    } else {
                        element.css({
                            top: scrolls
                        });
                    }
                } else if (scrolls > opts.maxHeight) {
                    element.css({
                        position: "absolute",
                        top: opts.maxHeight - opts.startHeight
                });
                } else {
                    element.css({
                        position: "static",
                        top: 0
                    });
                }
            });
        };
        return $(this).each(function () {
            position($(this));
        });
    };

     演示效果

  • 相关阅读:
    虚拟化碎片知识
    CentOS升级内核及KVM安装(已试验,可行)
    Libvirt 虚拟化库剖析
    [ACM]Max Sum
    [ACM]n a^o7 !
    [java]ActionEvent事件:获取输入字符串的长度
    [ACM]The Best Seat in ACM Contest
    [java]ItemEvent事件:简单计算器
    通过注册表的句柄得到当前句柄在注册表中的路径
    [测试模式]Setup方法的滥用
  • 原文地址:https://www.cnblogs.com/mulianju/p/3501719.html
Copyright © 2011-2022 走看看