$(window).scroll(function(){
  var supportPageOffset = window.pageXOffset !== undefined; // 判断是否支持pageXOffset
  var isCSS1Compat = ((document.compatMode || "") === "CSS1Compat"); // 判断渲染模式是不是标准模式
  var y = supportPageOffset ? window.pageYOffset : isCSS1Compat ? document.documentElement.scrollTop : document.body.scrollTop;   if(y==0){
    alert(1);
  }
});

参考原文:

http://www.cnblogs.com/zxjwlh/p/6284330.html

Javascript中与Scroll有关的方法

这块确实太乱了,被兼容搞的简直快要晕死,默默地总结下...

与scroll相关的方法

4个window对象下:scrollX、scrollY、scrollTo、scroll(作用和scrollTo一样)

4个Element对象下:scrollWidth、scrollHeight、scrollLeft、scrollTop

window对象下(BOM)

window.scrollX、window.scrollY

var x = window.scrollX;  // 以像素为单位,返回水平轴上document已经被卷去的宽度   number类型
var y = window.scrollY; // 以像素为单位,返回垂直方向上document被卷曲的高度 number类型

pageYOffset 属性是 scrollY 属性的别名,pageXOffset同理,为了跨浏览器兼容,一般用后者(pageYOffset、pageXOffset)。

另外旧版本(<9)对这两个属性都不支持,应该选用非标准的属性。

兼容性代码如下:(获取页面垂直和水平的滚动距离!)(复杂版)

var supportPageOffset = window.pageXOffset !== undefined;  // 判断是否支持pageXOffset
var isCSS1Compat = ((document.compatMode || "") === "CSS1Compat"); // 判断渲染模式是不是标准模式
/**
* 如果支持pageXOffset,直接用window.pageXOffset. 如不支持,判断渲染模式
* 如果是标准模式,用document.documentElement.scrollLeft,
* 如果是混杂模式,用document.body.scrollTop.
**/
var x = supportPageOffset ? window.pageXOffset : isCSS1Compat ? document.documentElement.scrollLeft : document.body.scrollLeft;
var y = supportPageOffset ? window.pageYOffset : isCSS1Compat ? document.documentElement.scrollTop : document.body.scrollTop;

window.scrollTo( x-coord, y-coord ) :

MDN API原文:(以左上角为坐标原点,以像素为单位沿水平和垂直方向滚动到指定位置)

x-coord is the pixel along the horizontal axis of the document that you want displayed in the upper left.

y-coord is the pixel along the vertical axis of the document that you want displayed in the upper left.

不需要做兼容,可以直接用

window.scroll( x-coord, y-coord ): 作用同 window.scrollTo()

 

Element对象下(DOM):

scrollWidth:只读属性,返回该元素内容区域宽度自身宽度较大的一个,若自身宽度大于内容宽度(存在滚动条),则scrollWidth>clientWidth.

注意:该属性返回的是四舍五入后的整数值,如果需要小数,请用:Element.getBoundingClientRect().

var xScrollWidth = element.scrollWidth;

scrollHeight:只读属性,返回该元素内容高度。包含被overflow隐藏掉的部分。包含padding,不包含margin.如果需要小数,请用:Element.getBoundingClientRect().

var yScrollHeight = element.scrollHeight;

应用点:(判断元素是否滚动到底部,底下等式若返回 true ,则是,否则不是)

element.scrollHeight - element.scrollTop === element.clientHeight;

scrollLeft:读取或设置元素滚动条到元素左边的距离。

//获取滚动条到元素左边的距离
var sLeft = element.scrollLeft; //设置滚动条滚动了多少像素
element.scrollLeft = 10;

scrollTop:设置或获取该元素顶部距离其容器顶部的距离,无滚动条时为0。

//获取滚动的高度(被卷去的高度)
var intElementScrollTop = element.scrollTop; // 设置滚动的距离
element.scrollTop = intValue;

兼容性代码如下:(获取、设置页面垂直方向的滚动距离!水平方向同理)(简易版)

//获取滚轮滚动的距离,适配所有的浏览器
function getScrollY(){
return window.pageYOffset || document.documentElement.scrollTop;
}
//设置垂直方向滚轮滚动的距离,适配所有的浏览器,num为滚动距离
function setScrollY(num){
document.body.scrollTop = document.documentElement.scrollTop = num;
}

