全国服务热线:4008-888-888

技术知识

贵州微信小程序制作_vue+web端仿微信网页版谈天室

vue+web端仿微信网页版聊天室功能       这篇文章主要介绍了vue+web端仿微信网页版聊天室功能,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下

一、项目介绍

基于Vue2.5.6+Vuex+vue-cli+vue-router+vue-gemini-scrollbar+swiper+elementUI等技术混合架构开发的仿微信web端聊天室——vueWebChat,实现了发送消息、表情(动图),图片、视频预览,右键菜单、截屏、截图可直接粘贴至文本框进行发送。

二、技术框架

MVVM框架:Vue2.5.6
状态管理:Vuex
页面路由:Vue-router
iconfont图标:阿里巴巴字体图标库
自定义滚动条:vue-gemini-scrollbar
弹窗组件:element-ui(饿了么前端UI库)
环境配置:node.js + cnpm + webpack
高德地图:vue-amap
图片预览:vue-photo-preview

◆ 点击右上角最大化按钮,可以进行全屏切换

◆ ponents.js

 引入公共及全局组件配置
// 引入侧边栏及联系人
import winBar from './components/winbar'
import sideBar from './components/sidebar'
import recordList from './components/recordList'
import contactList from './components/contact'
// 引入jquery
import $ from 'jquery'
// 引入wcPop弹窗插件
import wcPop from './assets/js/wcPop/wcPop'
import './assets/js/wcPop/skin/wcPop.css'
// 引入饿了么pc端UI库
import elementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
// 引入图片预览插件
import photoPreview from 'vue-photo-preview'
import 'vue-photo-preview/dist/skin.css'
// 引入自定义滚动条插件
import geminiScrollbar from 'vue-gemini-scrollbar'
// 引入加载更多插件
import infiniteLoading from 'vue-infinite-scroll'
// 引入高德地图
import vueAMap from 'vue-amap'
const install = Vue = {
 // 注册组件
 ponent('win-bar', winBar)
 ponent('side-bar', sideBar)
 ponent('record-list', recordList)
 ponent('contact-list', contactList)
 // 应用实例
 Vue.use(elementUI)
 Vue.use(photoPreview, {
 loop: false,
 fullscreenEl: true, //是否全屏
 arrowEl: true, //左右按钮
 Vue.use(geminiScrollbar)
 Vue.use(infiniteLoading)
 Vue.use(vueAMap)
 vueAMap.initAMapApiLoader({
 key: "e1dedc6bdd765dff7ff969f4",
 plugin: [
 "plete", //输入提示插件
 "AMap.PlaceSearch", //POI搜索插件
 "AMap.Scale", //右下角缩略图插件 比例尺
 "AMap.OverView", //地图鹰眼插件
 "AMap.ToolBar", //地图工具条
 "AMap.MapType", //类别切换控件,实现默认图层与卫星图、实施交通图层之间切换的控制
 "AMap.PolyEditor", //编辑 折线多,边形
 "AMap.CircleEditor", //圆形编辑器插件
 "AMap.Geolocation" //定位控件,用来获取和展示用户主机所在的经纬度位置
 uiVersion: "1.0"
export default install

◆ 面模板

 template 
 div id="app" 
 div 
 div 
 div 
 !-- //顶部按钮(最大、最小、关闭) -- 
 win-bar /win-bar 
 !-- //侧边栏 -- 
 side-bar /side-bar 
 keep-alive 
 router-view /router-view 
 /keep-alive 
 /div 
 /div 
 /div 
 /div 
 /template 
 script 
export default {
 name: 'app',
 data () {
 return {
 methods: {
 /script 
 style 
/* 引入公共样式 */
@import './assets/fonts/iconfont.css';
@import './assets/css/reset.css';
@import './assets/css/layout.css';
 /style 

◆ vue文本框实现截图粘贴发送图片:

// 【截图粘贴图片】
document.getElementById('J__wcEditor').addEventListener('paste',function(e){
 var cbd = e.clipboardData;
 var ua = window.navigator.userAgent;
 // 没有数据
 if (!(e.clipboardData e.clipboardData.items)) {
 return;
 // Mac平台下Chrome49版本以下 复制Finder中的文件的Bug Hack掉
 if(cbd.items cbd.items.length === 2 cbd.items[0].kind === "string" cbd.items[1].kind === "file" 
 cbd.types cbd.types.length === 2 cbd.types[0] === "text/plain" cbd.types[1] === "Files" 
 ua.match(/Macintosh/i) Number(ua.match(/Chrome\/(\d{2})/i)[1]) 49){
 return;
 for(var i = 0; i cbd.items.length; i++){
 var item = cbd.items[i];
 console.log(item);
 console.log(item.kind);
 if(item.kind == "file"){
 var blob = item.getAsFile();
 if(blob.size === 0){
 return;
 // 插入图片记录
 var reader = new FileReader();
 reader.readAsDataURL(blob);
 reader.onload = function(){
 var _img = this.result;
 var _tpl = [
 ' li \
 div \
 p 王梅(Fine) /p \
 div img src="'+ _img + '" preview="1" / /div \
 /div \
 a href="/contact/uinfo" img src="src/assets/img/uimg/u__chat-img11.jpg" / /a \
 /li '
 ].join("");
 $("#J__chatMsgList").append(_tpl);
 setTimeout(() = {
 $("#J__geminiScrollbar .gm-scroll-view").animate({ scrollTop: $("#J__chatMsgList").height() }, 0);
 $(".fixGeminiscrollHeight").show();
 setTimeout(() = { $(".fixGeminiscrollHeight").hide();}, 300);
 }, 17);
});

◆ 表情处理及视频预览:

// 【表情、动图swiper切换模块】--------------------------
var emotionSwiper;
function setEmotionSwiper(tmpl) {
 var _tmpl = tmpl tmpl : $("#J__emotionFootTab ul li.cur").attr("tmpl");
 $("#J__swiperEmotion .swiper-container").attr("id", _tmpl);
 $("#());
 emotionSwiper = new Swiper('#' + _tmpl, {
 // loop: true,
 // autoplay: true,
 // 分页器
 pagination: {
 el: '.pagination-emotion', clickable: true,
// 表情模板切换
$("body").on("click", "#J__emotionFootTab ul li.swiperTmpl", function () {
 // 先销毁swiper
 emotionSwiper emotionSwiper.destroy(true, true);
 var _tmpl = $(this).attr("tmpl");
 $(this).addClass("cur").siblings().removeClass("cur");
 setEmotionSwiper(_tmpl);
// 【视频预览模块】--------------------------
$("body").on("click", "#J__chatMsgList li .video", function () {
 var _src = $(this).find("img").attr("videoUrl"), _video;
 var videoIdx = wcPop({
 id: 'wc__previewVideo',
 skin: 'fullscreen',
 // content: ' video id="J__videoPreview" width="100%" height="100%" controls="controls" x5-video-player-type="h5" x5-video-player-fullscreen="true" webkit-playsinline preload="auto" /video ',
 content: ' video id="J__videoPreview" width="100%" height="100%" controls="controls" preload="auto" /video ',
 shade: false,
 xclose: true,
 style: 'background: #000;padding-top:48px;',
 anim: 'scaleIn',
 show: function(){
 _video = document.getElementById("J__videoPreview");
 _video.src = _src;
 if (_video.paused) {
 _video.play();
 } else {
 _video.pause();
 // 播放结束
 _video.addEventListener("ended", function(){
 _video.currentTime = 0;
 // 退出全屏
 _video.addEventListener("x5videoexitfullscreen", function(){
 wcPop.close(videoIdx);
});

总结

以上所述是小编给大家介绍的vue+web端仿微信网页版聊天室功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对凡科网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!




在线客服

关闭

客户服务热线
4008-888-888


点击这里给我发消息 在线客服

点击这里给我发消息 在线客服