项目简介

基于uni-app+vue+vuex+uniPop+swiper等技术开发的仿微信聊天室uniapp-chatroom项目,类似vue及小程序api语法使开发更加方便,实现了发送图文消息、表情(gif动图),图片预览、地图位置、红包、仿微信朋友圈等功能

效果图

在H5 / 小程序 / App端测试效果如下 (后续大图统一展示App端)

技术实现

  • 编辑器:HBuilder X
  • 技术框架:uni-app + vue
  • 状态管理:Vuex
  • iconfont图标:阿里字体图标库
  • 自定义导航栏 + 底部Tabbar
  • 弹窗组件:uniPop(基于uni-app封装模态弹窗)
  • 测试环境:H5端 + 小程序 + App端(三端均兼容)
  • 高德地图:vue-amap

引入公共组件及样式

import Vue from 'vue'
import App from './App'// >>>引入css
import './assets/fonts/iconfont.css'
import './assets/css/reset.css'
import './assets/css/layout.css'// >>>引入状态管理
import store from './store'
Vue.prototype.$store = store// >>>引入公共组件
import headerBar from './components/header/header.vue'
import tabBar from './components/tabbar/tabbar.vue'
import popupWindow from './components/popupWindow.vue'
Vue.component('header-bar', headerBar)
Vue.component('tab-bar', tabBar)
Vue.component('popup-window', popupWindow)// >>>引入uniPop弹窗组件
import uniPop from './components/uniPop/uniPop.vue'
Vue.component('uni-pop', uniPop)Vue.config.productionTip = false
App.mpType = 'app'const app = new Vue({...App
})
app.$mount()

