html - 如何获取动画元素的最后位置?
问题描述
我想创建一个超出其自身区域的元素的动画,而这些区域有不同的 css 转换。因此我想创建一个这样的动画:
animations: [
trigger('length', [
transition(':increment', [
query(':enter',
[
style({ transform: 'OLDPOSITION' }),
stagger('100ms', animate('1000ms ease-in-out',
style({ transform: 'translate(0px, 0px, 0px)' })
))
], { optional: true }),
]),
但因此,在将元素添加到新父级之前,我需要元素的旧位置。我正在考虑创建一个位置服务来跟踪我想要移动的所有元素。在多个父元素中移动子元素时,是否有更好的方法来生成动画?
解决方案
我想通了。
您可以在更改将在 DOM 上执行之前检测到更改。(当然!)
您可以通过例如 id 找到 HTMLElement 并在构造函数中获取自己的 ElementRef
因此您可以计算偏移量
从“@angular/core”导入 { ElementRef, Input, OnChanges, SimpleChanges }; 出口接口位置{ x:数字; y:数字; 变换?:字符串, } 导出类 MyComponent 实现 OnChanges { @Input() 项目:数组 = 未定义; 构造函数(私有hostElement:ElementRef){} ngOnChanges(更改:SimpleChanges){ 如果(更改。项目){ 让 newItems = [...changes.items.currentValue]; if (changes.items.previousValue) { 让 oldItems = changes.items.previousValue; newItems = newItems.filter(item => oldItems.indexOf(item) === -1); } console.log({ offsets: newItems.map(this.getAnimationOffset.bind(this)) }); } } getAnimationOffset(标识符:字符串):位置 | 不明确的 { 让元素:HTMLInputElement = document.getElementById(identifier); 如果(元素){ 让 rect = element.getBoundingClientRect(); 让 hostRect = this.hostElement.nativeElement.getBoundingClientRect(); 返回 { x:hostRect.x - rect.x, y:hostRect.y - rect.y, 变换:element.style.transform }; } } }
推荐阅读
- python - 在熊猫数据框中查找特定部分字符串第一次出现的索引位置
- android - setFirestoreSettings 的问题
- xamarin - Xamarin:锁定方向时检测设备旋转?对于 iOS 和/或 Android?
- php - 在 PHP 中通过 URL 获取 Zip 文件
- c# - 尝试为文件 ...LoginDB.mdf 附加自动命名数据库失败
- java - 使用 Spring Cloud Stream 读取主题中的所有消息
- c# - 无法减少剃刀 ASP.NET Core MVC 中的局部变量
- javascript - 有没有办法从使用 jspdf 创建的 html 或 pdf 中获取使用 canvas 创建的图像的 URL?
- informatica - 当我们在 informatica 中超过 10 位时如何将值更改为 0
- lua - Lua:表格:比较键(而不是它们的值)