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 CSS修改学习第一章 查找位置
Feb 19 Javascript
javascript用户注册提示效果的简单实例
Aug 17 Javascript
使用js操作css实现js改变背景图片示例
Mar 10 Javascript
js对字符的验证方法汇总
Feb 04 Javascript
angular2使用简单介绍
Mar 01 Javascript
js 自带的 map() 方法全面了解
Aug 16 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
Dec 08 Javascript
AngularJS中$http的交互问题
Mar 29 Javascript
原生js实现淘宝放大镜效果
Oct 28 Javascript
js序列化和反序列化的使用讲解
Jan 19 Javascript
ElementUI 修改默认样式的几种办法(小结)
Jul 29 Javascript
在HTML中使用JavaScript的两种方法
Dec 24 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颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
2013/09/23 PHP
PHP读取汉字的点阵数据
2015/06/22 PHP
php实现微信扫码支付
2017/03/26 PHP
jQuery :nth-child前有无空格的区别分析
2011/07/11 Javascript
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
js的.innerHTML = &quot;&quot;IE9下显示有错误的解决方法
2013/09/16 Javascript
node.js集成百度UE编辑器
2015/02/05 Javascript
Angular设置title信息解决SEO方面存在问题
2016/08/19 Javascript
jQuery弹出窗口打开链接的实现代码
2016/12/24 Javascript
Vue数据驱动模拟实现2
2017/01/11 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
2017/03/05 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
2017/12/21 Javascript
vue webpack打包优化操作技巧
2018/02/22 Javascript
Javascript实现异步编程的过程
2018/06/18 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
2018/09/02 Javascript
前端js中的事件循环eventloop机制详解
2019/05/15 Javascript
python二叉树的实现实例
2013/11/21 Python
python解析xml文件实例分析
2015/05/27 Python
高效测试用例组织算法pairwise之Python实现方法
2017/07/19 Python
Python实现列表删除重复元素的三种常用方法分析
2017/11/24 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
python购物车程序简单代码
2018/04/18 Python
python验证码识别教程之滑动验证码
2018/06/04 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
python列表的逆序遍历实现
2020/04/20 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
美国新兴城市生活方式零售商:VILLA
2017/12/06 全球购物
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
班长岗位职责
2013/11/10 职场文书
教师校本培训方案
2014/02/26 职场文书
高中家长寄语
2014/04/02 职场文书
大学毕业论文致谢词
2015/05/14 职场文书
2016应届大学生自荐信模板
2016/01/28 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书
聊聊golang中多个defer的执行顺序
2021/05/08 Golang
关于CSS自定义属性与前端页面的主题切换问题
2022/03/21 HTML / CSS