返回顶部
首页 > 资讯 > 移动开发 >【微信开发】微信小程序实现实时聊天功能
  • 933
分享到

【微信开发】微信小程序实现实时聊天功能

微信小程序小程序 2023-09-02 10:09:03 933人浏览 薄情痞子
摘要

最近在做一个项目,需要运用到实时聊天功能,分享一下。      分为: 界面如何布局以及细节; 如何实现实时更新; 全部代码展示;         一、界面如何布局以及细节:         1.说到底,聊天界面就是循环一个数组,每一行

最近在做一个项目,需要运用到实时聊天功能,分享一下。

    

分为:

界面如何布局以及细节;

如何实现实时更新;

全部代码展示;

        一、界面如何布局以及细节:

        1.说到底,聊天界面就是循环一个数组,每一行为一个单位(item),循环(wx.for)我们设置的装聊天记录的数组。

        2.我们设置每个item中有一个“id”来区别当前这条消息是本人发的,还是对方发的。(在连接系统后可以用两方人的_id来区分)。

        数组设置为:

                 

        3.我们在很多的带有聊天功能的系统中都知道,进入页面和发送信息我们的需要将视角放置到我们刚更新的那条信息,则就有

        ①设置中的一个叫scroll-into-view的属性为一个“toBottom”这个字段:

        ②在循环体中加上id="item{{index}}",意为:设置当前循环体的id为当前item对应下标;

        ③我们在js中初始化聊天内容时每次都设置toBottom为当前循环的长度减一:

this.setData({    toBottom : `item${this.data.chatContent.length - 1}`,})

注意:每一次为toBottom赋值时,应当与周围的this.setData({})分开,否者会赋值失败!

        二、如何实现实时更新:

        首先,我们需要知道微信开发中有一个数据库监听函数:

        实时数据推送 | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/realtime.html

        大概就是说我们在程序中写上了这个,我们就可以在运行时实时监听数据库执行了哪些操作(当然不是所有)。你可以拿去实现一下它的实例代码,看看打印,感受一下。

        三、全部代码展示:

        1.wxml:

{{item.text}}{{item.text}}发送

        2.wxss:

.root {width: 100%;height: 100vh;display: flex;flex-direction: column;align-items: center;}.sv {background-color: white;width: 80%;height: 90vh;}.sendBar {width: 80%;height: 10vh;display: flex;flex-direction: row;align-items: center;justify-content: center;border: 2px solid #1E90FF;}.input {background-color: white;border: 2px solid #1E90FF;}.box {width: 100%;display: flex;flex-direction: row;margin-top: 2px;margin-bottom: 2px;}.item {background-color: white;width: 100%;min-height: 50px;display: flex;flex-direction: row;align-items: center;}.mineText {font-size: 12px;color: white;}.himText {font-size: 12px;color: white;}.adText {position: absolute;margin: auto;right: 20px;}.button {background-color: #1E90FF;width: 60px;height: 30px;display: flex;flex-direction: row;align-items: center;justify-content: center;margin-left: 20rpx;}.buttonText {font-size: 14px;color: white;}.mineAvatorSrc {height: 45px;width: 45px;  position: relative;  margin-left: 20rpx;}.himAvatorSrc {height: 45px;width: 45px;position: relative;right: 20rpx;}.mineTextBox {background-color: #1E90FF;max-width: 50%;border-radius: 15rpx;padding-left: 5px;padding-right: 5px;padding-top: 5px;padding-bottom: 5px;margin: auto;margin-left: 40rpx;display: block;text-overflow:ellipsis;Word-wrap:break-word;}.himTextBox {background-color: #1E90FF;max-width: 50%;border-radius: 15rpx;padding-left: 5px;padding-right: 5px;padding-top: 5px;padding-bottom: 5px;margin: auto;margin-right: 40rpx;display: block;text-overflow:ellipsis;word-wrap:break-word;}

        3.js:

const app = getApp()const db = wx.cloud.database() Page({     data: {    mess : '',    content : [],//聊天信息    mineAvatorSrc : '/images/user_male.jpg',    himAvatorSrc : '/images/user_female.jpg',},    //获取格式化的时间 yyyy-mm-dd-hh:mm-ssgetFormatTime(){let date = new Date();let ymd = date.toISOString().substring(0,10);//年-月-日let hms = date.toTimeString().substring(0,8);//小时-分钟-秒钟console.log(ymd + "-" + hms);return ymd + "-" + hms;//拼接},  //“发送”  sendMess(){    let that = this;    let mess = that.data.mess;let content = that.data.content;let date = that.getFormatTime();let id = that.data.currentId;    wx.showLoading({      title: '发送ing...',      mask: true,      success: (res) => {},      fail: (res) => {},      complete: (res) => {        db.collection('chatTest')        .doc(id)        .update({          data : {            chatContent : content.concat({              id : 0,//用户自己发送,为0  text : mess,  date : date            })          },          success:function(res){            console.log("添加成功!",res);          },          fail:function(err){            console.log("添加失败!",err);          },          complete:function(){            that.setData({              mess : '',            })            wx.hideLoading({              noConflict: true,              success: (res) => {},              fail: (res) => {},              complete: (res) => {},            })          }        })      },    })  },  //初始化数据库的字段  initChatContent(){  let that = this;wx.showLoading({  title: '初始化数据库的字段中...',  mask: true,  success: (res) => {},  fail: (res) => {},  complete: (res) => {  db.collection('chatTest')  .add({  data : {  chatContent : [],//设置一个空的聊天循环体  },  success(res){console.log("初始化成功!",res);that.setData({currentId : res._id//设置当前的id})  },  fail(err){console.log("初始化失败!",err);  },  complete(){wx.hideLoading({  noConflict: true,  success: (res) => {},  fail: (res) => {},  complete: (res) => {},})  }  })  },})  },  //查询聊天  queryChat(){    let that = this;    wx.showLoading({      title: '查询...',      mask: true,      success: (res) => {},      fail: (res) => {},      complete: (res) => {        db.collection('chatTest')        //.doc('4efa204964219ab20003873513331ef9')        .get({          success:function(res){            console.log("查询成功!",res);            if(res.data.length == 0){that.initChatContent();//初始化数据库字段}else{that.setData({currentId : res.data[0]._id,//设置当前的idcontent : res.data[0].chatContent//赋值给当前的聊天循环体})//定位到最后一行that.setData({toBottom : `item${that.data.content.length - 1}`,})}          },          fail:function(err){            console.log("查询失败!",err);          },          complete:function(){            wx.hideLoading({              noConflict: true,              success: (res) => {},              fail: (res) => {},              complete: (res) => {},            })          }        })      },    })  },    //数据库的监听器  dbWatcher(){let that = this;    db.collection('chatTest').where({    })    .watch({      onChange: function (res) {        //监控数据发生变化时触发console.log("res:",res);if(res.docChanges != null){if(res.docChanges[0].dataType == "update"){//数据库监听到的内容let length = res.docChanges[0].doc.chatContent.length;console.log("length : ",length);let value = res.docChanges[0].doc.chatContent[length - 1];//要增添的内容console.log("value : ",value);that.setData({content : that.data.content.concat(value)})//定位到最后一行that.setData({toBottom : `item${that.data.content.length - 1}`,})}}      },      onError:(err) => {        console.error(err)      }    })  },  //获取时间并格式化时间  checkDateAndTime(){    let date = new Date();    let ymd = date.toISOString().substring(0,10);//年-月-日    let time = date.toTimeString().substring(0,8);//时:分:秒    console.log("年-月-日 : ",ymd);    console.log("时:分:秒 : ",time);    let resDate = ymd + '-' + time;    console.log("resDate : ",resDate);},       // 生命周期函数--监听页面加载  onLoad: function (options) {this.dbWatcher();this.queryChat();  },  onReady(){  }, })

现在是单人聊天,实现后你可以将wxml中的

        wx:if="{{item.id == 1}}"和wx:if="{{item.id == 0}}"

还有

        sendMess()中的id : 0 

改一改,然后预览一下,就可以实现电脑和手机实时聊天了!

(写完的闲聊:第一次写博客,还请大家指点。)

来源地址:https://blog.csdn.net/weixin_57788079/article/details/129834620

--结束END--

本文标题: 【微信开发】微信小程序实现实时聊天功能

本文链接: https://lsjlt.com/news/390570.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 【微信开发】微信小程序实现实时聊天功能
    最近在做一个项目,需要运用到实时聊天功能,分享一下。      分为: 界面如何布局以及细节; 如何实现实时更新; 全部代码展示;         一、界面如何布局以及细节:         1.说到底,聊天界面就是循环一个数组,每一行...
    99+
    2023-09-02
    微信小程序 小程序
  • 微信小程序实现聊天室功能
    本文通过实例为大家分享了微信小程序实现聊天室的具体代码,供大家参考,具体内容如下 1.实现效果展示 2.room.wxml <view class="container"...
    99+
    2024-04-02
  • 微信小程序 | 基于小程序+Java+WebSocket实现实时聊天功能
    一、文章前言 此文主要实现在小程序内聊天对话功能,使用Java作为后端语言进行支持,界面友好,开发简单。 二、开发流程及工具准备 2.1、注册微信公众平台账号。 2.2、下载安装Inte...
    99+
    2023-09-06
    小程序 微信小程序 java
  • 如何用PHP实现微信小程序的实时聊天功能?
    如何用PHP实现微信小程序的实时聊天功能?随着移动互联网的发展,微信小程序成为了很多开发者的首选平台。而实时聊天功能作为一种关键的社交功能,很多用户都希望在自己的小程序中实现。本文将介绍如何使用PHP来实现微信小程序的实时聊天功能,并提供具...
    99+
    2023-10-27
    PHP 微信小程序 实时聊天
  • 微信小程序怎么实现仿微信聊天界面
    本篇内容介绍了“微信小程序怎么实现仿微信聊天界面”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!仿微信聊天界面,数据来自mock数据,支持聊天...
    99+
    2023-06-26
  • uni-app小程序实现微信在线聊天功能(私聊/群聊)
    目录聊天信息列表的渲染聊天信息发送的相关问题实现一对一聊天关于websocket建立连接存储连接的用户发送聊天信息 首页新消息提示实现群聊加入房间发送群消息之前学习使用un...
    99+
    2023-02-18
    uni-app小程序微信聊天 uni-app微信小程序聊天
  • 微信小程序实现简单聊天室
    本文实例为大家分享了微信小程序实现简单聊天室的具体代码,供大家参考,具体内容如下 cha.js // pages/chat/chat.js // 获取小程序实例 let app ...
    99+
    2024-04-02
  • HTML5如何实现微信聊天、微信聊天表情编辑器功能
    这篇文章主要为大家展示了“HTML5如何实现微信聊天、微信聊天表情编辑器功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“HTML5如何实现微信聊天、微信聊天表...
    99+
    2024-04-02
  • 微信小程序云开发实现搜索功能
    微信小程序云开发实现搜索功能,供大家参考,具体内容如下 微信小程序使用云开发实现搜索功能有两种情况,一种是简单的搜索用关键字来查询数据,另一种是模糊查询关于关键字的全部数据查询。废话...
    99+
    2024-04-02
  • 微信小程序中如何实现聊天室
    小编给大家分享一下微信小程序中如何实现聊天室,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!微信小程序中如何实现聊天室utils文...
    99+
    2024-04-02
  • 如何利用微信小程序和php实现即时通讯聊天功能
    目录一、PHP7安装Swoole扩展1、自定义安装2、宝塔面板安装PHP swoole扩展二、配置nginx反向代理三、微信小程序socket合法域名配置四、效果演示和代码1、小程序...
    99+
    2024-04-02
  • 微信小程序如何开发微信支付功能
    本篇内容主要讲解“微信小程序如何开发微信支付功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微信小程序如何开发微信支付功能”吧!用户请求开发者后台,发起下单请求发起请求前在小程序端调用&nbs...
    99+
    2023-06-26
  • 微信小程序开发如何实现地图功能
    这篇文章主要讲解了“微信小程序开发如何实现地图功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序开发如何实现地图功能”吧!基本使用地图组件使用起来也很简单。.wxml<map...
    99+
    2023-06-26
  • 微信小程序如何实现简单聊天室
    这篇文章主要介绍了微信小程序如何实现简单聊天室的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序如何实现简单聊天室文章都会有所收获,下面我们一起来看看吧。cha.js// pages/chat/...
    99+
    2023-06-08
  • 微信小程序如何实现转发功能
    这篇文章将为大家详细讲解有关微信小程序如何实现转发功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。微信小程序 转发功能的实现1.当用户将小程序转发到任一群聊之后,可以获...
    99+
    2024-04-02
  • 微信小程序转发功能如何实现
    这篇文章主要介绍“微信小程序转发功能如何实现”,在日常操作中,相信很多人在微信小程序转发功能如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”微信小程序转发功能如何实现”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-26
  • flutter微信聊天输入框功能实现
    目录chat_bottom.dartchat_element_other.dart chat_element_self.dart  chat_input...
    99+
    2023-03-02
    flutter 微信聊天输入框 flutter 聊天输入框 flutter 输入框
  • 【uni-app】小程序实现微信在线聊天(私聊/群聊)
    之前学习使用uni-app简单实现一个在线聊天的功能,今天记录一下项目核心功能的实现过程。页面UI以及功能逻辑全部来源于微信,即时聊天业务的实现使用socket.io,前端使用uni-app开发,后端服务器基于node实现,数据库选择mon...
    99+
    2023-09-03
    uni-app 前端 小程序
  • 微信小程序天气预报功能怎么实现
    这篇文章主要讲解了“微信小程序天气预报功能怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序天气预报功能怎么实现”吧!这里我用的是和风天气的API,打开官网注册或者登陆你的账号...
    99+
    2023-06-30
  • 微信小程序实现翻牌小功能
    本文实例为大家分享了微信小程序翻牌小功能,供大家参考,具体内容如下 页面 <view id="container">     <view wx:for="{{new...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作