总结:

  由上面的两个兼容代码可以看出,我们总是把window下的scrollY(pageYoffset)、scrollX(pageXoffset)方法和element下的scrollTop、scrollLeft方法混在一起用,其实这两个是有本质区别的。一个获取的是window窗口的滚动距离一个获取的是某一个元素的滚动距离,当获取的元素是body时,window.scrollY(window.pageYoffset) = document.body.scrollTop。

扩展:关于获取各种浏览器可见窗口大小的一点点研究

<script>
function getInfo()
  {
var s = "";
s += " 网页可见区域宽:"+ document.body.clientWidth;
s += " 网页可见区域高:"+ document.body.clientHeight;
s += " 网页可见区域宽:"+ document.body.offsetWidth + " (包括边线和滚动条的宽)";
s += " 网页可见区域高:"+ document.body.offsetHeight + " (包括边线的宽)";
s += " 网页正文全文宽:"+ document.body.scrollWidth;
s += " 网页正文全文高:"+ document.body.scrollHeight;
s += " 网页被卷去的高(ff):"+ document.body.scrollTop;
s += " 网页被卷去的高(ie):"+ document.documentElement.scrollTop;
s += " 网页被卷去的左:"+ document.body.scrollLeft;
s += " 网页正文部分上:"+ window.screenTop;
s += " 网页正文部分左:"+ window.screenLeft;
s += " 屏幕分辨率的高:"+ window.screen.height;
s += " 屏幕分辨率的宽:"+ window.screen.width;
s += " 屏幕可用工作区高度:"+ window.screen.availHeight;
s += " 屏幕可用工作区宽度:"+ window.screen.availWidth;
s += " 你的屏幕设置是 "+ window.screen.colorDepth +" 位彩色";
s += " 你的屏幕设置 "+ window.screen.deviceXDPI +" 像素/英寸";
  }
</script>

扩展:准确获取网页客户区的宽高、滚动条宽高、滚动条Left和Top的代码:

<script>
var cWidth = cHeight = sWidth = sHeight = sLeft = sTop = 0; if (document.compatMode == “BackCompat”) {
cWidth = document.body.clientWidth;
cHeight = document.body.clientHeight;
sWidth = document.body.scrollWidth;
sHeight = document.body.scrollHeight;
sLeft = document.body.scrollLeft;
sTop = document.body.scrollTop;
}
else { //document.compatMode == “CSS1Compat”
cWidth = document.documentElement.clientWidth;
cHeight = document.documentElement.clientHeight;
sWidth = document.documentElement.scrollWidth;
sHeight = document.documentElement.scrollHeight;
sLeft = document.documentElement.scrollLeft == 0 ? document.body.scrollLeft : document.documentElement.scrollLeft;
sTop = document.documentElement.scrollTop == 0 ? document.body.scrollTop : document.documentElement.scrollTop;
}
</script>

博客地址:offset[Parent/Width/Height/Top/Left] 、 client[Width/Height/Top/Left] 、 Element.getBoundingClientRect()

参考链接:

http://www.css88.com/archives/1767

http://www.css88.com/archives/90

https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollTop

如需博文转载,请附加原文链接

博客地址:http://www.cnblogs.com/zxjwlh

博主箴言:牛逼不可怕,可怕的是人家比你牛逼还比你努力!

 

