微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以在整个页面上获取我单击的元素的 y 坐标吗?

如何解决我可以在整个页面上获取我单击的元素的 y 坐标吗?

我有关于 Y 坐标的大数据 - 有虚拟滚动,滚动页面上有很多项目。 当我单击数据时,会为单击的元素显示其他数据。 这使我的页面用户不友好,因为有时附加数据很大 - 当附加数据折叠时,有时滚动会自动向下滚动,用户需要向上滚动一点才能看到数据...

我需要当用户点击元素时 - 页面自动向上或向下滚动到 Y 坐标上点击的元素

HTML

<div *ngFor="let mainRow of tableData; let i = index;" class="card" id="mainRow-{{i}}">
   <div (click)="renderSubTable(i,mainRow,$event)">
     ... main data
   </div>

  <div *ngIf="mainRow.subTableData">
     ... additional data
  </div>

</div>

** 我试过的** TS

我试过 offsetY

  renderSubTable(numRow,event) {
   let y = pos.offsetY;
   window.scroll(0,y);
}

但这仅需要视口的 Y 坐标 - 而不是在整个页面上。 PageY 也不起作用。

我该如何解决我的问题

解决方法

jQuery offset 为您提供绝对位置(相对于文档):

const el = document.getElementById('el');
el.onclick = function() {
    const offset = $("#el").offset();
    window.scroll(0,offset.top);
    console.log(offset);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div style="height: 1000px; background: blue; padding-top:200px">
  <div id="el" style="height: 100px; width: 100px; background: red; margin: 0 50px;">

  </div>
</div>

这是 Angular 的代码片段

模板

<div style="height: 1000px; background: blue; padding-top:200px">
  <div (click)="onClick($event)" style="height: 100px; width: 100px; background: red; margin: 0 50px;">

  </div>
</div>

控制器

import { Component } from "@angular/core";

import $ from "jquery";

@Component({
  selector: "my-app",templateUrl: "./app.component.html",styleUrls: ["./app.component.css"]
})
export class AppComponent {
  onClick(event: MouseEvent) {
    const offset = $(event.target).offset();
    window.scroll(0,offset.top);
    console.log(offset);
  }
}

您可以在 Stackblitz

上进行测试 ,

没有一个确切的例子很难说(你的 HTML 是如何构建的),但你也应该看看:

(在元素的 api 上做而不是在窗口 api 上) https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollhttps://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。