每添加一条消息就让滚动条滚到最底部

 添加新消息的两种清空:

1.用户互动发送

2.客服发送消息

所以我们最后封装一个函数专门处理滚动条到最底部

 <!-- 聊天主体区域 -->
    <div class="chat-list">
      <div v-for="(charItem, index) in list" :key="index">
        <!-- 左侧是机器人小思 -->
        <div class="chat-item left" v-if="charItem.name !== 'me'">
          <van-image
            fit="cover"
            round
            src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ0kpsqmX61hmZbMXCI-9Edvw7YJYkCX1qtogoRlfCixMNF4dHLkXSKiLVfbMJlXh6z89Q&usqp=CAU"
          />
          <div class="chat-pao">{{ charItem.msg }}</div>
        </div>

        <!-- 右侧是当前用户 -->
        <div class="chat-item right" v-else>
          <div class="chat-pao">{{ charItem.msg }}</div>
          <van-image fit="cover" round :src="$store.state.userPhoto" />
        </div>
      </div>
    </div>
methods:{
      // 滚动到页面底部
    scrollToBottom () {
      // 获取到所有的聊天 Item 项
      const chatItem = document.querySelectorAll('.chat-item')
      // 获取到最后一项对应的 DOM 元素
      const lastItem = chatItem[chatItem.length - 1]
      // 调用 scrollIntoView() 方法,显示这个元素
      lastItem.scrollIntoView({
        behavior: 'smooth' // 动画平滑
      })
    }
}
  1. 在发布消息 / 接收到消息的时候, 调用

     // 滚动到页面底部(每添加一条消息就让滚动条滚到最底部)
          // 最后一条消息滚动到屏幕范围
          // 数据变化->dom更新是异步的,所以获取到的是上一条div
          // 解决:vue提供了nextTick/或者settTimeOut方法,可以等待dom节点更新完毕后再执行
    this.$nextTick(() => {
        this.scrollToBottom()
    })
.chat-list {
    height: 100%;
    overflow-y: scroll;
      }

 

小结

  1. 获取原生DOM, 调用scrollIntoView方法, 让标签滚到可视窗口
  2. 如果下面没有更多内容了, 是不一定会滚到头的
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值