vue3 +ts 写一个输入框光标
时间: 2025-06-06 17:15:13 浏览: 17
### 实现 Vue3 和 TypeScript 的带光标功能输入框
为了实现一个基于 Vue3 和 TypeScript 的带光标功能的输入框组件,可以按照以下方式构建代码逻辑。此组件会通过 `ref` 获取 DOM 元素并操作其焦点和光标位置。
以下是完整的解决方案:
#### 组件代码
```typescript
<template>
<div>
<button @click="handleClick">聚焦并移动光标</button>
<input ref="textInput" type="text" />
</div>
</template>
<script lang="ts">
import { defineComponent, ref, onMounted } from 'vue';
export default defineComponent({
name: 'CursorInput',
setup() {
const textInput = ref<HTMLInputElement | null>(null);
// 设置光标到输入框末尾的方法
const setCursorPositionToEnd = () => {
if (textInput.value) {
const length = textInput.value.value.length;
textInput.value.focus(); // 让输入框获取焦点[^1]
textInput.value.setSelectionRange(length, length); // 移动光标到末尾[^2]
}
};
// 按钮点击事件处理函数
const handleClick = () => {
setCursorPositionToEnd();
};
// 页面加载完成后自动设置初始状态(可选)
onMounted(() => {
setCursorPositionToEnd();
});
return {
textInput,
handleClick,
};
},
});
</script>
```
---
#### 解析与说明
1. **模板部分**
- 使用了一个 `<button>` 来触发聚焦和光标移动的操作。
- 输入框由 `<input>` 定义,并绑定 `ref="textInput"` 属性以便在脚本中访问该 DOM 元素。
2. **脚本部分**
- 导入了 Vue3 的核心方法 `defineComponent`, `ref`, 和 `onMounted`。
- 创建了一个响应式的变量 `textInput`,用于存储对输入框 DOM 元素的引用。
- 方法 `setCursorPositionToEnd` 是关键逻辑所在:
- 首先调用 `.focus()` 方法让输入框获得焦点[^1]。
- 然后利用 `.setSelectionRange(start, end)` 将光标定位到输入框内容的末尾[^2]。
- 当按钮被点击时,执行 `handleClick` 函数来调用上述方法。
3. **生命周期钩子**
- 可选地,在页面挂载完成之后立即调用 `setCursorPositionToEnd` 方法,使得输入框默认处于聚焦且光标位于末尾的状态。
---
### 注意事项
- 如果需要支持动态更新输入框的内容,则可以在数据变化时重新计算光标的起始位置。
- 对于更复杂的场景(如双向绑定),可以通过监听 `@input` 或其他事件进一步扩展功能。
---
####
阅读全文
相关推荐


















