jquery获取元素在文档中的位置信息以及滚动条位置

http://blog.csdn.net/qq_34095777/article/details/78750886     原文链接

原创 2017年12月08日 21:38:50
  • 57

获取元素在页面中的位置信息,包括页面的可是区域还有页面滚动条的位置。

元素的位置信息包括:

  1. 元素的大小 width和height
  2. 元素的 X轴距离 和 Y轴距离

jQeury提供的方法有:

  1. offset() 获取元素的绝对位置信息
  2. position() 获取元素的相对位置信息
  3. height()/width() 获取元素的宽高信息,width和height属性值
  4. outerWidth()/outerHeight() 获取元素的占有宽高
  5. innerWidth()/outerHeight() 获取元素的内容content宽高

获取元素的宽高信息:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试</title>
<script src="https://cdn.bootcss.com/jquery/1.11.1/jquery.min.js"></script>
<style>
body{
margin:0px;
padding:0px;
}
#divD{
margin:100px;
padding:20px;
border:1px solid red;
width: 300px;
height: 300px;
}
</style>
</head>
<body>
<div id="divD"></div>
<script>
$(function(){
var ele = $("#divD");
console.log(ele.height());//300px
console.log(ele.innerHeight());//300+20+20=340px
console.log(ele.outerHeight());//300+20+20+1+1=342px
})
</script>
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

解析:

如图可见

height是元素设置的高度,innnerHeight增加了padding,outerHeight增加了border和padding 
width也是同一个道理,包括width=100%

获取元素位置信息

1.offest() 获取元素在可视区域(浏览器显示的窗口区域)的位置信息,left和top

var ele = $("#divD");
console.log(ele.offset());//{top: 110, left: 110}
  • 1
  • 2

2.position() 相对位置信息

要使得这个函数获取准确的值,注意一下几条

  1. 父元素必须具有position:absolute/relative/fixed属,如果没有就相对于视口
  2. 父元素的padding和border会影响获取的值,子元素的margin不会影响获取的值
  3. top和left属性会影响获取的值

示例1:

<style>
body{
margin:0px;
padding:10px;
}
.parent{
border:1px solid red;
width: 500px;
height:500px;
padding: 10px;
position:relative;
}
.child{
width: 100px;
height: 100px;
border:1px solid red;
position: relative;
top:100px;
}
</style> <div class="parent">
<div class="child">
</div>
</div> <script>
$(function(){
var ele1 = $(".parent");
var ele2 = $(".child"); console.log(ele1.position().top);
//这个元素的父元素就是body,默认最终相对的元素。padding会影响获取的值,所以最终的结果是10
console.log(ele2.position().top);
//相对的元素是该元素的父元素,100px是top值,10px是padding值,所以最后的结果是110px;
})
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

示例2:

<style>
body{
margin:0px;
padding:10px;
}
.parent{
border:1px solid red;
width: 500px;
height:500px;
padding: 10px;
/*position:relative; 这个例子与上个例子唯一不同之处*/
}
.child{
width: 100px;
height: 100px;
border:1px solid red;
position: relative;
top:100px;
}
</style> <div class="parent">
<div class="child">
</div>
</div> <script>
$(function(){
var ele1 = $(".parent");
var ele2 = $(".child"); console.log(ele1.position().top);
//这个元素的父元素就是body,默认最终相对的元素。padding会影响获取的值,所以最终的结果是10
console.log(ele2.position().top);
//该元素的父元素没有满足第一个条件,所以最终相对的元素是body,100px是top值,10px父元素的padding值,另一个值是body的padding,所以最后的结果是120px;
})
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

所以使用这方法,基本就是配合position使用,就不会出现得不到值或得到的值不对的情况

获取滚动条位置

scrollTop() 获取滚动条位置

    var scrollTop = $(document).scrollTop();
var scrollLeft = $(document).scrollLeft();
  • 1
  • 2
  • 3

注意IE浏览器只有在事件(点击,滚动…)中才能获取滚动条对应的值

应用函数

$.fn.extend({

            //判断是否在屏幕中
isOnScreen:function(onlyWidth){ //获取元素宽高
var width = $(this).outerWidth();
var height = $(this).outerHeight();
//获取元素在页面中的绝对距离
var top = $(this).offset().top;
var left = $(this).offset().left;
//获取元素滚动条的位置,即视口上(左)边缘距离整个文档最上(左)边缘的位置
var scrollTop = $(document).scrollTop();
var scrollLeft = $(document).scrollLeft();
//获取视口的高度
var screenWidth = $(window).width();
var screenHeight = $(window).height(); // 高度方向判断条件
var heightCondition = (top >= scrollTop) && ((top+height) <= (scrollTop + screenHeight));
// 宽度方向判断条件
var widthCondition = (left >= scrollLeft) && ((left+width) <= (scrollLeft + screenWidth)); //console.log(left +"---"+ scrollLeft +"---"+ width +"---"+ screenWidth); if(onlyWidth===false){
return heightCondition && widthCondition;
}else{
return heightCondition;
}
},
// 获取元素下边缘到视口的距离
getBottomDistance:function(){
//获取元素宽高
var height = $(this).outerHeight();
//获取元素在页面中的绝对距离
var top = $(this).offset().top;
//获取元素滚动条的位置,即视口上(左)边缘距离整个文档最上(左)边缘的位置
var scrollTop = $(document).scrollTop();
//获取视口的高度
var screenHeight = $(window).height(); return scrollTop + screenHeight - height - top; } });

