0

使用任何HTML元素的一些方法:如何获取角2中的第一个父scrollTop元素?

this.viewContainerRef.element.nativeElement.offsetTop 
this.viewContainerRef.element.nativeElement.offsetLeft 

我有裁判的容器:

constructor(private viewContainerRef) 

将工作的伟大,并仅如果你不向下滚动(父母或的innerScroll浏览器滚动条,全部文档)。例如,考虑具有内部滚动的表格。如果我添加工具提示中的任何行会工作,但是当我滚动表,计算是错误的,我需要以某种方式获得滚动的offsetTop和减去它:

this.viewContainerRef.element.nativeElement.offsetTop - (the scrollTop of first parent) 

如何将其与完成角2?

我发现的东西,可能会有帮助,但同时将其更改为打字稿,它在这条线失败: while (_el = _el.offsetParent) {

findElePosition(_el){ 

    var _el = this.viewContainerRef.element.nativeElement; 

    var isIE = navigator.appName.indexOf('Microsoft Internet Explorer') != -1; 

    var curleft = 0; 
    var curtop = 0; 
    var curtopscroll = 0; 
    var curleftscroll = 0; 

    if (_el.offsetParent){ 
    curleft = _el.offsetLeft; 
    curtop = _el.offsetTop; 

    /* get element scroll position */ 
    var elScroll = _el; 
    while (elScroll = elScroll.parentNode) { 
     curtopscroll = elScroll.scrollTop ? elScroll.scrollTop : 0; 
     curleftscroll = elScroll.scrollLeft ? elScroll.scrollLeft : 0; 

     curleft -= curleftscroll; 
     curtop -= curtopscroll; 
    } 

    /* get element offset postion */ 
    while (_el = _el.offsetParent) { 
     curleft += _el.offsetLeft; 
     curtop += _el.offsetTop; 
    } 
    } 

    /* get window scroll position */ 
    var offsetX = isIE ? document.body.scrollLeft : window.pageXOffset; 
    var offsetY = isIE ? document.body.scrollTop : window.pageYOffset; 

    return [curtop + offsetY,curleft + offsetX]; 
} 

而且,我怎么能知道该元素的父滚动不是文档,我的意思是有一个innerDiv滚动。当滚动是文档时,根本不需要这个计算。

+0

您是否尝试过'parentNode'?你可以创建一个重击者吗? – yurzui

+0

我添加了我的代码 – AngularOne

回答

2

如果你知道你的表的类,你可以创建一个循环来找到你的表,然后得到你的offsetTop。我的意思是这个类应该在创建滚动的溢出元素上。找到偏移后,您可以随意使用它。

onMouseOver (event) { 
    if (!event.target) { 
     return; 
    } 

    // you can search for your table also with id 
    if (!$(event.target).hasClass("my-table")) { 
     this.onMouseOver({target: event.target.parentNode}); 
     return; 
    } 

    console.log(event.target.scrollTop); 

    } 

如果你不使用jquery,那么你也可以使用它。

onMouseOver (event) { 
    if (!event.target) { 
     return; 
    } 

    if (!~event.target.className.indexOf("my-table")) { 
     this.onMouseOver({target: event.target.parentNode}); 
     return; 
    } 

    console.log(event.target.scrollTop); 

    } 

这将不是文件,因为我们检查类或id名称,所以你不需要知道它是否是文件。

编辑: 你需要添加像这样的mouseover和类;

<table #my-overflowed-element class="my-table" > 
    <tr #my-row-with-tooltip on-mouseover='onMouseOver($event)'> 
    </tr> 
</table> 

如果在另一个元素的类应该有

<div #my-overflowed-element class="my-table"> 
    <table> 
     <tr #my-row-with-tooltip on-mouseover='onMouseOver($event)'> 
     </tr> 
    </table> 
</div> 
相关问题