Vue3+Element Plus:使用el-input文本输入框可以上下伸缩
时间: 2025-06-29 13:00:06 浏览: 18
### 实现 `el-input` 文本输入框的上下伸缩效果
为了实现带有上下伸缩效果的 `el-input` 组件,在 Vue 3 和 Element Plus 中可以利用 CSS 过渡以及 JavaScript 控制来完成这一目标。具体来说,可以通过监听用户的焦点事件(focus 和 blur),并结合 CSS 类动态调整样式。
#### HTML 结构与绑定
首先构建基本结构,并通过条件渲染控制是否应用特定类名:
```html
<template>
<div class="input-container">
<!-- 输入框 -->
<el-input
:class="{ 'expanded': isExpanded }"
placeholder="请输入内容..."
@focus="handleFocus"
@blur="handleBlur"></el-input>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
const isExpanded = ref(false);
function handleFocus() {
isExpanded.value = true;
}
function handleBlur() {
setTimeout(() => {
isExpanded.value = false;
}, 200); // 延迟关闭以模拟收缩过程
}
</script>
```
#### 添加 CSS 样式
接着定义相应的 CSS 来处理过渡动画:
```css
<style scoped>
.input-container .el-input {
transition: all 0.3s ease-in-out;
height: 40px; /* 默认高度 */
}
/* 当处于展开状态时的高度 */
.expanded.el-input {
height: 80px !important;
}
</style>
```
上述代码片段展示了如何创建一个具有上下伸缩特性的文本输入框[^1]。当用户点击进入编辑模式(`focus`)时,输入框会逐渐增大;而失去焦点(`blur`)之后,则会在短暂延迟后恢复原状。这里使用了 Vue 的响应式数据绑定机制配合简单的定时器逻辑实现了较为自然的效果转换。
#### 关键点说明
- 利用了 Vue 3 的组合式 API (`Composition API`)
- 使用了 Element Plus 提供的基础组件库中的 `<el-input>` 组件
- 应用了 CSS Transition 属性来进行平滑变化
- 采用了 TypeScript 支持增强类型安全性
阅读全文