scroll 方法 获取滚轴距离顶部高度的更多相关文章

  1. Delphi中三种方法获取Windows任务栏的高度

    第一种:需要引用Windows单元 ShowMessage(IntToStr(GetSystemMetrics(SM_CYSCREEN)-GetSystemMetrics(SM_CYFULLSCREE ...

  2. Javascript&Jquery获取浏览器和屏幕各种高度宽度方法总结及运用

    <js篇> Javascript获取浏览器和屏幕各种高度宽度方法总结 document.body.clientWidth       //网页可见区域宽(body) document.bo ...

  3. JS获取滚动条距离顶部高度

    一.jQuery获取的相关方法 jquery 获取滚动条高度 获取浏览器显示区域的高度 : $(window).height(); 获取浏览器显示区域的宽度 : $(window).width(); ...

  4. js获取滚动条距离浏览器顶部,底部的高度,兼容ie和firefox

    做web开发经常会碰到需要获取浏览器的滚动条与顶部和底部的距离,然后做相应的处理动作.下面作者就如何通过js来获取浏览器滚动条距离浏览器顶部和底部的高度做一下分享,这个是同时兼容ie和firefox的 ...

  5. 使用jquery中height()方法获取各种高度大全

    alert($(window).height()); //浏览器当前窗口可视区域高度 alert($(document).height()); //浏览器当前窗口文档的高度 alert($(docum ...

  6. Javascript获取图片原始宽度和高度的方法详解

    前言 网上关于利用Javascript获取图片原始宽度和高度的方法有很多,本文将再次给大家谈谈这个问题,或许会对一些人能有所帮助. 方法详解 页面中的img元素,想要获取它的原始尺寸,以宽度为例,可能 ...

  7. 如何在onCreate方法中获取视图的宽度和高度

    你可以通过视图的getWidth()和getHeight()来获取视图的宽度和高度. 但是,可能会让你失望的是,如果你直接在onCreate方法内调用这两个函数,你会的到0. 为什么呢? 这是因为,当 ...

  8. js 和 jquery 获取页面和滚动条的高度 视口高度文档高度

    js 和 jquery 获取页面和滚动条的高度 //页面位置及窗口大小 function GetPageSize() { var scrW, scrH; if(window.innerHeight & ...

  9. 获取DIV与浏览器顶部相聚一定位置之后移动DIV

    获取元素(这里定位元素A)距离顶部的高度,接着设定scroll滚动的事件,比如超过那个高度,把A的位置设定为fixed,小于该高度,修改回relative. 方法一: $(function() {  ...

随机推荐

  1. 怎么在java 8的map中使用stream

    怎么在java 8的map中使用stream 简介 Map是java中非常常用的一个集合类型,我们通常也需要去遍历Map去获取某些值,java 8引入了Stream的概念,那么我们怎么在Map中使用S ...

  2. Android自绘制控件

    开发过程中,我们免不了需要用到一些自定义的 View,自定义 View 一般可分为三类: ① 继承类 View —— 一般继承系统以后的基本 View,新增/重置一些自定义属性 ,例如两端对齐的Tex ...

  3. Greenplum列存压缩表索引机制

    列存压缩表,简称AOCS表 数据生成 create table testao(date text, time text, open float, high float, low float, volu ...

  4. 配置secondarynamenode主机名masters

    1.配置hadoop的secondarynamenode,配置内容如下 node2 本文转自 素颜猪 51CTO博客,原文链接:http://blog.51cto.com/suyanzhu/19592 ...

  5. 第 38 章 OCR - Optical Character Recognition

    38.1. Tesseract 查找Tesseract安装包 $ apt-cache search Tesseract ocrodjvu - tool to perform OCR on DjVu d ...

  6. Redis超详细总结

    NoSQL概述 一.数据存储的演化史 1.单机MySQL的美好年代 在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付.在那个时候,更多的都是静态网页,动态交互类型的网站不多. 上述 ...

  7. 软件——IDEA中如何去掉警告虚线

    初次安装使用IDEA,总是能看到导入代码后,出现很多的波浪线,下划线和虚线,这是IDEA给我们的一些提示和警告,但是有时候我们并不需要,反而会让人看着很不爽,这里简单记录一下自己的调整方法,供其他的小 ...

  8. GoF23:建造者模式

    目录 概念 角色分析 实现方式 方式一 角色分析 代码编写 方式二 角色分析 代码编写 总结 优点 缺点 应用场景 建造者也抽象工厂模式的比较 ​ 建造者模式也属于创建型模式,它提供了一种创建对象的最 ...

  9. MySQL(二)MySQL中的存储引擎

    前言 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎,还可以 ...

  10. C# 判断文件格式的一些总结

    前提概述: 项目中 经常会有上传图片的地方  有的时候需要对图片类型做一些要求   这个时候就需要一些判断   虽然前段上传的时候可以去做类型的限制  或者后台接受的时候从file的type 中获取图 ...