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的$.getJSON做一个跨域ajax请求试验
May 03 Javascript
jquery预览图片实现鼠标放上去显示实际大小
Jan 16 Javascript
javascript实现点击商品列表checkbox实时统计金额的方法
May 15 Javascript
详解webpack运行Babel教程
Jun 13 Javascript
微信小程序使用template标签实现五星评分功能
Nov 03 Javascript
JavaScript 九种跨域方式实现原理
Feb 11 Javascript
微信小程序地图导航功能实现完整源代码附效果图(推荐)
Apr 28 Javascript
layui实现数据分页功能
Jul 27 Javascript
JS Generator 函数的含义与用法实例总结
Apr 08 Javascript
vue-router重写push方法,解决相同路径跳转报错问题
Aug 07 Javascript
vue路由结构可设一层方便动态添加路由操作
Aug 31 Javascript
利用vue3+ts实现管理后台(增删改查)
Oct 30 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 过滤危险html代码
2009/06/29 PHP
PHP 类商品秒杀计时实现代码
2010/05/05 PHP
浅析php过滤html字符串,防止SQL注入的方法
2013/07/02 PHP
php时区转换转换函数
2014/01/07 PHP
javascript 对象的定义方法
2007/01/10 Javascript
JavaScript 面向对象的之私有成员和公开成员
2010/05/04 Javascript
Javascript 类型转换方法
2010/10/24 Javascript
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
2013/01/23 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
2015/03/12 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
JavaScript实现横向滑出的多级菜单效果
2015/10/09 Javascript
一波JavaScript日期判断脚本分享
2016/03/06 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
js将字符串中的每一个单词的首字母变为大写其余均为小写
2017/01/05 Javascript
详解Vue CLI3 多页应用实践和源码设计
2018/08/30 Javascript
Vuex 单状态库与多模块状态库详解
2018/12/11 Javascript
js获取浏览器地址(获取第1个斜杠后的内容)
2019/09/03 Javascript
JS常用排序方法实例代码解析
2020/03/03 Javascript
JQuery插件tablesorter表格排序实现过程解析
2020/05/28 jQuery
Vue实现导航栏菜单
2020/08/19 Javascript
一起来了解一下JavaScript的预编译(小结)
2021/03/01 Javascript
haskell实现多线程服务器实例代码
2013/11/26 Python
Python解析json文件相关知识学习
2016/03/01 Python
Python爬虫学习之翻译小程序
2019/07/30 Python
Python中模块(Module)和包(Package)的区别详解
2019/08/07 Python
Django 拆分model和view的实现方法
2019/08/16 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
2020/08/27 Python
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
美国最大的团购网站:Groupon
2016/07/23 全球购物
销售找工作求职信
2013/12/20 职场文书
村级换届选举方案
2014/05/10 职场文书
铁路安全反思材料
2014/12/24 职场文书
年度考核登记表个人总结
2015/03/06 职场文书
ipad隐藏软件app图标方法
2022/04/19 数码科技