jquery获取元素在文档中的位置信息以及滚动条位置(转)的更多相关文章

  1. html中如何获取元素在文档中的位置

    html中如何获取元素在文档中的位置 一.总结 一句话总结: $("#elem").offset().top $("#elem").offset().left ...

  2. 使用Java POI来选择提取Word文档中的表格信息

    通过使用Java POI来提取Word(1992)文档中的表格信息,其中POI支持不同的ms文档类型,在具体操作中需要注意.本文主要是通过POI来提取微软2003文档中的表格信息,具体code如下(事 ...

  3. 使用compareDocumentPosition比较两个元素在文档中的位置

    PS:尊重原创,转载请注明来自http://www.cnblogs.com/Raoh/p/js_compareDocumentPosition_between_two_node.html 使用comp ...

  4. 使用pdfFactory隐藏文档中的隐私信息

    分享PDF文档时,文档中可能会存在一些隐私信息,比如用户名.用户的邮件地址.电话号码等信息.为了更好地保护原有文档内容的完整性,大家可以在生成PDF时,使用pdfFactory的隐藏信息功能,删除或遮 ...

  5. 利用Python-docx 读写 Word 文档中的正文、表格、段落、字体等

    前言: 前两篇博客介绍了 Python 的 docx 模块对 Word 文档的写操作,这篇博客将介绍如何用 docx 模块读取已有 Word 文档中的信息. 本篇博客主要内容有: 1.获取文档的章节信 ...

  6. java POI往word文档中指定位置插入表格

    1.Service  demo import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.a ...

  7. [转载]JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合

    在ajax中经常需要对元素的位置进行精确的定位,此时不仅需要获取元素自身的大小位置等属性.还需要知道页面.浏览器.滚动条等的长度和宽度.因为浏览器的兼容问题,如果使用javascript获取这些数值是 ...

  8. 使用jQuery匹配文档中所有的li元素,返回一个jQuery对象,然后通过数组下标的方式读取jQuery集合中第1个DOM元素,此时返回的是DOM对象,然后调用DOM属性innerHTML,读取该元素 包含的文本信息

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. javaScript获取文档中所有元素节点的个数

    HTML+JS 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

随机推荐

  1. MySQL InnoDB与MyISAM存储引擎差异

    言: 之前简单介绍过 MySQL 常用的存储引擎,今天对两个主流的存储简单分析下差异,书上没有参考的笔试题解答注解: 差异: MyISAM 只支持表锁,不支持事务,表损坏率较高.较老的存储引擎.   ...

  2. excel中日期设置星期

    在设置日期格式中-自定义中-设置填入yyyy-mm-dd [$-804]aaa;@ 即可.

  3. 使用eclipse逆向工程开发hibernate项目

    在项目设计时,要么根据需求分析建立实体类,然后正向生成数据库表:要么先进行数据库表设计,然后逆向生成实体类.也就是说,不会完成一方的设计后再花时间去匹配建立另一方,这么做的原因是: 1.如果不使用正向 ...

  4. CSS媒体查询 width VS device-width

    In CSS media the difference between width and device-width can be a bit muddled, so lets expound on ...

  5. Linux 性能监控分析

    好文,参考 http://blog.csdn.net/hexieshangwang/article/details/47187185

  6. oracle 索引(3)

    位图索引 位图索引非常适合于决策支持系统(Decision Support System,DSS)和数据仓库,它们不应该用于通过事务处理应用程序访问的表.它们可以使用较少到中等基数(不同值的数量)的列 ...

  7. 弹框内画echarts图dom元素无法获取的问题

    弹框内画echarts图dom元素无法获取的问题? 什么意思呢?就是当我们打开弹框之后,此时要画eachars图,可是echarts图的容器dom此时为null, 因此我们需要做的就是在dom元素获取 ...

  8. CSS3 之 RGBa 可透明颜色

    在 CSS3 中,增加了一个 opacity 属性,允许开发者设置元素的透明度,现在 opacity 已被主流的现代浏览器支持,但 opacity 会把被设置的元素及其子元素同时设置为同一个透明度,这 ...

  9. hdoj-1038-Biker's Trip Odometer(水题)

    题目真的考验英语 题目链接 需要进行单位的转换 对于Pi用:3.1415927. 5280步相当于1英里. 12英寸相当于1步. 60分钟等于1小时 60秒等于1分钟. 201.168米等于1弗朗.( ...

  10. C++中关于strtok()函数的用法

    strtok: #include <string.h> char *strtok(char *str, const char *delim); char *strtok_r(char *s ...