Vue聊天框默认滚动到底部
功能场景
在开发中,我们总能遇到某些场景需要运用到聊天框,比如客服对话。如果你不是一名开发人员,可能你在使用QQ或者聊天工具的时候并没有注意到,当你发出一条消息的时候,窗体会默认滚动到最底部,让用户可以看到最新的聊天消息。
实现原理
通过每一次的数据变化,只要数据变化,将滚动的最大高度赋值给滚动条的最大高度。
scrollHeight:滚动条高度
scrollTop: 距离最顶部高度
实现过程
在vue中
<!-- 这是一个简易的范例,重点突出自动滚动底部 -->
<template>
<div>
<!-- 聊天窗体 -->
<div class="test" id="gundong"></div>
<!-- 输入窗体 -->
<el-input></el-input>
<!-- 确认按钮 -->
<el-button @click="take">发送</el-button>
</div>
</template>
<script>
export default {
name: 'scroll',
data () {
return {
chat: [
{info: '聊天内容,触发后push一个'}
]
}
},
methods:{
take () {
let info = {info: '聊天内容,触发后push一个'},
this.chat.push(info)
// 核心代码
// 滚动
this.$nextTick(() => {
let msg = document.getElementById('gundong') // 获取对象
msg.scrollTop = msg.scrollHeight // 滚动高度
})
}
}
}
</script>
<style scoped>
.test{
width:300px;
height: 300px;
overflow: auto;
}
</style>
核心内容
this.$nextTick(() => {
let msg = document.getElementById('gundong') // 获取对象
msg.scrollTop = msg.scrollHeight // 滚动高度
})
了解一下$nextTick
$nextTick的执行条件是在DOM发生变化并且结束之后执行的一次回调。
vue在响应数据变化的时候并非在数据变化时DOM马上变化,而是按照一定的生命周期进行进程进行变化的。
如果你用watch,你会发现,永远只能监听到最近的一条聊天记录之上。似乎监听不到数据变化。其实并不是,在watch是直接监听data数据的变化情况,快于DOM,所以先行执行watch了。
那如果加上$nextTick的话,就能够等到DOM变化完成之后再进行执行,有点类似timeout。
了解一下“scrollTop”and“scrollHeight”
scrollTop是滚动条的当前高度。默认是0
scrollHeight是滚动条的整体高度
只要动态修改滚动条到顶部的距离等于div的高度,那么久实现滚动条定位在底部了。
Vue聊天框默认滚动到底部的更多相关文章
- vue 判断页面是否滚动到底部
需求 要求用户阅读完本页所有内容后,下一步按钮才可以点击. 实现思路 通过判断当前页面是否到达底部来设置按钮的点击事件. 要判断当前页面是否到达底部需要用到三个距离--距离顶部的距离scrollTop ...
- 移动端页面 弹出框滚动,底部body锁定,不滚动 / 微信网页禁止回弹效果
需求:页面有弹出层菜单,当弹出层菜单超出屏幕可视区域时,不能滚动.加上滚动后,底部body的滚动事件如何禁止,加上了overflow:hidden;还是不可用. 如下图:地区弹出框可以滚动,而底部的b ...
- 在element-ui的select下拉框加上滚动加载
在项目中,我们需要运用到很多来自后端返回的数据.有时是上百条,有时甚至上千条.如果加上后端的多表查询或者数据量过大,这就导致在前端的显示就会及其慢,特别是在网络不好的时候更是如此. 自然,后端就做了一 ...
- 基于Vue.js PC桌面端弹出框组件|vue自定义弹层组件|vue模态框
vue.js构建的轻量级PC网页端交互式弹层组件VLayer. 前段时间有分享过一个vue移动端弹窗组件,今天给大家分享一个最近开发的vue pc端弹出层组件. VLayer 一款集Alert.Dia ...
- 元素滚动到底部或顶部时阻止body滚动
移动端的弹窗内容有滚动条,滚动到底部或顶部时或影响弹窗下的body滚动,某些浏览器滚动到顶部时不松手就触发了刷新页面的情况,如果不需要这样的默认体验,就需要加一下判断了. var startX,sta ...
- Nuxt+Vue聊天室|nuxt仿微信App界面|nuxt.js聊天实例
一.项目简述 nuxt-chatroom 基于Nuxt.js+Vue.js+Vuex+Vant+VPopup等技术构建开发的仿微信|探探App界面社交聊天室项目.实现了卡片式翻牌滑动.消息发送/emo ...
- 【转】关于FLASH中图文混排聊天框的小结
原文链接 图文混排也是FLASH里一个很古老的话题了,我们不像美国佬那样游戏里面聊天框就是聊天框,全是文字干干净净,也不像日本人发明了并且频繁地使用颜文字.不管是做论坛.做游戏,必定要实现的一点就是带 ...
- 安卓使ScrollView滚动到底部代码
在开发中,我们经常需要更新列表,并将列表拉倒最底部,比如发表微博,聊天界面等等, 这里有两种办法,第一种,使用scrollTo(): public static void scrollToBottom ...
- ionic 上拉加载更多&瀑布流加载&滚动到底部加载更多 主意事项
首先下拉刷新的代码是这样的,标红的地方为关键代码 <html> <head> <meta charset="utf-8"> <meta n ...
随机推荐
- linq返回的IEnumerable<T>泛型不能被列举计算大于1次
在分页获取Take后面加ToList()方法就能得到正确结果,为什么?
- OpenCV实现基于傅里叶变换的旋转文本校正
代码 先给出代码,再详细解释一下过程: #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp& ...
- Python - Exceptions
官方文档:https://docs.python.org/3/library/exceptions.html 1. 使用try...except... 2. 输出错误信息的方式为: try: curs ...
- Grunt入门学习之(2) -- Gruntfile的编写
Gruntfile由以下几部分构成: "wrapper" 函数 项目与任务,目标配置 加载grunt插件和任务 自定义任务 1.wrapper函数(包装函数) 每一个 Gruntf ...
- 下载 github 项目文件到本地方法
下载 github 项目文件到本地方法 本篇终极,收集 3 种方法 最厉害 666 的方法 直接访问网站: 操作如下: 本地工具版下载方法 首先需要下载 git 客户端 我就不转载了,上面有客户端的使 ...
- eclipse 乱码问题总结
Eclipse 的控制台必须用GBK编码.所以条件1和条件4必须同时满足否则运行的还是乱码.才能保证不是乱码. 条件1,Window | Preferences | Workspace | T ...
- Linux工具-nmon
1.nmon下载地址:https://sourceforge.net/projects/nmon/files/ 创建文件nmon:# mkdir nmon 解压文件夹:# tar -zxvf nmon ...
- centos yum升级php
centos yum升级php5.3.3到最5.6.3 不要轻易升级,否则后果很严重! 注意事项: 1 升级后之前的php扩展不会丢失 自动会安装对应最新php的扩展2 升级后需重启下apache 才 ...
- 企业级NGINX的重定向rewrite
vim /usr/local/nginx/conf/nginx.conf server { listen 80; server_name www.ftl.com; rewrite ^/(.*) htt ...
- Gdb调试工具/ Makfile项目管理
gdb调试工具 gcc -g main.c -o main 常用命令 命令 简写 作用 help h 按模块列 ...