vue3中实现点击ctrl+enter换行,enter发送
vue
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
项目地址:https://gitcode.com/gh_mirrors/vu/vue
免费下载资源
·
效果
TS部分:
<script lang="ts" setup>
import { Promotion } from '@element-plus/icons-vue'
import { ref } from 'vue';
const question = ref('')
const keyDownCode = ref(0)
// 键盘按下事件处理函数
const keyDownEnter = (e: any) => {
console.log(e.keyCode) // 打印按键代码
keyDownCode.value = e.keyCode // 将按键代码赋值给 keyDownCode
e.preventDefault() // 阻止默认行为
}
// 键盘抬起事件处理函数
const keyUpEnter = (e: any) => {
if (keyDownCode.value === 229) { // 如果 keyDownCode 的值为 229,则说明输入法正在处理输入
return
}
e.preventDefault() // 阻止默认行为
console.log(e.keyCode) // 打印按键代码
send() // 调用 send 函数
}
// 处理 Shift + Enter 的函数
const keyEnterShift = () => {
console.log('shift,enter') // 打印 'shift,enter'
}
// 发送消息的函数
const send = () => {
question.value = '' // 清空 question 的值
}
</script>
模板部分:
<template>
<div class="chat-input">
<div class="chat-inputcontainer">
<div class="input-inner">
<div class="editor">
<el-input class="editor-textarea" v-model="question" autosize type="textarea"
placeholder="在这里输入你的问题" @keydown.enter.exact="keyDownEnter" @keyup.enter.exact="keyUpEnter"
@keydown.enter.shift="keyEnterShift" />
</div>
<div class="toolbar">
<el-tooltip class="box-item" effect="dark" content="请输入你的问题" placement="top">
<el-button class="send" size="large" type="info" text>
<el-icon size="26">
<Promotion />
</el-icon>
</el-button>
</el-tooltip>
</div>
</div>
</div>
</div>
</template>
样式部分
<style lang="scss" scoped>
.chat-input {
position: relative;
.chat-inputcontainer {
position: relative;
background-color: #E5E7ED;
border: 1px solid #E5E5E5;
border-radius: 16px;
box-shadow: 0px 8px 25px 0px #0000000D;
overflow: hidden;
.input-inner {
display: flex;
flex-wrap: wrap;
background-color: #ffffff;
padding: 8px 16px;
.editor {
word-break: break-all;
flex-grow: 1;
color: #060607;
margin-right: -12px;
.editor-textarea:deep(.el-textarea__inner) {
width: 100%;
resize: none;
font-variation-settings: inherit;
font-weight: inherit;
letter-spacing: inherit;
font-family: inherit;
font-feature-settings: inherit;
font-size: 1rem;
line-height: 1.5rem;
padding: .5rem .75rem;
border-radius: 0;
appearance: none;
--tw-shadow: 0 0 transparent;
margin: 0;
max-height: 25dvh;
border-width: 0;
background-color: transparent;
padding-left: 0;
padding-right: 0;
color: #0d0d0d;
outline: none;
box-shadow: none;
:focus {
--tw-ring-inset: var(--tw-empty,
/*!*/
/*!*/
);
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-color: #2563eb;
outline-offset: 2px;
outline: none;
border-color: inherit;
}
}
}
.toolbar {
display: flex;
gap: 4px;
color: #5E6772;
align-items: flex-end;
margin-left: auto;
.send {
border: none;
}
}
}
}
}
</style>
GitHub 加速计划 / vu / vue
207.54 K
33.66 K
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:2 个月前 )
73486cb5
* chore: fix link broken
Signed-off-by: snoppy <michaleli@foxmail.com>
* Update packages/template-compiler/README.md [skip ci]
---------
Signed-off-by: snoppy <michaleli@foxmail.com>
Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 4 个月前
e428d891
Updated Browser Compatibility reference. The previous currently returns HTTP 404. 5 个月前
更多推荐
已为社区贡献6条内容
所有评论(0)