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 相关文章推荐
基于jQuery的消息提示插件之旅 DivAlert(三)
Apr 01 Javascript
JQuery 学习技巧总结
May 21 Javascript
详解强大的jQuery选择器之基本选择器、层次选择器
Feb 07 Javascript
JavaScript日期时间格式化函数分享
May 05 Javascript
javascript中call和apply的用法示例分析
Apr 02 Javascript
值得分享和收藏的Bootstrap学习教程
May 12 Javascript
Javascript之面向对象--封装
Dec 02 Javascript
使用react render props实现倒计时的示例代码
Dec 06 Javascript
JS简单表单验证功能完整示例
Jan 26 Javascript
antd 表格列宽自适应方法以及错误处理操作
Oct 27 Javascript
react使用antd表单赋值,用于修改弹框的操作
Oct 29 Javascript
vue前端和Django后端如何查询一定时间段内的数据
Feb 28 Vue.js
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
一个捕获函数输出的函数
2007/02/14 PHP
php笔记之:有规律大文件的读取与写入的分析
2013/04/26 PHP
php生成固定长度纯数字编码的方法
2015/07/09 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
jQuery Deferred和Promise创建响应式应用程序详细介绍
2013/03/05 Javascript
jQuery函数的等价原生函数代码示例
2013/05/27 Javascript
JS实现关键字搜索时的相关下拉字段效果
2014/08/05 Javascript
jQuery采用连缀写法实现的折叠菜单效果
2015/09/18 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
jquery动态添加文本并获取值的方法
2016/10/12 Javascript
js实现图片切换(动画版)
2016/12/25 Javascript
详解Vue爬坑之vuex初识
2017/06/14 Javascript
react-native中ListView组件点击跳转的方法示例
2017/09/30 Javascript
JS使用贪心算法解决找零问题示例
2017/11/27 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
2018/09/21 Javascript
JS中async/await实现异步调用的方法
2019/08/28 Javascript
vue中对象数组去重的实现
2020/02/06 Javascript
微信浏览器左上角返回按钮监听的实现
2020/03/04 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
Python实现Logger打印功能的方法详解
2017/09/01 Python
python删除文本中行数标签的方法
2018/05/31 Python
Python 脚本拉取 Docker 镜像问题
2019/11/10 Python
python如何从键盘获取输入实例
2020/06/18 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
Probikekit日本:自行车套件,跑步和铁人三项装备
2017/04/03 全球购物
含精油的天然有机化妆品:Indemne
2019/08/27 全球购物
将时尚融入珠宝:Adornmonde
2019/10/17 全球购物
西班牙最好的在线购买葡萄酒的商店:Vinoseleccion
2019/10/30 全球购物
材料化学应届生求职信
2013/10/09 职场文书
银行会计财务工作个人的自我评价
2013/10/29 职场文书
支教自我鉴定
2014/01/18 职场文书
高中生的自我鉴定范文
2014/01/24 职场文书
幼儿园毕业园长感言
2014/02/24 职场文书
2014年污水处理厂工作总结
2014/12/19 职场文书
教师求职自荐信范文
2015/03/04 职场文书