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 相关文章推荐
利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
Mar 24 Javascript
js 判断 enter 事件
Feb 12 Javascript
javaScript让文本框内的最后一个文字的后面获得焦点实现代码
Jan 06 Javascript
JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
Dec 14 Javascript
你所不了解的javascript操作DOM的细节知识点(一)
Jun 17 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
Jul 20 Javascript
使用Angular.js开发的注意事项
Oct 19 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
Feb 22 Javascript
Nuxt升级2.0.0时出现的问题(小结)
Oct 08 Javascript
详解Vue一个案例引发「内容分发slot」的最全总结
Dec 02 Javascript
js回调函数仿360开机
Dec 26 Javascript
node.js中fs文件系统模块的使用方法实例详解
Feb 13 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
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
PHP批量生成静态HTML的简单原理和方法
2014/04/20 PHP
PHP7.0安装笔记整理
2015/08/28 PHP
PHP flush 函数使用注意事项
2016/08/26 PHP
php的单例模式及应用场景详解
2021/02/27 PHP
用jscript实现列出安装的软件列表
2007/06/18 Javascript
IE不支持getElementsByClassName最终完美解决方案
2012/12/17 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
jQuery异步上传文件插件ajaxFileUpload详细介绍
2015/05/19 Javascript
jQuery插件实现静态HTML验证码校验
2015/11/06 Javascript
一个超简单的jQuery回调函数例子(分享)
2016/08/08 Javascript
Vue 多层组件嵌套二种实现方式(测试实例)
2017/09/08 Javascript
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
为jquery的ajax请求添加超时timeout时间的操作方法
2018/09/04 jQuery
Python 随机生成中文验证码的实例代码
2013/03/20 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
Python使用字典的嵌套功能详解
2019/02/27 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
基于python3监控服务器状态进行邮件报警
2019/10/19 Python
Django 自定义分页器的实现代码
2019/11/24 Python
浅谈Python访问MySQL的正确姿势
2020/01/07 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
2020/02/19 Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
2020/04/08 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线
2015/01/01 HTML / CSS
苹果Mac升级:MacSales.com
2017/11/20 全球购物
美国在线肉类和海鲜配送:Crowd Cow
2020/10/02 全球购物
儿科护士实习自我鉴定
2013/10/17 职场文书
医科学校毕业生自荐信
2013/11/09 职场文书
秋季运动会广播稿
2014/02/22 职场文书
同事打架检讨书
2015/05/06 职场文书
教你用python实现一个无界面的小型图书管理系统
2021/05/21 Python
详解PHP服务器如何在有限的资源里最大提升并发能力
2021/05/25 PHP
golang特有程序结构入门教程
2021/06/02 Python
vue项目中的支付功能实现(微信支付和支付宝支付)
2022/02/18 Vue.js