当前位置: 首页 > article >正文

uniapp+Vue3(<script setup lang=“ts“>)模拟12306城市左右切换动画效果

效果图:

 

代码: 

<template>
  <view class="container">
    <view class="left" :class="{ sliding: isSliding }" @animationend="resetSliding">{
  
  { placeA }}</view>
    <view class="center" @click="swapPlaces">
      切换
    </view>
    <view class="right" :class="{ sliding: isSliding }" @animationend="resetSliding">{
  
  { placeB }}</view>
  </view>
</template>

<script setup lang="ts">
import { ref } from 'vue';

// 声明地名变量
const placeA = ref('呼和浩特');
const placeB = ref('北京');
const isSliding = ref(false); // 控制滑动动画的标志

// 交换地名函数
const swapPlaces = () => {
  if (isSliding.value) return; // 如果正在滑动,则不执行交换

  isSliding.value = true; // 开始滑动动画

  // 临时存储地名
  const temp = placeA.value;
  placeA.value = placeB.value;
  placeB.value = temp;

  // 触发动画(这里使用transition,你可以根据需要替换为CSS动画)
  setTimeout(() => {
    // 动画结束后重置滑动标志
    isSliding.value = false;
  }, 500); // 假设动画时长为500ms,根据实际情况调整
};

// 重置滑动类(动画结束后调用)
const resetSliding = () => {
  if (!isSliding.value) return;
  isSliding.value = false; // 动画结束后重置滑动标志(防止多次触发)
};
</script>

<style scoped>
.container {
  display: flex;
  justify-content: space-between;
  align-items: center;
  width: 100%;
  height: 100vh; /* 或其他你需要的容器高度 */
  padding: 0 20px;
  box-sizing: border-box;
}

.left, .right {
  flex: 1;
  text-align: center; /* 初始状态居中对齐,动画过程中会改变 */
  transition: transform 0.5s ease; /* 动画效果 */
}

.left.sliding {
  text-align: right; /* 动画过程中右对齐 */
  transform: translateX(100%); /* 向右滑动到屏幕外 */
}

.right.sliding {
  text-align: left; /* 动画过程中左对齐 */
  transform: translateX(-100%); /* 向左滑动到屏幕外 */
}

.center {
  width: 50px; /* 或其他你需要的宽度 */
  display: flex;
  justify-content: center;
  align-items: center;
}

.icon {
  width: 100%;
  height: auto;
}
</style>


http://www.kler.cn/a/515975.html

相关文章:

  • C语言教程——文件处理(1)
  • 从新手到高手的蜕变:MySQL 视图进阶全攻略
  • JavaScript笔记APIs篇01——DOM获取与属性操作
  • nvm版本安装
  • 一文大白话讲清楚webpack基本使用——11——chunkIds和runtimeChunk
  • 【STM32】-TTP223B触摸开关
  • ssm基于SSM的毕业论文开题评审管理系统
  • 【力扣:新动计划,编程入门 —— 题解 ②】
  • 为什么Foreach循环中为什么不能使用 remove/add操作?
  • 网络(三) 协议
  • DC-DC稳压电源——实战(基于Ti5450芯片)基础知识篇(1)
  • Linux权限管理:从用户切换到文件权限
  • 【MYSQL】mysql 常用命令
  • java基础学习——jdbc基础知识详细介绍
  • JS-Web API -day06
  • Vue2 项目二次封装Axios
  • MYSQL学习笔记(五):单行函数(字符串、数学、日期时间、条件判断、信息、加密、进制转换函数)讲解
  • 如何选择TVS二极管?
  • Vue - toRefs() 和 toRef() 的使用
  • 准备知识——波纹度和粗糙度区别与联系
  • 【力扣】1312. 让字符串成为回文串的最少插入次数
  • 法律与认知战争:新时代的战略博弈
  • 8.2 从看图识字到智能解读:GPT-4 with Vision 开启多模态 AI 新纪元
  • Ubuntu下载zenodo文件Ubuntu download zenodo
  • springboot基于微信小程序的手机银行系统
  • 如何区分AI智能体、自动化工作流和PRA?