jQuery scrollFix滚动定位插件


Posted in Javascript onApril 01, 2015

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

【插件参数】

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

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

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

【下载插件】scrollFix(3water.com).rar

<script type="text/javascript" src="jquery-1.7.2.min.js"></script>

<script type="text/javascript" src="scrollFix.js"></script>

<p><span style="color: #808000;">【代码示例】</span></p>

<div class="d">

<div class="demo" style="background: #ff6000;">$("#a").scrollFix(-200);

<div>滚动到距离下面200px时开始固定,默认从上到下触发</div>

</div>

 </div>

<div class="d">

<div class="demo" style="background: #82BF00;">$("#b").scrollFix(200,"bottom");

<div>滚动到距离上面200px时开始固定,指定"bottom"从下到上触发</div>

</div>

 </div>

<div class="d">

<div class="demo" style="background: #0C9CAE;">$("#c").scrollFix("top","top");

<div>滚动到距离上面0时开始固定,指定"top"从上到下触发</div>

</div>

 </div>

<div class="d">

<div class="demo" style="background: #478FCE;">$("#d").scrollFix("bottom","top");

<div>滚动到距离下面0时开始固定,指定"bottom"从下到上触发</div>

</div>

</div>

实现代码:
<script type="text/javascript">// <![CDATA[

window.onload=function(){

  $(".demo:eq(0)").scrollFix(-200);

  $(".demo:eq(1)").scrollFix(200,"bottom");

  $(".demo:eq(2)").scrollFix("top","top");

  $(".demo:eq(3)").scrollFix("bottom","bottom");

}

// ]]></script>

核心代码:

;(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);
Javascript 相关文章推荐
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
Nov 10 Javascript
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
Apr 01 Javascript
js仿3366小游戏选字游戏
Apr 14 Javascript
JavaScript程序中的流程控制语句用法总结
May 23 Javascript
基于angularjs实现图片放大镜效果
Aug 31 Javascript
jquery attr()设置和获取属性值实例教程
Sep 25 Javascript
JavaScript基本类型值-Number类型
Feb 24 Javascript
axios发送post请求,提交图片类型表单数据方法
Mar 16 Javascript
深入理解JavaScript的值传递和引用传递
Oct 24 Javascript
使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置
Nov 02 Javascript
vue-resourc发起异步请求的方法
Feb 11 Javascript
在Vue中使用HOC模式的实现
Aug 23 Javascript
JS动态修改iframe高度和宽度的方法
Apr 01 #Javascript
JS获取iframe中longdesc属性的方法
Apr 01 #Javascript
JS获取iframe中marginHeight和marginWidth属性的方法
Apr 01 #Javascript
JS去除iframe滚动条的方法
Apr 01 #Javascript
JS动态修改iframe内嵌网页地址的方法
Apr 01 #Javascript
JS获得图片alt信息的方法
Apr 01 #Javascript
JS实现动态给图片添加边框的方法
Apr 01 #Javascript
You might like
获得Google PR值的PHP代码
2007/01/28 PHP
PHP实现的QQ空间g_tk加密算法
2015/07/09 PHP
php实现生成验证码实例分享
2016/04/10 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
通过判断JavaScript的版本实现执行不同的代码
2010/05/11 Javascript
理解Javascript_14_函数形式参数与arguments
2010/10/20 Javascript
JavaScript九九乘法口诀表的简单实现
2016/10/04 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
2017/09/11 Javascript
vue 子组件向父组件传值方法
2018/02/26 Javascript
11行JS代码制作二维码生成功能
2018/03/09 Javascript
使用RN Animated做一个“添加购物车”动画的方法
2018/09/12 Javascript
详解Node.js读写中文内容文件操作
2018/10/10 Javascript
在小程序中推送模板消息的实现方法
2019/07/22 Javascript
解决LayUI加上form.render()下拉框和单选以及复选框不出来的问题
2019/09/27 Javascript
微信小程序开发之获取用户手机号码(php接口解密)
2020/05/17 Javascript
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
2015/04/25 Python
整理Python 常用string函数(收藏)
2016/05/30 Python
Python使用指定字符长度切分数据示例
2019/12/05 Python
手把手教你进行Python虚拟环境配置教程
2020/02/03 Python
Python中socket网络通信是干嘛的
2020/05/27 Python
Python‘==‘ 及 ‘is‘相关原理解析
2020/09/05 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
2020/10/02 Python
python 实现简易的记事本
2020/11/30 Python
如何用Python徒手写线性回归
2021/01/25 Python
美国网上购买眼镜:Eyeconic
2017/07/29 全球购物
阿玛尼美妆英国官网:Giorgio Armani Beauty英国
2019/03/28 全球购物
会计出纳岗位职责
2013/12/25 职场文书
汽车专业学生自我评价
2014/01/19 职场文书
先进个人获奖感言
2014/01/24 职场文书
学校联谊活动方案
2014/02/15 职场文书
班级口号大全
2014/06/09 职场文书
2015社区精神文明建设工作总结
2015/04/21 职场文书
请客吃饭开场白
2015/06/01 职场文书
前端学习——JavaScript原生实现购物车案例
2021/03/31 Javascript
JavaScript文档对象模型DOM
2021/11/20 Javascript