如何获取一个元素的offset() top值而不使用jQuery?

前端之家收集整理的这篇文章主要介绍了如何获取一个元素的offset() top值而不使用jQuery?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我编程使用Angular框架的单页应用程序。我是新来的。我读了 this guide,以帮助我理解jQuery和Angular之间的根本区别,我想尽可能多地遵循这个指导,不使用jQuery。

除了jQuery帮助解决一些浏览器不兼容性,并提供了一个有用的函数库,例如能够从窗口顶部知道元素的顶部位置,如$(‘element’)。offset()。最佳。没有普通的Javascript似乎能够接近没有重写这个函数,在这一点不是一个更好的主意,使用jQuery或jQuery的库?

具体来说,我想做的是设置一个指令,一旦元素的顶部被滚动到窗口中的某个位置,就将其固定到位。这是它的外观:

  1. directives.scrollfix = function () {
  2. return {
  3. restrict: 'C',link: function (scope,element,$window) {
  4.  
  5. var $page = angular.element(window)
  6. var $el = element[0]
  7. var elScrollTopOriginal = $($el).offset().top - 40
  8.  
  9. $page.bind('scroll',function () {
  10.  
  11. var windowScrollTop = $page[0].pageYOffset
  12. var elScrollTop = $($el).offset().top
  13.  
  14. if ( windowScrollTop > elScrollTop - 40) {
  15. elScrollTopOriginal = elScrollTop - 40
  16. element.css('position','fixed').css('top','40px').css('margin-left','3px');
  17. }
  18. else if ( windowScrollTop < elScrollTopOriginal) {
  19. element.css('position','relative').css('top','0').css('margin-left','0');
  20. }
  21. })
  22.  
  23. }
  24. }
  25. }

如果有一个更好的方式来实现这一点在Angular,我仍然只是没有得到,我会感激的建议。

解决方法

如果$ el是实际的DOM对象,则使用 getBoundingClientRect
  1. var top = $el.getBoundingClientRect().top;

JSFiddle

Fiddle将显示这将获得相同的值,jquery的offset top会给你

编辑:如评论中所述,这不考虑滚动内容,下面是jQuery使用的代码

https://github.com/jquery/jquery/blob/master/src/offset.js(5/13/2015)

  1. offset: function( options ) {
  2. //...
  3.  
  4. var docElem,win,rect,doc,elem = this[ 0 ];
  5.  
  6. if ( !elem ) {
  7. return;
  8. }
  9.  
  10. rect = elem.getBoundingClientRect();
  11.  
  12. // Make sure element is not hidden (display: none) or disconnected
  13. if ( rect.width || rect.height || elem.getClientRects().length ) {
  14. doc = elem.ownerDocument;
  15. win = getWindow( doc );
  16. docElem = doc.documentElement;
  17.  
  18. return {
  19. top: rect.top + win.pageYOffset - docElem.clientTop,left: rect.left + win.pageXOffset - docElem.clientLeft
  20. };
  21. }
  22. }

猜你在找的jQuery相关文章