将自定义动画传递给组件

马克西姆·拉法里(Maxime Lafarie)

我使用Component中的Angular动画制作了Angular npm库,但是用户想要自定义它们。

假设我有以下Angular 5+组件(来自Angular docs):

@Component({
  selector: 'app-hero',
  template: `
    template code here...
  `,
  styleUrls: ['./hero-list.component.css'],
  animations: [
    trigger('heroState', [
      state('inactive', style({
        backgroundColor: '#eee',
        transform: 'scale(1)'
      })),
      state('active',   style({
        backgroundColor: '#cfd8dc',
        transform: 'scale(1.1)'
      })),
      transition('inactive => active', animate('100ms ease-in')),
      transition('active => inactive', animate('100ms ease-out'))
    ])
  ]
})
export class HeroListBasicComponent {
   @Input() heroes: Hero[];
}

如以上示例所示,animations将其设置在@Component装饰器内部

我想知道是否有可能将自定义animations数组传递给元素,以便根据传递给元素实例的动画使用不同的动画(无论如何实现):

  • 客户服务?
  • @Input()?
  • 全局配置脚本/变量/对象?

也许目前无法使用实际的Angular进行?

短信

这不会以常见的方式回答问题,但可以帮助您解决该特定问题+我要写的东西太大了,无法发表评论>>我将其发布为答案。

如果我们在这里只谈论展示模态的动画,那么我真的会切换到标准CSS动画。

它们易于编写(至少就我而言,它们比angular更为简单)和易于扩展。您可以给用户以完全的自由:他们可以通过为您提供几个CSS类来配置所需的动画。

开心的步骤:

  1. 只要你控制从服务弹出,你触发它的渲染,所以当它被创造了它应该得到的当前状态,例如类initial-statetransform: scale(0)一些类,用于保存转型的逻辑,让我们说transition-definition
  2. 现在,您需要设置超时(有setTimeout或有一些rxjs超时),等待0ms。这样做的唯一原因是让浏览器将模态缩放为0。在超时的回调中,您删除initial-state该类,并在模态上分配另一个提供给您另一种状态的类target-state比如表示一个类transform: scale(1)

只要您使类的执行超时,CSS引擎就会识别出已渲染的元素已使用的新属性进行了更新transform这就是为什么它将通过从0缩放到1开始过渡的原因。

您唯一需要关注的可能是在Angular区域之外创建超时,因为它仅用于动画目的,并且不会更改应用程序状态。这将为人类节省一些电力。

最终,您的用户可以为您提供任何类似于

.initial-state {
  transform: scale(0);
}

.transition-definition {
  transition: transform .2s
}

.target-state {
  transform: scale(1);
}

通过只为您提供几个CSS类。

我猜如果将转换逻辑置于目标状态(需要验证),即使只有2个类也足够。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Formik将自定义的道具传递给自定义字段组件

如何将自定义属性传递给功能组件中的样式组件?

vue将自定义组件作为属性传递给父组件

如何正确地将自定义数据属性道具传递给子组件?

将自定义数据传递给React中的PrivateRoute组件

将自定义类/样式传递给 Gatsby (React) 中的样式组件

将自定义发出的事件作为道具传递给VueJs中新创建的组件

VueJS 通过属性值将自定义属性传递给子组件

如何将自定义组件传递给 MUI 工具提示中的标题道具?

如何通过函数将自定义道具传递给 Vue 中的组件?

如何通过角度2中的父组件将自定义(html)模板传递给子组件?

将自定义函数传递给pandas .agg()

将自定义参数传递给 ConstraintValidator

将自定义参数传递给Phonegap插件

如何将自定义道具传递给道具?

Django将自定义表单参数传递给Formset

Reportlab:将自定义参数传递给Canvas

将自定义谓词传递给TableQuery的filter方法

如何将自定义参数传递给应用

iOS:将自定义NSURL传递给NSURLProtocol

将自定义环境变量传递给nohup

将自定义授权令牌传递给后端

将自定义函数传递给jquery对象

将自定义类型传递给 Apollo Mutation

如何将自定义布局传递给PopupMenu?

Jenkins 将自定义变量传递给下游作业

C# - 将自定义参数传递给事件

访问表单:将自定义属性传递给图表

将自定义对象传递给WTForm