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

宁睿  论坛元老 | 2025-1-25 01:41:56 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1083|帖子 1083|积分 3259

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
效果图:
 
代码: 
  1. <template>
  2.   <view class="container">
  3.     <view class="left" :class="{ sliding: isSliding }" @animationend="resetSliding">{
  4.   
  5.   { placeA }}</view>
  6.     <view class="center" @click="swapPlaces">
  7.       切换
  8.     </view>
  9.     <view class="right" :class="{ sliding: isSliding }" @animationend="resetSliding">{
  10.   
  11.   { placeB }}</view>
  12.   </view>
  13. </template>
  14. <script setup lang="ts">
  15. import { ref } from 'vue';
  16. // 声明地名变量
  17. const placeA = ref('呼和浩特');
  18. const placeB = ref('北京');
  19. const isSliding = ref(false); // 控制滑动动画的标志
  20. // 交换地名函数
  21. const swapPlaces = () => {
  22.   if (isSliding.value) return; // 如果正在滑动,则不执行交换
  23.   isSliding.value = true; // 开始滑动动画
  24.   // 临时存储地名
  25.   const temp = placeA.value;
  26.   placeA.value = placeB.value;
  27.   placeB.value = temp;
  28.   // 触发动画(这里使用transition,你可以根据需要替换为CSS动画)
  29.   setTimeout(() => {
  30.     // 动画结束后重置滑动标志
  31.     isSliding.value = false;
  32.   }, 500); // 假设动画时长为500ms,根据实际情况调整
  33. };
  34. // 重置滑动类(动画结束后调用)
  35. const resetSliding = () => {
  36.   if (!isSliding.value) return;
  37.   isSliding.value = false; // 动画结束后重置滑动标志(防止多次触发)
  38. };
  39. </script>
  40. <style scoped>
  41. .container {
  42.   display: flex;
  43.   justify-content: space-between;
  44.   align-items: center;
  45.   width: 100%;
  46.   height: 100vh; /* 或其他你需要的容器高度 */
  47.   padding: 0 20px;
  48.   box-sizing: border-box;
  49. }
  50. .left, .right {
  51.   flex: 1;
  52.   text-align: center; /* 初始状态居中对齐,动画过程中会改变 */
  53.   transition: transform 0.5s ease; /* 动画效果 */
  54. }
  55. .left.sliding {
  56.   text-align: right; /* 动画过程中右对齐 */
  57.   transform: translateX(100%); /* 向右滑动到屏幕外 */
  58. }
  59. .right.sliding {
  60.   text-align: left; /* 动画过程中左对齐 */
  61.   transform: translateX(-100%); /* 向左滑动到屏幕外 */
  62. }
  63. .center {
  64.   width: 50px; /* 或其他你需要的宽度 */
  65.   display: flex;
  66.   justify-content: center;
  67.   align-items: center;
  68. }
  69. .icon {
  70.   width: 100%;
  71.   height: auto;
  72. }
  73. </style>
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宁睿

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表