vue3添加文字追加文字段的时候看到滚动条 但是并没有自己去滚到最下面

在 vue中 做个类似聊天框的功能

看图 vue3添加文字追加文字段的时候看到滚动条 但是并没有自己去滚到最下面,很多聊天工具呢 点击send 默认都会到最新消息那 就是滚动条最下方

Vue 更i性能dom是异步的 数据更新是同步的

解决办法:1.回调函数模式 2.async await 写法

第一种解决办法:

javascript 复制代码
<template>
    <div style="padding: 180px">
        <div
            ref="box"
            style="
                height: 500px;
                width: 500px;
                border: 1px solid red;
                overflow: auto;
            "
        >
            <div
                v-for="item in chatList"
                style="
                    background-color: aquamarine;
                    border: 1px solid;
                    display: flex;
                "
            >
                <p>{{ item.name }}</p>
                <p>{{ item.message }}</p>
            </div>
        </div>
        <div>
            <textarea style="width: 500px" v-model="ipt" type="txt"></textarea>
        </div>
        <el-button @click="send">send</el-button>
    </div>
</template>
<script setup lang="ts">
import { nextTick } from "vue"
import { ref, reactive } from "vue"
let chatList = reactive([{ name: "张三", message: "xxxxxx" }])
const ipt = ref("")
const box = ref<HTMLDivElement>()
// Vue 更i性能dom是异步的 数据更新是同步的
const send = () => {
    chatList.push({ name: "小六", message: ipt.value })
    // ipt.value=''
    nextTick(() => {
        box.value!.scrollTop = 99999
    })
}
</script>
<style module lang="scss"></style>

第二种解决办法:

javascript 复制代码
<template>
    <div style="padding: 180px">
        <div
            ref="box"
            style="
                height: 500px;
                width: 500px;
                border: 1px solid red;
                overflow: auto;
            "
        >
            <div
                v-for="item in chatList"
                style="
                    background-color: aquamarine;
                    border: 1px solid;
                    display: flex;
                "
            >
                <p>{{ item.name }}</p>
                <p>{{ item.message }}</p>
            </div>
        </div>
        <div>
            <textarea style="width: 500px" v-model="ipt" type="txt"></textarea>
        </div>
        <el-button @click="send">send</el-button>
    </div>
</template>
<script setup lang="ts">
import { nextTick } from "vue"
import { ref, reactive } from "vue"
let chatList = reactive([{ name: "张三", message: "xxxxxx" }])
const ipt = ref("")
const box = ref<HTMLDivElement>()
// Vue 更i性能dom是异步的 数据更新是同步的
// 解决办法:1.回调函数模式 2.async await 写法
const send = async () => {
    chatList.push({ name: "小六", message: ipt.value })
    ipt.value = ""
    await nextTick()
    box.value!.scrollTop = 99999
}
</script>
<style module lang="scss"></style>
相关推荐
翻滚吧键盘4 分钟前
vue绑定一个返回对象的计算属性
前端·javascript·vue.js
苦夏木禾9 分钟前
js请求避免缓存的三种方式
开发语言·javascript·缓存
超级土豆粉17 分钟前
Turndown.js: 优雅地将 HTML 转换为 Markdown
开发语言·javascript·html
乆夨(jiuze)43 分钟前
记录H5内嵌到flutter App的一个问题,引发后面使用fastClick,引发后面input输入框单击无效问题。。。
前端·javascript·vue.js
小彭努力中1 小时前
141.在 Vue 3 中使用 OpenLayers Link 交互:把地图中心点 / 缩放级别 / 旋转角度实时写进 URL,并同步解析显示
前端·javascript·vue.js·交互
小飞悟1 小时前
前端高手才知道的秘密:Blob 居然这么强大!
前端·javascript·html
code_YuJun1 小时前
Promise 基础使用
前端·javascript·promise
Codebee2 小时前
OneCode自主UI设计体系:架构解析与核心实现
前端·javascript·前端框架
邢同学爱折腾2 小时前
当前端轮播图遇上Electron: 变身一款丝滑的 图片查看器
javascript·electron
xiguolangzi2 小时前
vue3+element-plus el-table列的显隐、列宽 持久化
前端·javascript·vue.js