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的cookie插件实现保存用户登陆信息
Apr 15 Javascript
js实现按钮控制图片360度翻转特效的方法
Feb 17 Javascript
基于JavaScript实现移动端TAB触屏切换效果
Oct 20 Javascript
使用node+vue.js实现SPA应用
Jan 28 Javascript
javascript每日必学之条件分支
Feb 17 Javascript
详解Html a标签中href和onclick用法、区别、优先级别
Jan 16 Javascript
微信小程序 Toast自定义实例详解
Jan 20 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
May 10 Javascript
JS实现图片预加载之无序预加载功能代码
May 12 Javascript
详解Vue.js项目API、Router配置拆分实践
Mar 16 Javascript
vue中tab选项卡的实现思路
Nov 25 Javascript
浅析Vue中拆分视图层代码的5点建议
Aug 15 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
NT IIS下用ODBC连接数据库
2006/10/09 PHP
adodb与adodb_lite之比较
2006/12/31 PHP
一道关于php变量引用的面试题
2010/08/08 PHP
3款值得推荐的微信开发开源框架
2014/10/28 PHP
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
2014/11/29 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
2015/06/06 PHP
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
js将long日期格式转换为标准日期格式实现思路
2013/04/07 Javascript
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
javascript父子页面通讯实例详解
2015/07/17 Javascript
jQuery中队列queue()函数的实例教程
2016/05/03 Javascript
微信小程序-图片、录音、音频播放、音乐播放、视频、文件代码实例
2016/11/22 Javascript
深入理解React中何时使用箭头函数
2017/08/23 Javascript
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
ES6基础之展开语法(Spread syntax)
2019/02/21 Javascript
详解Vue 项目中的几个实用组件(ts)
2019/10/29 Javascript
如何正确理解vue中的key详解
2019/11/02 Javascript
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
[03:57]《不朽》——2015DOTA2国际邀请赛—中国军团出征主题曲MV
2015/07/15 DOTA
跟老齐学Python之关于类的初步认识
2014/10/11 Python
Bottle框架中的装饰器类和描述符应用详解
2017/10/28 Python
使用python爬虫获取黄金价格的核心代码
2018/06/13 Python
解决Python pandas plot输出图形中显示中文乱码问题
2018/12/12 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
Python HTMLTestRunner如何下载生成报告
2020/09/04 Python
吉列剃须刀美国官网:Gillette美国
2018/07/13 全球购物
Dower & Hall官网:英国小众轻奢珠宝品牌
2019/01/31 全球购物
美国在线和移动免费会员制批发零售商:Boxed(移动端的Costco)
2020/01/02 全球购物
管理学专业个人求职信范文
2013/09/21 职场文书
临床护士自荐信
2014/01/31 职场文书
社区党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2014年反洗钱工作总结
2014/11/22 职场文书
2015年小学实验室工作总结
2015/07/28 职场文书
HTML中的表单Form实现居中效果
2021/05/25 HTML / CSS
MySQL系列之六 用户与授权
2021/07/02 MySQL
Java中的随机数Random
2022/03/17 Java/Android