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 相关文章推荐
设置下载不需要倒计时cookie(倒计时代码)
Nov 19 Javascript
分享10篇优秀的jQuery幻灯片制作教程及应用案例
Apr 16 Javascript
Jquery实现网页跳转或用命令打开指定网页的解决方法
Jul 09 Javascript
Javascript中string转date示例代码
Nov 01 Javascript
jQuery实现移动 和 渐变特效的点击事件
Feb 26 Javascript
原生js页面滚动延迟加载图片
Dec 20 Javascript
从零学习node.js之简易的网络爬虫(四)
Feb 22 Javascript
Vue中使用的EventBus有生命周期
Jul 12 Javascript
jQuery时间戳和日期相互转换操作示例
Dec 07 jQuery
在layui框架中select下拉框监听更改事件的例子
Sep 20 Javascript
layer ui 导入文件之前传入数据的实例
Sep 23 Javascript
jquery实现简单自动轮播图效果
Jul 29 jQuery
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实现递归复制整个文件夹的类实例
2015/08/03 PHP
AJAX PHP无刷新form表单提交的简单实现(推荐)
2016/09/09 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
2016/09/26 PHP
php封装一个异常的处理类
2017/06/08 PHP
Laravel 模型关联基础教程详解
2019/09/17 PHP
JavaScript For Beginners(转载)
2007/01/05 Javascript
JSON 学习之JSON in JavaScript详细使用说明
2010/02/23 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
javascript中使用正则计算中文长度的例子
2014/04/29 Javascript
jQuery+AJAX实现网页无刷新上传
2015/02/22 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
2015/06/25 Javascript
教你如何终止JQUERY的$.AJAX请求
2016/02/23 Javascript
BootStrap整体框架之基础布局组件
2016/12/15 Javascript
javascript 作用于作用域链的详解
2017/09/27 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
JavaScript 有用的代码片段和 trick
2018/02/22 Javascript
ant-design-vue 时间选择器赋值默认时间的操作
2020/10/27 Javascript
[02:33]2014DOTA2 TI每日综述 LGD涉险晋级DK闯入胜者组
2014/07/14 DOTA
Python导出数据到Excel可读取的CSV文件的方法
2015/05/12 Python
Python中几个比较常见的名词解释
2015/07/04 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
2018/06/27 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
python实现实时视频流播放代码实例
2020/01/11 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
基于opencv实现简单画板功能
2020/08/02 Python
Python列表推导式实现代码实例
2020/09/09 Python
Python中的特殊方法以及应用详解
2020/09/20 Python
详解CSS 3 中的 calc() 方法
2018/01/12 HTML / CSS
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
营销主管自我评价怎么写
2013/09/19 职场文书
高中体育教学反思
2014/01/29 职场文书
新闻发布会活动策划方案
2014/09/15 职场文书
公司2014年度工作总结
2014/12/10 职场文书
如何做好工作总结!
2019/04/10 职场文书
Python实现生成bmp图像的方法
2021/06/13 Python
python如何读取和存储dict()与.json格式文件
2022/06/25 Python