1***@qq.com
1***@qq.com
  • 发布:2020-05-12 16:28
  • 更新:2021-11-18 17:18
  • 阅读:6662

聊天(IM)界面发消息滚动到底部

分类:uni-app

今天有小伙伴问我,制作(IM)聊天时,发送的聊天消息不能自动滚动,通过一些了算法,随后发现有一些问题,不是很好,问我有没有相关的好的方法。嗯嗯嗯,当然,我这确实有一个比较好的方法。具体如下
原理 利用 scroll-view的scroll-into-view属性
效果图 见附件
具体代码如下

<template>  
    <view class='test'>  
        <scroll-view :scroll-into-view="viewIndex" scroll-view scroll-with-animation='true' :style="{'box-sizing':'border-box', 'padding':'20rpx','height':'200rpx'}"  
         scroll-y="true" class="scroll-Y">  
            <!-- 具体聊天内容 -->  
            <view v-for="(c,i) in chatList" :key="i">  
                {{c}}  
            </view>  

            <!-- 可滚动到底部的view标签 -->  
            <view :id="'im_'+chatList.length" class="bottom"></view>  
        </scroll-view>  
        <view>  
            <button @click="add">添加一行内容</button>  
        </view>  
    </view>  
</template>  
<!--  页面方法 -->  
<script>  
    export default {  
        data() {  
            return {  
                viewIndex: '',  
                chatList: ['你好', '很好'], // 模拟消息记录 为演示滚动效果,此处只有简单的消息信息  
            }  
        },  
        methods: {  
            add() {  
                //模拟发消息添加一条记录  
                this.chatList[this.chatList.length] = "你添加了一行内容" + this.chatList.length;  

                this.viewIndex = "";  
                //设置viewIndex值,使聊天滚动到底部  
                this.$nextTick(() => {  
                    this.viewIndex = "im_" + this.chatList.length;  

                })  
            }  
        },  
    }  
</script>  
<style scoped>  
    .bottom {  
        width: 100vw;  
        height: 20rpx;  
    }  
</style>  
7 关注 分享
wwkAwxr 1***@qq.com 东方来客 1***@163.com okingtaozi shamshing TestWZ

要回复文章请先登录注册

zhangrl

zhangrl

这样每次发消息都要滚动一次啊,请问怎么解决
2021-11-18 17:18
huangr_001

huangr_001

应用市场的这款im即时通讯插件感觉还不错,支持编译为安卓、ios的APP,还有微信小程序,我们使用下来感觉还不错,你也可以试试,插件市场地址:[https://ext.dcloud.net.cn/plugin?id=5177](https://ext.dcloud.net.cn/plugin?id=5177)
2021-08-06 10:09
佚名9527

佚名9527

滚动到顶部和滚动到底部 ,
<scroll-view :scroll-into-view="viewIndex" scroll-view scroll-with-animation='true' :style="{'box-sizing':'border-box', 'padding':'20rpx','height':'200rpx'}"
scroll-y="true" class="scroll-Y">

<view id="scroll-top"></view>

<!-- 具体聊天内容 -->
<view v-for="(c,i) in chatList" :key="i">
{{c}}
</view>

<view id="scroll-bottom"></view>

</scroll-view>
设置完后 , scroll-into-view要置空
2021-07-05 11:01
佚名9527

佚名9527

回复 W***@139.com :
1.等数据渲染完, 2.:scroll-with-animation="false"关闭滚动动画, 最好弄个加载界面,要不然还是很突兀的
2021-07-05 10:55
9***@qq.com

9***@qq.com

作者您好,我复制您的代码,但是没效果啊,请问是怎么回事
2021-07-05 10:31
W***@139.com

W***@139.com

大佬,问个问题:我想实现打开页面的时候滚动条直接在最底部,而不是打开页面后延时再滚动到最底部,能指导下思路么?
2020-12-14 15:40
哈德

哈德

太感谢了!
2020-09-29 16:32
唐明明

唐明明

赞赞赞。。感谢大佬 刚好碰到这个问题,之前尝试用scroll-top,容易出现内容被覆盖。。。
2020-07-30 15:34
一只小欧追

一只小欧追

app端nvue好像没有动画效果,但是可以滑到底部
2020-07-18 09:59
wwkAwxr

wwkAwxr

不错,但小程序不兼容。无法滚动至底部
2020-05-29 14:52