Taro使用Vue的transition组件只有淡入(进入)没有淡出(离开)动画

  1. 兼容性问题,翻阅文档

<transition> 组件内部使用了 getComputedStyle,用于嗅探组件上的动画样式。但是在小程序中没有办法实现 getComputedStyle,可以通过以下方法进行 hack:

为元素的 style 设置 transitionDurationanimationDuration 指定过渡时间,即可兼容 <transition>

代码如下:

<transition>
  <view style="animationDuration: 0.5s" />
</transition>
  1. 但是这样仍然解决不了问题,后来翻了翻nutui(京东风格的移动端 Vue 组件库,支持多端小程序)overlay组件的源码,调试发现三个小点,满足即可实现淡出
// ./index.taro.vue 文件
<template>
  <Transition name="overlay-fade">
    <view v-show="visible" :class="classes" :style="style" :catch-move="lockScroll" @click="onClick">
      <slot></slot>
    </view>
  </Transition>
</template>
<script setup lang="ts">
import { CSSProperties, computed } from 'vue'
import './index.scss

defineOptions({
  name: 'NutOverlay'
})

export type OverlayProps = Partial<{
  visible: boolean
  zIndex: string | number
  duration: string | number
  lockScroll: boolean
  overlayClass: string
  overlayStyle: CSSProperties
  closeOnClickOverlay: boolean
}>

const props = withDefaults(defineProps<OverlayProps>(), {
  visible: false,
  zIndex: 2000,
  // 1.props传入 duration
  duration: 0.3,
  lockScroll: true,
  overlayClass: '',
  closeOnClickOverlay: true
})

const emit = defineEmits(['click', 'update:visible'])

const classes = computed(() => {
  const prefixCls = 'nut-overlay'
  return {
    [prefixCls]: true,
    [props.overlayClass]: true
  }
})

// 2.style 使用计算属性
const style = computed(() => {
  return {
  	// 3.获取 transitionDuration
    transitionDuration: `${props.duration}s`,
    zIndex: props.zIndex,
    ...props.overlayStyle
  }
})

const onClick = (e: MouseEvent) => {
  emit('click', e)
  if (props.closeOnClickOverlay) {
    emit('update:visible', false)
  }
}
</script>
// ./index.scss 文件
.overlay-fade-enter-active,
.overlay-fade-leave-active {
  transition-property: opacity;
  transition-timing-function: ease;
}

.overlay-fade-enter-from,
.overlay-fade-leave-to {
  opacity: 0;
}

.nut-overlay {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: $overlay-bg-color;
}

.nut-overflow-hidden {
  overflow: hidden !important;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Taro是一个用于快速构建跨平台应用的框架,它底层基于React和Vue进行封装,提供了统一的API和开发体验。如果你想在Taro项目中使用Vue路由,你可以按照以下步骤进行: 1. **安装依赖**: 首先确保你在项目中安装了`@tarojs/router`和`vue-router`库。如果你使用的是Vue 2.x,可以使用以下命令: ``` npm install @tarojs/router vue-router ``` 或者如果用的是Vue 3.x: ``` npm install @tarojs/router@next vue-router@next ``` 2. **引入并配置**: 在`config/router.js`文件中,引入`vue-router`并配置路由规则。这个文件通常会根据你的应用结构生成,但基本内容如下: ```javascript import Vue from 'vue'; import VueRouter from 'vue-router'; import { createApp } from '@tarojs/app'; const app = createApp(Vue); // 注册Vue Router app.use(VueRouter); // 定义路由 const routes = [/* ...你的路由配置... */]; const router = new VueRouter({ routes }); // 将路由挂载到全局 app.mount('#root', router); ``` 3. **创建路由组件**: 按照Vue的约定,为每个路由创建一个对应的组件。例如: ```vue // 路由组件文件(如pages/index.vue) <template> <div>Index Page</div> </template> <script> export default { name: 'IndexPage' }; </script> ``` 4. **导航**: 在需要导航的地方,你可以使用`this.$router.push`或`this.$router.replace`方法。 5. **守卫**: 如果需要在路由变化前或后执行一些操作,可以使用`beforeEach`、` afterEach`等生命周期钩子。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荏苒、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值