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 相关文章推荐
ie与ff下的event事件使用介绍
Nov 25 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
Oct 17 Javascript
jQuery中attr()方法用法实例
Jan 05 Javascript
javascript面向对象之对象的深入理解
Jan 13 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
Jan 26 Javascript
关于react中组件通信的几种方式详解
Dec 10 Javascript
详解如何在vue项目中引入elementUI组件
Feb 11 Javascript
Angular设置别名alias的方法
Nov 08 Javascript
JQuery搜索框自动补全(模糊匹配)功能实现示例
Jan 08 jQuery
使用vue-cli脚手架工具搭建vue-webpack项目
Jan 14 Javascript
微信小程序实现搜索指定景点周边美食、酒店
May 18 Javascript
Vue.js 中的实用工具方法【推荐】
Jul 04 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
全国FM电台频率大全 - 18 湖南省
2020/03/11 无线电
ThinkPHP独立分组使用的注意事项
2014/11/25 PHP
详解PHP中的null合并运算符
2015/12/30 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
laravel-admin 中列表筛选方法
2019/10/03 PHP
农历与西历对照
2006/09/06 Javascript
兼容多浏览器的iframe自适应高度(ie8 、谷歌浏览器4.0和 firefox3.5.3)
2009/11/04 Javascript
js图片向右一张张滚动效果实例代码
2013/11/23 Javascript
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
js实现图片拖动改变顺序附图
2014/05/13 Javascript
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
js给selected添加options的方法
2015/05/06 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
2015/09/26 Javascript
jQuery leonaScroll 1.1 自定义滚动条插件(推荐)
2016/09/17 Javascript
微信小程序 富文本转文本实例详解
2016/10/24 Javascript
Vuepress 搭建带评论功能的静态博客的实现
2019/02/17 Javascript
JavaScript图像放大镜效果实现方法详解
2020/06/28 Javascript
[04:19]DOTA2完美大师赛第四天精彩集锦
2017/11/26 DOTA
[48:35]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 TNC vs Optic
2018/04/03 DOTA
Python修改Excel数据的实例代码
2013/11/01 Python
朴素贝叶斯算法的python实现方法
2014/11/18 Python
使用Python生成url短链接的方法
2015/05/04 Python
Python检测网站链接是否已存在
2016/04/07 Python
pandas.DataFrame 根据条件新建列并赋值的方法
2018/04/08 Python
详解Python with/as使用说明
2018/12/13 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
美国转售二手商品的电子商务平台:BLINQ
2018/12/13 全球购物
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
重写子类方法时,抛出异常的书写注意事项
2015/10/17 面试题
信息科学与技术专业求职信范文
2014/02/20 职场文书
《白鹅》教学反思
2014/04/13 职场文书
竞争与合作演讲稿
2014/05/12 职场文书
大型会议策划方案
2014/05/17 职场文书
机械电子工程专业自荐书
2014/06/10 职场文书
学生夜不归宿检讨书
2014/09/23 职场文书
《火纹风花雪月无双》预告“神秘雇佣兵” 紫发剑客
2022/04/13 其他游戏