vue3.0聊天实例|vue3+vant3.0实战聊天模板

发布时间:2021-01-14
技术:vue3.0+vant-ui3.x+vuex4+vue-router@4+v3popup

概述

基于vue3.x+vant3+vuex+vue-router+v3popup+node.js等技术建构开发的移动端仿微信界面聊天实战项目。这个项目均是使用vue3最新语法编码。实现了消息/emoj表情、图片/视频预览、网址链接查看、红包/朋友圈等功能。

详细

一、前言

随着vue3.x+vite.js构建工具的相继稳定推出,让vue.js在2021年又再一次成为众多开发者受青睐的前端框架。

最近也抽空实践了一把vue3技术,实战了个仿微信app聊天项目。


二、项目预览图

p7.gif  p3.gif


三、实现过程

①、自定义navbar+tabbar组件

项目中的顶部和底部组件均是自定义组件实现开发。

image.png

顶部导航调用非常简单,如下操作即可。

<header-bar :back="false" bgcolor="linear-gradient(to right, #00d2ee, #03a9f4)" fixed>
    <template v-slot:title><div class="flex-c"><img src="@assets/v3-logo.png" style="height:.5rem;" /><em class="ff-gg ml-10">Vue3.0-Chat</em></div></template>
    <template v-slot:right>
        <div><i class="iconfont icon-search"></i></div>
        <div class="ml-30"><i class="iconfont icon-choose"></i></div>
    </template>
</header-bar>

底部tabbar调用。

<!-- >>底部tabbar -->
<tab-bar bgcolor="#f8faff" />

支持如上图这样的凸起按钮


②、vue3自定义弹框组件

V3Popup 基于vue3.x实现的移动端弹出框组件,集合msg、alert、dialog、modal、actionSheet、toast等多种效果。支持20+种自定义参数配置,旨在通过极简的布局、精简的调用方式解决多样化的弹框场景。

未标题-360截图20201228225915303.png


在main.js中全局引入v3popup组件

 import V3Popup from './components/v3popup' 

 app.use(V3Popup) 

v3popup支持标签式及函数式调用方式。

<v3-popup 
    v-model="showDialog"
    title="标题"
    content="<p style='color:#df6a16;padding:10px;'>这里是内容信息!</p>"
    type="android"
    shadeClose="false"
    xclose
    :btns="[
        {text: '取消', click: () => showDialog=false},
        {text: '确认', style: 'color:#f90;', click: handleOK},
    ]"
    @success="handleOpen"
    @end="handleClose"
/>
    <template #content>这里是自定义插槽内容信息!</template>
</v3-popup>
let $el = this.$v3popup({
    title: '标题',
    content: '<p style='color:#df6a16;padding:10px;'>这里是内容信息!</p>',
    type: 'android',
    shadeClose: false,
    xclose: true,
    btns: [
        {text: '取消', click: () => { $el.close(); }},
        {text: '确认', style: 'color:#f90;', click: () => handleOK},
    ],
    onSuccess: () => {},
    onEnd: () => {}
})


③、仿QQ主页效果

p2.gif

基于vue3+vant组件实现下拉刷新、向左滑动出现菜单。

<van-pull-refresh v-model="isLoading" success-text="刷新成功" @refresh="onRefresh">
    <!-- 下拉提示 -->
    <template #pulling>
        <i class="iconfont icon-down"></i> 下拉刷新...
    </template>
    <!-- 释放提示 -->
    <template #loosing>
        <i class="iconfont icon-up"></i> 释放更新...
    </template>

    <!-- ... -->
</van-pull-refresh>
<van-swipe-cell v-for="(item,index) in recordList" :key="index">
    <div class="item vui-cell vui-cell--clickable" :class="{'topmost': item.topMost}" @click="goToChat" @contextmenu.prevent="handleContextPopup">
        <div v-if="item.avatar" class="img">
            <em v-if="item.badge" class="vui__badge">{{item.badge}}</em>
            <em v-if="item.dot" class="vui__badge-dot"></em>
            <img :src="item.avatar" />
        </div>
        <div v-if="item.groups" class="img imgs">
            <em v-if="item.badge" class="vui__badge">{{item.badge}}</em>
            <em v-if="item.dot" class="vui__badge-dot"></em>
            <img v-for="(item2,index2) in item.groups" :key="index2" :src="item2" />
        </div>
        <div class="info flex1">
            <h2 class="title">{{item.title}}</h2>
            <p class="desc clamp1">{{item.subtit}}</p>
        </div>
        <label class="time flex-selft">{{item.time}}</label>
        <i v-if="item.disturb" class="disturb iconfont icon-disturb"></i>
    </div>
    <!-- 右侧按钮 -->
    <template #right>
        <div class="swipe__cell-btns flexbox">
            <div class="vui__btn vui__btn-primary vui__btn--square" @click="handleTopMost">置顶</div>
            <div class="vui__btn vui__btn-primary vui__btn--square" @click="handleDelete">删除</div>
        </div>
    </template>
</van-swipe-cell>

实现起来还是比较简单的,得益于vant3强大的组件库功能。


四、项目结构图

360截图20210108113035106.png



本实例支付的费用只是购买源码的费用,如有疑问欢迎在文末留言交流,如需作者在线代码指导、定制等,在作者开启付费服务后,可以点击“购买服务”进行实时联系,请知悉,谢谢
手机上随时阅读、收藏该文章 ?请扫下方二维码