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

在 vue中 做个类似聊天框的功能
在这里插入图片描述
看图 vue3添加文字追加文字段的时候看到滚动条 但是并没有自己去滚到最下面,很多聊天工具呢 点击send 默认都会到最新消息那 就是滚动条最下方

Vue 更i性能dom是异步的 数据更新是同步的
解决办法:1.回调函数模式 2.async await 写法
第一种解决办法:

<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>

第二种解决办法:

<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>

相关推荐

  1. vscode中vue3文件没有自动提示

    2024-05-09 17:16:01       101 阅读
  2. Pandas追加写入文件时候写入了第一行

    2024-05-09 17:16:01       32 阅读
  3. Qt——实现滚动添加小组件自动跳转最后

    2024-05-09 17:16:01       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-09 17:16:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-09 17:16:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-09 17:16:01       82 阅读
  4. Python语言-面向对象

    2024-05-09 17:16:01       91 阅读

热门阅读

  1. Centos Yum

    2024-05-09 17:16:01       39 阅读
  2. 获取污染修复设计乙级资质的重要因素

    2024-05-09 17:16:01       38 阅读
  3. 面试:CopyOnWriteArrayList

    2024-05-09 17:16:01       37 阅读
  4. 限流算法学习

    2024-05-09 17:16:01       38 阅读
  5. 如何设置并行度 ——《OceanBase 并行执行》系列 2

    2024-05-09 17:16:01       28 阅读
  6. Leetcode 102:二叉树的层次遍历

    2024-05-09 17:16:01       31 阅读
  7. 大势智慧有可以制作白模的软件吗?

    2024-05-09 17:16:01       29 阅读
  8. 自然语言处理(NLP)技术及举例说明

    2024-05-09 17:16:01       37 阅读
  9. 游戏中常用的设计模式及场景

    2024-05-09 17:16:01       35 阅读
  10. Unity 状态机

    2024-05-09 17:16:01       37 阅读