uniapp+vuex实现登录拦截

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)export default new Vuex.Store({state: {user: uni.getStorageSync('user'),token: uni.getStorageSync('token'),},mutations: {// 存储tokenSET_TOKEN(state, data) {state.token = datauni.setStorageSync('token', data)},// 存储用户名SET_USER(state, data) {state.user = datauni.setStorageSync('user', data)},...},
})
<script>import { mapState, mapMutations } from 'vuex'import util from '../../utils/util.js'export default {data() {return {formObj: {},}},computed: {...mapState(['user', 'token'])},mounted() {// 判断是否有登录if(this.user){uni.redirectTo({url: '/pages/index/index'})}},methods: {// 提交表单handleSubmit(e) {...}}}
</script>

uniapp实现朋友圈功能

如何实现微信朋友圈页面向下滚动,顶部导航栏由透明变背景色,通过onPageScroll函数实现自定义导航上下滑动自动调整导航栏的透明度

/*** @tpl 朋友圈模板*/<template><view class="flexbox flex_col"><header-bar :isBack="true" title="朋友圈" :bgColor="{background: headerBarBackground}" transparent><text slot="back" class="uni_btnIco iconfont icon-arrL"></text><text slot="iconfont" class="uni_btnIco iconfont icon-publish mr_5" @tap="handlePublish"></text></header-bar><view class="uni__scrollview flex1"><view class="uni-friendZone">...</view></view></view>
</template><script>export default {data() {return {headerBarBackground: 'transparent'}},onPageScroll : function(e) {// console.log("滚动距离为:" + e.scrollTop);this.headerBarBackground = 'rgba(65,168,99,'+e.scrollTop / 200+')'},methods: {...}}
</script><style scoped></style>

uniapp滚动至聊天页面底部

在uni-app将聊天信息滚动到底部有些不好实现,可以借助scroll-view组件scroll-into-view属性,不过只能设置一次,不能动态设置。
只能通过动态改变scroll-top来实现

uni-app通过判断聊天内容高度和scroll-view高度的大小设置滚动距离

<scroll-view id="scrollview" scroll-y="true" :scroll-top="scrollTop" style="height: 100%;"><view class="uni-chatMsgCnt" id="msglistview"><view class="msgitem">xxx</view><view class="msgitem">xxx</view><view class="msgitem">xxx</view>...</view>
</scroll-view>
export default {data() {return {scrollTop: 0,...}},mounted() {this.scrollToBottom()},updated() {this.scrollToBottom()},methods: {// 滚动至聊天底部scrollToBottom(t) {let that = thislet query = uni.createSelectorQuery()query.select('#scrollview').boundingClientRect()query.select('#msglistview').boundingClientRect()query.exec((res) => {// console.log(res)if(res[1].height > res[0].height){that.scrollTop = res[1].height - res[0].height}})},...}
}

基于uniapp开发聊天室的介绍就到这里,后续继续为大家分享实战项目,希望多多支持。??

项目中用到的自定义弹窗、自定义导航栏可参看下面链接。
uni-app自定义Modal弹窗组件|仿ios、微信弹窗效果
uni-app自定义导航栏按钮|uniapp仿微信顶部导航条

[uni-app]聊天App实例相关推荐

  1. 基于android的即时通讯APP 聊天APP

    基于android的即时通讯APP 或者 聊天APP 一 项目概述 该项目是基于Android 的聊天APP系统,该APP包含前台,后台管理系统,前台包含用户通讯录,用户详情,用户聊天服务,用户二维码 ...

  2. uniapp可以封装组件嘛_uniapp聊天App实例|vue+uniapp仿微信界面|红包|朋友圈

    一.功能阐述 今天给大家分享的是基于UniApp+Vue+Vuex+swiper+uniPop等技术开发的仿微信原生App聊天室|仿微信聊天界面实例项目uniapp-chatroom,实现了发送图文消 ...

  3. native聊天界面 react_ReactNative 仿微信聊天 App 实例分享|RN 仿朋友圈

    今天给大家分享的是 RN 聊天室项目,基于 react-native+react-navigation+react-redux+react-native-image-picker+rnPop 等技术实 ...

  4. uniapp开发聊天APP踩坑记录

    最近工作重心转移到了uniapp上,有一说一,这个框架跨端确实牛逼,一套代码能一次编译到多端使用.但随之而来的兼容性问题也是层出不穷,同样的在面临APP底层的改动也显得力不从心.同时,uniapp的性 ...

  5. 在线聊天App研发说明(android学习总结)

    初识android 确定学习android之后,开始动手,跟之前做过android的同事,要了开发环境和一本电子书<深入浅出Android--Google手持设备应用程序设计>.书很薄只有 ...

  6. 开发社交聊天APP需要注意什么?如何快速开发聊天功能

    随着互联网的发展,人们的沟通方式也在悄悄发生变化,由原来的面对面沟通,发展为网上沟通.让大家日常生活的通讯越来越方便了,各种APP层出不穷.那么,想开发一款社交聊天并进行运营,需要注意哪些方面?如何快 ...

  7. Netty+SpringBoot+FastDFS+Html5实现聊天App

    Netty+SpringBoot+FastDFS+Html5实现聊天App github链接: https://github.com/ShimmerPig... 已将前端代码上传至github,修改a ...

  8. 挖洞经验 | 看我如何发现“小火车托马斯”智能玩具APP聊天应用漏洞

    最近,我向智能玩具厂商ToyTalk提交了两个APP相关的漏洞并获得了$1750美金奖励,目前,漏洞已被成功修复,在此我打算公开详细的漏洞发现过程,以便其他APP开发人员将这种脆弱性威胁纳入开发过程的 ...

  9. Netty+SpringBoot+FastDFS+Html5实现聊天App详解(一)

    Netty学习 Netty+SpringBoot+FastDFS+Html5实现聊天App,项目介绍:https://segmentfault.com/a/11... Netty+SpringBoot ...

最新文章

  1. 我扔掉FPN来做目标检测,效果竟然这么强!YOLOF开源:你只需要看一层特征
  2. php wamp 环境好吗,phpstudy和wamp哪个好
  3. 皮一皮:家里出了个不孝子...
  4. mysql 安装dso命令_使用tengine DSO 来动态编译安装第三方模块(Lua
  5. Eclipse 4.4.2 取消空格键代码上屏
  6. 修改USB固件库的Customer_HID例程
  7. php soap调用asp.net webservice
  8. DB2 SQL Error: SQLCODE=-668, SQLSTATE=57016错误解决方法
  9. ios版qq聊天记录的导出
  10. mysql注入扫描网站漏洞工具_SQL注入漏洞扫描工具
  11. 比较两个记事本文件内容的差异
  12. 使用POI提取Word文件的内容(纯文本、带html格式)
  13. 3dmax捕捉的基本操作2
  14. 雷柏V500机械键盘——重复按键故障原因之一
  15. Python入门到放弃系列一
  16. 七年级期末复习寒假(语文第一学期)
  17. 用Django搭建一个文档中转站(云盘)
  18. 基于Spring等框架的会议管理系统
  19. css 输入框中文字水平居中,css水平居中,文字垂直居中
  20. cfe刷机教程 斐讯k3_斐讯K3全版本刷机教程2019-不用降级开telnet拆机TTL

热门文章

  1. ffmpeg mp4和yuv互转
  2. 邮件附件批量下载小程序
  3. h5打开麦克风权限录音_h5打开麦克风权限录音_原来电脑上自带录音功能,很多人还不知道,真的太实用了......
  4. 缺失MSVCR120.dll文件
  5. springboot中如何使用RedisTemplate存储实体对象
  6. 科技爱好者周刊(第 212 期):人生不短
  7. PH15-7Mo是什么?
  8. 非阻塞IO 和阻塞IO
  9. 首页布局跟小程序如何配置Iconfont—小程序入门与实战(七)
  10. Glusterfs + heketi使用