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 相关文章推荐
JS操作图片(增,删,改) 例子
Apr 17 Javascript
javascript中不提供sleep功能如何实现这个功能
May 27 Javascript
Bootstrap每天必学之按钮(一)
Nov 24 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
Jun 16 Javascript
flag和jq on 的绑定多个对象和方法(必看)
Feb 27 Javascript
微信小程序实战之登录页面制作(5)
Mar 30 Javascript
JS库 Highlightjs 添加代码行号的实现代码
Sep 13 Javascript
Node调用Java的示例代码
Sep 20 Javascript
不使用 JS 匿名函数理由
Nov 17 Javascript
微信小程序使用Promise简化回调
Feb 06 Javascript
vue实现百度搜索功能
Dec 28 Javascript
基于node+vue实现简单的WebSocket聊天功能
Feb 01 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
利用PHP+JS实现搜索自动提示(实例)
2013/06/09 PHP
浅析php中jsonp的跨域实例
2013/06/21 PHP
PHP机器学习库php-ml的简单测试和使用方法
2017/07/14 PHP
php-fpm服务启动脚本的方法
2018/04/27 PHP
ext监听事件方法[初级篇]
2008/04/27 Javascript
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
2011/03/05 Javascript
基于jQuery的弹出框插件
2012/03/18 Javascript
JS分页效果示例
2013/10/11 Javascript
JavaScript获取浏览器信息的方法
2015/11/20 Javascript
JavaScript实现点击单元格改变背景色的方法
2016/02/12 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
2016/10/27 Javascript
js模式化窗口问题![window.dialogArguments]
2016/10/30 Javascript
jQuery Easyui加载表格出错时在表格中间显示自定义的提示内容
2016/12/08 Javascript
JavaScript中的toString()和toLocaleString()方法的区别
2017/02/15 Javascript
JavaScript中的this陷阱的最全收集并整理(没有之一)
2017/02/21 Javascript
js实现三级联动效果(简单易懂)
2017/03/27 Javascript
详解nuxt sass全局变量(公共scss解决方案)
2018/06/27 Javascript
js canvas画布实现高斯模糊效果
2018/11/27 Javascript
微信小程序实现手势滑动卡片效果
2019/08/26 Javascript
nuxt+axios实现打包后动态修改请求地址的方法
2020/04/22 Javascript
[03:36]2014DOTA2 TI小组赛综述 八强诞生进军钥匙球馆
2014/07/15 DOTA
Python中删除文件的程序代码
2011/03/13 Python
Python扫描IP段查看指定端口是否开放的方法
2015/06/09 Python
解决Python pandas df 写入excel 出现的问题
2018/07/04 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
Python中最好用的命令行参数解析工具(argparse)
2019/08/23 Python
python return逻辑判断表达式实现解析
2019/12/02 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
Lookfantastic德国官网:英国知名美妆购物网站
2017/06/11 全球购物
美国羊皮公司:Overland
2018/01/15 全球购物
考试作弊检讨书1000字(5篇)
2014/10/19 职场文书
放假通知格式
2015/04/14 职场文书
人民的好儿女观后感
2015/06/18 职场文书
财务年终工作总结大全
2019/06/20 职场文书
JS实现简单控制视频播放倍速的实例代码
2021/04/18 Javascript
bootstrapv4轮播图去除两侧阴影及线框的方法
2022/02/15 HTML / CSS