zoukankan      html  css  js  c++  java
  • jQuery scrollFix滚动定位插件

    【插件功能】

    当用户向上或向下滚动页面到一定位置时,目标元素开始固定定位(position:fixed),当回滚到原位置时目标元素恢复到原状态,可以定制触发滚动相对屏幕位置和触发滚动方向,兼容IE6

    【插件参数】

    $(".target_element").scrollFix( [ "top" | "bottom" | length(可以为负,表示相对bottom), [ "top" | "bottom" ] ]);

    第一个参数: 可选,默认为"top",当目标元素到了屏幕相对的位置时开始触发固定,可以填一个数值,如100,-200 ,负值表示相对于屏幕下方

    第一个参数: 可选,默认为"top",表示触发固定的滚动方向,"top"表示从上向下滚动时触发,"bottom"表示从下向上滚动时触发

    【下载插件】

    下载插件(download)

    【代码示例】

    $("#a").scrollFix(-200);
    滚动到距离下面200px时开始固定,默认从上到下触发
     
    $("#b").scrollFix(200,"bottom");
    滚动到距离上面200px时开始固定,指定"bottom"从下到上触发
     
    $("#c").scrollFix("top","top");
    滚动到距离上面0时开始固定,指定"top"从上到下触发
     
    $("#d").scrollFix("bottom","top");
    滚动到距离下面0时开始固定,指定"bottom"从下到上触发
     
     
    复制代码
    ;(function($) {
      jQuery.fn.scrollFix = function(height, dir) {
        height = height || 0;
        height = height == "top" ? 0 : height;
        return this.each(function() {
          if (height == "bottom") {
            height = document.documentElement.clientHeight - this.scrollHeight;
          } else if (height < 0) {
            height = document.documentElement.clientHeight - this.scrollHeight + height;
          }
          var that = $(this),
            oldHeight = false,
            p, r, l = that.offset().left;
          dir = dir == "bottom" ? dir : "top"; //默认滚动方向向下
          if (window.XMLHttpRequest) { //非ie6用fixed
    
    
            function getHeight() { //>=0表示上面的滚动高度大于等于目标高度
              return (document.documentElement.scrollTop || document.body.scrollTop) + height - that.offset().top;
            }
            $(window).scroll(function() {
              if (oldHeight === false) {
                if ((getHeight() >= 0 && dir == "top") || (getHeight() <= 0 && dir == "bottom")) {
                  oldHeight = that.offset().top - height;
                  that.css({
                    position: "fixed",
                    top: height,
                    left: l
                  });
                }
              } else {
                if (dir == "top" && (document.documentElement.scrollTop || document.body.scrollTop) < oldHeight) {
                  that.css({
                    position: "static"
                  });
                  oldHeight = false;
                } else if (dir == "bottom" && (document.documentElement.scrollTop || document.body.scrollTop) > oldHeight) {
                  that.css({
                    position: "static"
                  });
                  oldHeight = false;
                }
              }
            });
          } else { //for ie6
            $(window).scroll(function() {
              if (oldHeight === false) { //恢复前只执行一次,减少reflow
                if ((getHeight() >= 0 && dir == "top") || (getHeight() <= 0 && dir == "bottom")) {
                  oldHeight = that.offset().top - height;
                  r = document.createElement("span");
                  p = that[0].parentNode;
                  p.replaceChild(r, that[0]);
                  document.body.appendChild(that[0]);
                  that[0].style.position = "absolute";
                }
              } else if ((dir == "top" && (document.documentElement.scrollTop || document.body.scrollTop) < oldHeight) || (dir == "bottom" && (document.documentElement.scrollTop || document.body.scrollTop) > oldHeight)) { //结束
                that[0].style.position = "static";
                p.replaceChild(that[0], r);
                r = null;
                oldHeight = false;
              } else { //滚动
                that.css({
                  left: l,
                  top: height + document.documentElement.scrollTop
                })
              }
            });
          }
        });
      };
    })(jQuery);
    复制代码

    原文地址:https://www.cnblogs.com/Hodor/archive/2012/07/25/2607831.html

  • 相关阅读:
    POJ 1811 Prime Test 素性测试 分解素因子
    sysbench的安装与使用
    电脑中已有VS2005和VS2010安装.NET3.5失败的解决方案
    I.MX6 show battery states in commandLine
    RPi 2B Raspbian system install
    I.MX6 bq27441 driver porting
    I.MX6 隐藏电池图标
    I.MX6 Power off register hacking
    I.MX6 Goodix GT9xx touchscreen driver porting
    busybox filesystem httpd php-5.5.31 sqlite3 webserver
  • 原文地址:https://www.cnblogs.com/hedianzhan/p/8459911.html
Copyright © 2011-2022 走看看