前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >(五)元素的切换动画

(五)元素的切换动画

作者头像
老怪兽
发布2023-02-22 18:55:25
7080
发布2023-02-22 18:55:25
举报
文章被收录于专栏:老怪兽的前端之旅

在多个 html 原生原生元素之间切换动画

一、在多个dom 元素之间切换动画

相关信息

代码语言:javascript
复制
<template>
  <main>
    <div class="container">
      <Transition name="fade">
        <!-- 第一种通过判断写法 -->
        <!-- <div v-if="box === 'box1'" class="box box1"></div>
        <div v-else-if="box === 'box2'" class="box box2"></div>
        <div v-else class="box box3"></div> -->
        
        <!-- 第二中写法, 动态使用class, 但是我们发现class切换
        了,但是页面没有变化,因为元素一直都是这一个元素,
        如果西药动态切换就给他加个 key -->
        <div= class="box" :class="box" :key="box">
      </Transition>
    </div>
  </main>
</template>

<script setup>
import { ref } from '@vue/runtime-core'
import { computed } from '@vue/runtime-core'
import { Transition } from 'vue'

// 定义一个容器来判断
const boxes = ['box1', 'box2', 'box3']
// 定义响应式数组下标
const current = ref(0)
// 使用计算属性动态计算数组下标
const box = computed(() => boxes[current.value] )

// 定义一个计数器当作触发机制
setInterval(() => {
  // 通过取模的方式来循环在0-2之间动态切换
  current.value = (current.value + 1) % boxes.length
  console.log(current.value)
}, 1500)
</script>

<style>
  .box {
  width: 100px;
  height: 100px;
  padding: 0.5em 1.4em;
  border-radius: 4px;
  color: white;
}
.box1 {
  background: linear-gradient(
    45deg,
    hsl(240deg, 60%, 50%),
    hsl(300deg, 90%, 50%)
  );
}
.box2 {
  background: linear-gradient(
    45deg,
    hsl(140deg, 60%, 50%),
    hsl(200deg, 90%, 50%)
  );
}
.box3 {
  background: linear-gradient(
    45deg,
    hsl(0deg, 60%, 50%),
    hsl(50deg, 90%, 50%)
  );
}
.fade-enter-from {
  opacity: 0;
}
.fade-enter-to {
  opacity: 1;
}
.fade-leave-from {
  opacity: 1;
}
.fade-leave-to {
  opacity: 0;
}
.fade-enter-active {
  transition: all 0.7s ease-in-out;
}
.fade-leave-active {
  transition: all 0.3s ease-in;
}
</style>
  • 我们发现通过上面的方式能够动态的切换多个元素的 css 但是前面的元素还没有消失后面的元素就出现了,导致页面卡顿一下

解决上面的这个问题有很多方法

  1. 我们可以使用 绝对定位 absolute
  2. 使用 grid 定位
  3. 也是推荐的一种用法,就是在 Transition 标签中有一个元素 mode 里面有两种状态的值
代码语言:javascript
复制
<Transition name="fade" model=""> 
  <!-- out-in: 在上一个元素离开之后下一个元素在进场 -->
  <!-- in-out: 下一个元素先进程,上一个元素才离开-->
  <!-- 默认是同时进行的 -->
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年11月10日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在多个 html 原生原生元素之间切换动画
    • 一、在多个dom 元素之间切换动画
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档