从细节入手:点击输入框,提示文字瞬间变身小精灵

前言

不知道大家是否曾经在填写表单时,被那些不起眼的提示文字所吸引,并且感受到了一种愉悦的交互体验?这种 “点击输入框提示文字上移且缩小” 的设计,正是为了让用户在使用电子设备时,享受到更加便捷、舒适的操作体验。本文将会探讨如何用代码实现这个功能。


先看实现的效果是什么样子的,如下图:

在这里插入图片描述


实现思路

既然要让文字提示移动到 input 框上方,那我们就要思考一下什么时候让文字提示移动到 input 框的上方,首先是 input 框聚焦的时候 (@focus事件),其次是 input 框中的值改变的时候 (@input事件), 接着我们要想什么情况下文字提示默认显示,首先是 input 失去焦点的时候 (@focus失焦事件),其次是清空 input框中的内容时 (@clear清空事件);最后我们还要考虑 input 框在有值的情况下文字提示要怎么展示。

在这里插入图片描述

思路理清之后再实现操作就非常简单了,下面附上完整源码,大家可以配合代码注释理解。


完整源码

<template>
  <div>
    <div class="frame">
      <!--// focus:获取焦点事件 blur:失焦事件 clear:清空事件 input:input值改变时触发事件 -->
      <el-input @focus="download" @blur="unfocused" v-model="input" @clear="empty" @input="inputText" clearable>
      </el-input>
      <!--// 通过changeIndex的值判断生效那一套样式 -->
      <!--// :class="[{'类名':条件},{'类名':条件}]" -->
      <span :class="[{'focusBlur':changeIndex == 1},{'focusBlurTwo':changeIndex == 2}]">手机号</span>
    </div>
  </div>
</template>
<script>
  export default {
    data() {
      return {
        input: '', //input绑定的model
        changeIndex: 0, //定义一个变量;0默认样式,1第二套样式,2第三套样式
      };
    },
    methods: {
      //获得焦点事件
      download() {
        this.changeIndex = 1; //获取焦点等于1,展示第二套样式,文字提示平移到input框上面
      },
      inputText() {
        this.changeIndex = 1; //当input值改变时,展示第二套样式,文字提示平移到input框上面
      },
      //清空事件
      empty() {
        this.changeIndex = 0; //点击清空展示默认的样式
      },
      //失去焦点事件
      unfocused() {
        if (this.input != "") {
          this.changeIndex = 2; //如果框中有值,展示第三套样式
        } else if (this.input == "") {
          this.changeIndex = 0; //失焦等于 0,展示默认样式
        }
      },
    }

  };
</script>

<style scoped>
  .frame {
    /* 宽高大家可根据自己需求进行调整,调整完后下面的样式也要进行微调 */
    width: 20%;
    height: 40px;
    /* 父元素设置相对定位,这样子元素设置绝对定位后就会在父元素的左上角*/
    position: relative;
  }

  .frame span {
    /* 默认情况下的样式 */
    position: absolute;
    top: 0;
    left: 3%;
    padding: 0px 7px;
    display: inline-block;
    margin-top: -0.55%;
    color: #9e9e9e;
    font-size: 14px;
    pointer-events: none;
    height: 40px;
    display: flex;
    align-items: center;
    transition: all 0.3s; /*平移上方时,添加一个过渡效果让其没有那么的不自然,我这边设置了0.3秒执行完这个上移的操作 */
  }

  /* 获取焦点后的第一种样式 */
  .frame .focusBlur {
    position: absolute;
    font-size: 12px;
    top: -16%;
    height: 16px;
    color: rgb(64, 158, 255);
    background-color: white;
  }

  /* 如果框中有值顶部文字颜色展示为黑色,第二种样式 */
  .frame .focusBlurTwo {
    position: absolute;
    font-size: 12px;
    top: -16%;
    height: 16px;
    background-color: white;
  }
</style>
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

水星记_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值