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打印iframe内容示例代码
Aug 20 Javascript
js取值中form.all和不加all的区别介绍
Jan 20 Javascript
JavaScript通过join函数连接数组里所有元素的方法
Mar 20 Javascript
jquery实现选中单选按钮下拉伸缩效果
Aug 06 Javascript
jQuery实现的自适应焦点图效果完整实例
Aug 24 Javascript
AngularJS封装$http.post()实例详解
May 06 Javascript
获取当前按钮或者html的ID名称实例(推荐)
Jun 23 Javascript
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
Jan 25 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
Jan 15 Javascript
jquery 验证用户名是否重复代码实例
May 14 jQuery
mpvue实现小程序签到金币掉落动画(api实现)
Oct 17 Javascript
jquery插件实现悬浮的菜单
Apr 24 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
缅甸的咖啡简史
2021/03/04 咖啡文化
解析CI的AJAX分页 另类实现方法
2013/06/27 PHP
php将mysql数据库整库导出生成sql文件的具体实现
2014/01/08 PHP
PHP处理JSON字符串key缺少双引号的解决方法
2014/09/16 PHP
thinkPHP交易详情查询功能详解
2016/12/02 PHP
xss文件页面内容读取(解决)
2010/11/28 Javascript
学习面向对象之面向对象的基本概念:对象和其他基本要素
2010/11/30 Javascript
学习面向对象之面向对象的术语
2010/11/30 Javascript
Jquery给基本控件的取值、赋值示例
2014/05/23 Javascript
js数组的基本操作(很全自己整理的)
2014/10/16 Javascript
javascript字符串与数组转换汇总
2015/05/26 Javascript
jQuery qrcode生成二维码的方法
2016/04/03 Javascript
基于Bootstrap重置输入框内容按钮插件
2016/05/12 Javascript
JS使用eval()动态创建变量的方法
2016/06/03 Javascript
jQuery中$.grep() 过滤函数 数组过滤
2016/11/22 Javascript
浅谈 Vue 项目优化的方法
2017/12/16 Javascript
JavaScript如何实现监听键盘输入和鼠标监点击
2020/07/20 Javascript
[01:20:05]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第二场 2月5日
2021/03/11 DOTA
Python函数式编程指南(一):函数式编程概述
2015/06/24 Python
在Python中通过threading模块定义和调用线程的方法
2016/07/12 Python
python微信公众号之关注公众号自动回复
2018/10/25 Python
python lxml中etree的简单应用
2019/05/10 Python
Python3 合并二叉树的实现
2019/09/30 Python
Python计算公交发车时间的完整代码
2020/02/12 Python
python中shell执行知识点
2020/05/06 Python
Java多线程实现四种方式原理详解
2020/06/02 Python
Python字符串split及rsplit方法原理详解
2020/06/29 Python
廉价航班、机票和酒店:JustFly
2018/02/07 全球购物
香港网上花店:FlowerAdvisor香港
2019/05/30 全球购物
超市营业员求职简历的自我评价
2013/10/17 职场文书
迎接领导欢迎词
2014/01/11 职场文书
不假外出检讨书
2014/01/27 职场文书
年会搞笑主持词串词
2014/03/24 职场文书
2014社区三八妇女节活动方案
2014/03/30 职场文书
协议书范本
2014/04/23 职场文书
javascript对象3个属性特征
2021/11/17 Javascript