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 相关文章推荐
JavaScript将数组转换成CSV格式的方法
Mar 19 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
Apr 29 Javascript
深入理解JavaScript函数参数(推荐)
Jul 26 Javascript
AngularJS页面带参跳转及参数解析操作示例
Jun 28 Javascript
浅谈ES6新增的数组方法和对象
Aug 08 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
Sep 05 Javascript
angularjs实现天气预报功能
Jun 16 Javascript
BootStrap中的模态框(modal,弹出层)功能示例代码
Nov 02 Javascript
从源码里了解vue中的nextTick的使用
Nov 22 Javascript
详解vue项目打包步骤
Mar 29 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
May 21 Javascript
微信小程序实现签到弹窗动画
Sep 21 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
php访问查询mysql数据的三种方法
2006/10/09 PHP
php 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
php set_time_limit()函数的使用详解
2013/06/05 PHP
PHP实现的数组和XML文件相互转换功能示例
2018/03/15 PHP
原生php实现excel文件读写的方法分析
2018/04/25 PHP
window.open不被拦截的实现代码
2012/08/22 Javascript
javascript中expression的用法整理
2014/05/13 Javascript
简洁实用的BootStrap jQuery手风琴插件
2016/08/31 Javascript
Boostrap基础教程之JavaScript插件篇
2016/09/08 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
Angular实现较为复杂的表格过滤,删除功能示例
2017/12/23 Javascript
JS实现的简单下拉框联动功能示例
2018/05/11 Javascript
js设计模式之单例模式原理与用法详解
2019/08/15 Javascript
jQuery使用jsonp实现百度搜索的示例代码
2020/07/08 jQuery
vue 组件简介
2020/07/31 Javascript
[03:49]显微镜下的DOTA2第十五期—VG登基之路完美团
2014/06/24 DOTA
python中Genarator函数用法分析
2015/04/08 Python
python列表的增删改查实例代码
2018/01/30 Python
Windows下Python3.6安装第三方模块的方法
2018/11/22 Python
Apache部署Django项目图文详解
2019/07/30 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
Matplotlib 折线图plot()所有用法详解
2020/07/28 Python
Python 远程开关机的方法
2020/11/18 Python
HTML5自定义视频播放器源码
2020/01/06 HTML / CSS
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
Sunglasses Shop荷兰站:英国最大的太阳镜独立在线零售商和供应商
2017/01/08 全球购物
本科毕业生求职自荐信
2014/02/03 职场文书
违反工作纪律检讨书
2014/02/15 职场文书
关于青春的演讲稿
2014/05/05 职场文书
法院授权委托书范文
2014/08/02 职场文书
淘宝好评语句大全
2014/12/31 职场文书
安全承诺书
2015/01/19 职场文书
2015年全国爱眼日活动小结
2015/02/27 职场文书
风雨哈佛路观后感
2015/06/03 职场文书
2016学雷锋优秀志愿者事迹材料
2016/02/25 职场文书