当前位置: 首页 > 科技观察

在Vue.js中创建可重用的Transition

时间:2023-03-14 18:54:04 科技观察

Transitions真的很酷。毫无疑问,他们让一个应用程序变得非常容易动画化,但他们通常不得不在每个项目中从头开始编写,甚至需要引入animate.css这样的CSS库来让他们变得更强大。如果我们可以将它们封装到组件中并在多个项目中简单地重用它们会怎样?我们将介绍几种定义转换的方法,并深入研究如何使它们真正可重用。原始过渡组件和CSS定义过渡的最简单方法是使用过渡或过渡组组件。这需要为转换定义一个名称和一些CSS。看起来很简单,对吧?但是,这种方法有一个问题。我们不能真正在另一个项目中重用这个转换。封装过渡组件如果我们把前面的逻辑封装成一个组件,当作一个组件来使用呢?//FadeTransition.vue//App.vue通过在过渡组件中提供一个插槽,我们几乎可以像使用基本过渡组件一样使用它。这比前面的例子稍微好一点,但是如果我们想传递其他过渡特有的props,比如mode或者一些hooks,怎么办?Wrappedwrappertransitioncomponent幸运的是,Vue中有一个特性可以让我们将用户指定的所有额外的props和listeners传递给我们内部的标签/组件。如果您还不知道,您可以通过$attrs访问额外传递的props并将它们与v-bind结合使用以将它们绑定为props。这同样适用于通过$listeners的事件并通过v-on应用它们。//FadeTransition.vue//App.vue...

..."完整示例地址:https://codesandbox.io/s/yjl1wjyoy1?from-embed"现在,我们可以通过普通过渡组件可以接受的任何事件和支持,这使得我们的组件更具可重用性。但为什么不更进一步,增加通过prop轻松自定义持续时间的可能性。ExplicitdurationpropVue为过渡组件提供了一个durationprop,但是,它是为更复杂的动画链接而设计的,它有助于Vue将它们正确地链接在一起。在我们的例子中,我们真正需要的是通过组件属性来控制CSS动画/过渡。我们可以通过不在CSS中指定明确的CSS动画持续时间来做到这一点,而是作为一种样式。我们可以借助转换钩子来做到这一点,它与组件生命周期钩子非常相似,但它们在转换所需元素之前和之后被调用。让我们看看它是如何工作的。//FadeTransition.vue》完整示例地址:https://codesandbox.io/s/j4qnjvmwz9?from-embed”现在我们可以控制实际可见的过渡时间,这使得我们的可重用过渡灵活且易于使用。但是如何转换多个元素(例如列表项)呢?Transitiongroupsupport你能想到的最直接的方式大概就是新建一个组件,比如说fade-transition-group,然后用transition-group标签替换当前的transition标签,来实现grouptransition。如果我们可以在同一个组件中执行此操作并公开一个可以切换到过渡组实现的groupprop会怎样?幸运的是,我们可以通过渲染函数或组件和属性来做到这一点。//FadeTransition.vue