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 相关文章推荐
B/S开发中常用javaScript技术与代码
Mar 09 Javascript
Extjs学习笔记之一 初识Extjs之MessageBox
Jan 07 Javascript
基于jQuery的树控件实现代码(asp.net+json)
Jul 11 Javascript
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
Feb 23 Javascript
javascript测试题练习代码
Oct 10 Javascript
JS格式化数字保留两位小数点示例代码
Oct 15 Javascript
javascript与有限状态机详解
May 08 Javascript
jQuery中on()方法用法实例详解
Feb 06 Javascript
javascript实现input file上传图片预览效果
Dec 31 Javascript
jquery拼接ajax 的json和字符串拼接的方法
Mar 11 Javascript
WebStorm ES6 语法支持设置&amp;babel使用及自动编译(详解)
Sep 08 Javascript
react-native-fs实现文件下载、文本存储的示例代码
Sep 22 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源码之explode使用说明
2011/08/05 PHP
PHP实现文件下载【实例分享】
2017/04/28 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
php数值计算num类简单操作示例
2020/05/15 PHP
兼容FireFox 的 js 日历 支持时间的获取
2009/03/04 Javascript
js 表格隔行颜色
2009/12/02 Javascript
3款实用的在线JS代码工具(国外)
2012/03/15 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
关于js中for in的缺陷浅析
2013/12/02 Javascript
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
js鼠标悬浮出现遮罩层的方法
2015/01/28 Javascript
浅谈Javascript的静态属性和原型属性
2015/05/07 Javascript
JavaScript禁止复制与粘贴的实现代码
2016/05/16 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
js替换字符串中所有指定的字符(实现代码)
2016/08/17 Javascript
jQuery联动日历的实例解析
2016/12/02 Javascript
js实现功能比较全面的全选和多选
2017/03/02 Javascript
gulp安装以及打包合并的方法教程
2017/11/19 Javascript
vue组件发布到npm简单步骤
2017/11/30 Javascript
vue.js获得当前元素的文字信息方法
2018/03/09 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
python使用xlsxwriter实现有向无环图到Excel的转换
2018/12/12 Python
selenium处理元素定位点击无效问题
2019/06/12 Python
这可能是最好玩的python GUI入门实例(推荐)
2019/07/19 Python
python文件处理fileinput使用方法详解
2020/01/02 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
HTML5之SVG 2D入门6—视窗坐标系与用户坐标系及变换概述
2013/01/30 HTML / CSS
浅谈利用缓存来优化HTML5 Canvas程序的性能
2015/05/12 HTML / CSS
html5录音功能实战示例
2019/03/25 HTML / CSS
中专毕业生求职简历的自我评价
2013/10/21 职场文书
大宝sod蜜广告词
2014/03/21 职场文书
无传销社区工作方案
2014/05/13 职场文书
防火标语大全
2014/10/06 职场文书
2014年房产销售工作总结
2014/12/08 职场文书
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
2021/04/01 PHP
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang