【问题标题】:Is there a way to get the position of an element in Angular 8?有没有办法在 Angular 8 中获取元素的位置?
【发布时间】:2020-09-04 06:23:47
【问题描述】:

我有一个问题: 我想将元素的位置作为值。例如 x= 10 和 y = 30。之后我想下次使用它们来更新元素的位置。首先,元素 A 位于 x=5 和 y=5 的位置。然后我拖动位置并获得位置 x=10 和 y=30。然后我设置下一次的位置并更新位置。 请帮忙!

【问题讨论】:

  • 您可以使用纯 JS 获取元素位置。有多种方法可以做到这一点。例如。使用 Element.getBoundingClientRect()。 docs

标签: html css angular typescript


【解决方案1】:

这里是an example on Stackblitz 使用getBoundingClientRect() 来获取你需要的所有数据,这里是代码:

.ts:

import {
  Component,
  ElementRef,
  ViewChild,
  AfterViewInit,
  AfterContentChecked,
AfterViewChecked
} from "@angular/core";

/**
 * @title Basic Drag&Drop
 */
@Component({
  selector: "cdk-drag-drop-overview-example",
  templateUrl: "cdk-drag-drop-overview-example.html",
  styleUrls: ["cdk-drag-drop-overview-example.css"]
})
export class CdkDragDropOverviewExample implements AfterViewChecked {
  @ViewChild("block") block: ElementRef;

  constructor() {}
  
  ngAfterViewChecked() {
    let datas = this.block.nativeElement.getBoundingClientRect();
    console.log("datas = ", datas);
  }

  onDrop(item: any) {
    console.log("item = ", item.target.getBoundingClientRect());
  }
}

.html:

<div class="example-box" cdkDrag #block (mouseup)="onDrop($event)">
  Drag me around
</div>

.css:

.example-box {
  width: 200px;
  height: 200px;
  border: solid 1px #ccc;
}

请注意,这是使用 Angular 的 cdkDrasg(我基于文档 stackblitz 中的示例),因此如果您使用其他东西来实现拖放功能,则需要稍作调整。

另外,您是否打算手动编辑位置(通过打字稿),考虑使用 Renderer2 而不是直接使用 ViewChild。

【讨论】:

  • 非常感谢您的回答!!! :) 是的,我正在使用 cdkdrag。但问题是现在我在控制台上得到了正确的值,但我需要它们在一个变量中。你知道吗?
  • @freeprogramming 不客气。要获取变量中的值,您只需在我的示例中的 viewChild 下声明一个新值,并在值更新时设置它。如果您需要对更改做出反应,您可以使用来自rxjsBehaviorSubject 将新值推送到内部并订阅它。如果你不知道它是什么,我强烈建议你看看它,它非常有用:)
  • 谢谢你,我做到了,它有效 :) !但还有最后一个问题:我在 ngfor 的 div 中使用了更多元素,我只得到第一个元素的位置,而不是第二个......你有什么建议吗?
  • @freeprogramming 我编辑了我的代码以使用mouseup 事件来获取当前项目及其数据。现在我强烈建议您学习如何使用 CdkDrag,它非常有用 :) 考虑将此答案标记为正确答案,如果它让您满意,请点赞 :)
猜你喜欢
  • 1970-01-01
  • 2019-11-16
  • 2021-06-12
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
相关资源
最近更新 更多