关于jq的offset.top的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于jq的offset.top的问题相关的知识,希望对你有一定的参考价值。

先看一个图,我想获取的是nav标签到文档顶部的高度。理论上使用offset.top方法就行了。但是我的却不行,nav跳过了挨着它的前面两个section的计算,所以加上两个section的高度,就是准确的了,但是我不懂这是为什么?求解。请问,怎么修改,才能准确的获取到所需要的数据?最好使用原生的JS。

参考技术A 可以在先把直线和弧线变为多段线而且合并为一条,然后再偏移。具体操作:用命令FILLET,保证线和弧连接。然后命令PE,M,选全部对象,Y,J,回车。这时线和弧线都转为单条多段线了。再执行偏移就可以了。

jq滚动到一定位置的出现动画效果

实现原理: 

ele.offset().top 元素到浏览器顶部(的)高(距离)
ele.offset().height 元素自己(的)高
$(window).scrollTop() 浏览器 滚动条 滚动(的)距离
$(window).height()浏览器 窗口(的)高 

当滚动的高
$(window).scrollTop() 加上 浏览器窗口的高$(window).height() > = 元素到浏览器顶部(的)高(距离) 执行动画 

代码实现:
var a, b, c, d;

$(window).scroll(function () {
moves($("#dh"),"move")
});

// ele 要做动画的类 或者 id
// movename css的动画 类名
 function moves(ele,movename) {
a = ele.offset().top;
b = ele.offset().height;
c = $(window).scrollTop();
d = $(window).height();
if (d+c>a) {
$("#dh").addClass(movename);
}else{
$("#dh").removeClass(movename);
}
}
});


列子demo参考 :
  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>waypoints</title>
  6     <style>
  7         #dh{
  8             position: absolute;
  9         }
 10         .move{
 11             animation: move 1s .5s ease-in-out infinite alternate;
 12             -webkit-animation: move 1s .5s  ease-in-out infinite alternate;
 13             -moz-animation: move 1s .5s  ease-in-out infinite alternate;
 14             -o-animation: move 1s .5s  ease-in-out infinite alternate;
 15         }
 16         @keyframes move {
 17             from{
 18               opacity: 1;
 19                 transform:translate(100px,20px);
 20                 -webkit-transform:rotate(0deg) scale(1.1);
 21                 -moz-transform:rotate(0deg) scale(1.1);
 22                 -o-transform:rotate(0deg) scale(1.1);
 23                 transform:rotate(0deg) scale(1.1);
 24             }
 25             to{
 26                 opacity: 0.6;
 27                 -webkit-transform:rotate(360deg) scale(1);
 28                 -moz-transform:rotate(360deg) scale(1);
 29                 -moz-transform:rotate(360deg) scale(1);
 30                 transform:rotate(360deg) scale(1);
 31 
 32             }
 33 
 34         }
 35 
 36         @-webkit-keyframes move {
 37             from{
 38               opacity: 1;
 39                 transform:translate(100px,20px);
 40                 -webkit-transform:rotate(0deg) scale(1.1);
 41                 -moz-transform:rotate(0deg) scale(1.1);
 42                 -o-transform:rotate(0deg) scale(1.1);
 43                 transform:rotate(0deg) scale(1.1);
 44             }
 45             to{
 46                 opacity: 0.6;
 47                 -webkit-transform:rotate(360deg) scale(1);
 48                 -moz-transform:rotate(360deg) scale(1);
 49                 -moz-transform:rotate(360deg) scale(1);
 50                 transform:rotate(360deg) scale(1);
 51 
 52             }
 53 
 54         }
 55 
 56         @-moz-keyframes move {
 57             from{
 58                 opacity: 1;
 59                 transform:translate(100px,20px);
 60                 -webkit-transform:rotate(0deg) scale(1.1);
 61                 -moz-transform:rotate(0deg) scale(1.1);
 62                 -o-transform:rotate(0deg) scale(1.1);
 63                 transform:rotate(0deg) scale(1.1);
 64             }
 65             to{
 66                 opacity: 0.6;
 67                 -webkit-transform:rotate(360deg) scale(1);
 68                 -moz-transform:rotate(360deg) scale(1);
 69                 -moz-transform:rotate(360deg) scale(1);
 70                 transform:rotate(360deg) scale(1);
 71 
 72             }
 73 
 74         }
 75 
 76         @-o-keyframes move {
 77             from{
 78                 opacity: 1;
 79                 transform:translate(100px,20px);
 80                 -webkit-transform:rotate(0deg) scale(1.1);
 81                 -moz-transform:rotate(0deg) scale(1.1);
 82                 -o-transform:rotate(0deg) scale(1.1);
 83                 transform:rotate(0deg) scale(1.1);
 84             }
 85             to{
 86                 opacity: 0.6;
 87                 -webkit-transform:rotate(360deg) scale(1);
 88                 -moz-transform:rotate(360deg) scale(1);
 89                 -moz-transform:rotate(360deg) scale(1);
 90                 transform:rotate(360deg) scale(1);
 91 
 92             }
 93 
 94         }
 95 
 96     </style>
 97 </head>
 98 <body>
 99 <br>
100 <br>
101 <br>
102 <br>
103 <br>
104 <br>
105 <br>
106 <br>
107 <br>
108 <br>
109 <br>
110 <br>
111 <br>
112 <br>
113 <br>
114 <br>
115 <br><br>
116 <br>
117 <br>
118 <br>
119 <br>
120 <br>
121 <br><br>
122 <br>
123 
124 <br>
125 <br>
126 <br>
127 <br>
128 <dv id="dh" class="" style="padding: 10px; background: #ff3e2b">开始做动画了</dv>
129 
130 <br>
131 <br>
132 
133 <br>
134 <br>
135 <br>
136 <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
137 <script type="text/javascript">
138 
139     function gdjz(div, cssname, offset) {
140 
141 }
142 $(document).ready(function (e) {
143     var a, b, c, d;
144     $(window).scroll(function () {
145         moves($("#dh"),"move")
146     });
147 
148     function moves(ele,movename) {
149         a = ele.offset().top;
150         b = ele.offset().height;
151         c = $(window).scrollTop();
152         d = $(window).height();
153         if (d+c>a) {
154             $("#dh").addClass(movename);
155         }else{
156             $("#dh").removeClass(movename);
157         }
158     }
159 });
160 </script>
161 </body>
162 </html>

 



以上是关于关于jq的offset.top的问题的主要内容,如果未能解决你的问题,请参考以下文章

JQ的offset().top与JS的getBoundingClientRect区别详解,JS获取元素距离视窗顶部可变距离

关于offset()的理解

jq获取某个元素距离可视窗口距离怎么写

jq怎么获取绝对定位与相对定位的top值?

关于offset,scroll,position

left设置的是百分比,如何用jq获取该百分比,而不是具体的像素