html+css+JavaScript 实现两个输入框的反转动画

开发时遇到了一个输入框交换的动画

做完之后觉得页面上加些许过渡或动画,其变化虽小,却能极大的提升页面质感,给人一种顺畅、丝滑的视觉体验。它的实现过程主要是通过css中的transition和animation来实现的。平时在开发的时候增加一些动画效果会让页面的观赏度和用户体验提高。利用定位的方式脱离文本流之后通过改变位置来加css3的动画实现

javascript 复制代码
<template>
  <div class="input-box">
    <el-input
      v-model="input1"
      placeholder="请输入内容"
      class="input1"
      :class="{ 'site-position-bottom': isConversion }"
    ></el-input>
    <div class="line1"></div>
    <el-button class="btn" type="primary" plain size="small" @click="conversionText">
      <i class="el-icon-sort"></i>
      反转
    </el-button>
    <div class="line2"></div>
    <el-input
      v-model="input2"
      placeholder="请输入内容"
      class="input2"
      :class="{ 'site-position-top': isConversion }"
    ></el-input>
  </div>
</template>
<script>
export default {
  data() {
    return {
      isConversion: false,
      input1: '',
      input2: ''
    };
  },
  methods: {
    conversionText() {
      this.isConversion = !this.isConversion;
      let temp = this.input1;
      this.input1 = this.input2;
      this.input2 = temp;
      setTimeout(() => {
        this.isConversion = !this.isConversion;
      }, 600);
    }
  }
};
</script>
<style lang="scss" scoped>
.input-box {
  position: relative;
  height: 100%;
  background-color: #fff;
}
.input1 {
  width: 200px;
  position: absolute;
  top: 20px;
}
.btn {
  position: absolute;
  top: 62px;
  left: 230px;
}
.input2 {
  width: 200px;
  position: absolute;
  top: 100px;
}
.line1 {
  width: 56px;
  height: 20px;
  position: absolute;
  top: 35px;
  left: 210px;
  border-top: 1px solid #ccc;
  border-right: 1px solid #ccc;
}
.line2 {
  width: 56px;
  height: 20px;
  position: absolute;
  top: 100px;
  left: 210px;
  border-bottom: 1px solid #ccc;
  border-right: 1px solid #ccc;
}
.site-position-top {
  animation: topPosition 0.6s ease-in-out;
}
.site-position-bottom {
  animation: bottomPosition 0.6s ease-in-out;
}
@keyframes topPosition {
  0% {
    top: 20px;
  }
  40% {
    opacity: 0;
  }
  80% {
    opacity: 0.8;
  }
  100% {
    top: 100px;
    opacity: 1;
  }
}
@keyframes bottomPosition {
  0% {
    top: 100px;
  }
  40% {
    opacity: 0;
  }
  80% {
    opacity: 0.8;
  }
  100% {
    top: 20px;
    opacity: 1;
  }
}
</style>

如果这篇文章对你有所帮助,欢迎点赞、分享和留言,让更多的人受益。感谢你的细心阅读,如果你发现了任何错误或需要补充的地方,请随时告诉我,我会尽快处理。

相关推荐
自然 醒30 分钟前
uni-app开发微信小程序,如何使用towxml去渲染md格式和html标签格式的内容?
微信小程序·uni-app·html
酒鼎40 分钟前
学习笔记(12-02)事件循环 - 实战案例 —⭐
前端·javascript
小恰学逆向1 小时前
【爬虫JS逆向之旅】某球网参数“md5__1038”逆向
javascript·爬虫
竹林8181 小时前
从“连接失败”到丝滑登录:我用 ethers.js v6 搞定 MetaMask 钱包连接的全过程
前端·javascript
前端那点事1 小时前
前端必看!JS高频实用案例(单行代码+实战场景+十大排序)
javascript
前端Hardy2 小时前
前端开发效率翻倍:15个超级实用的工具函数,直接复制进项目(建议收藏)
前端·javascript·面试
前端Hardy2 小时前
Vue 项目必备:10 个高频实用自定义指令,直接复制即用(Vue2 / Vue3 通用)
前端·javascript·vue.js
患得患失9492 小时前
【css技巧】用 CSS 实现:移入立即执行,移出延时返回
前端·css
h_jQuery2 小时前
uniapp使用canvas实现逐字书写任意文字内容,后合成一张图片提交
前端·javascript·uni-app
懒大王95272 小时前
Vue 2 与 Vue 3 的区别
前端·javascript·vue.js