肿瘤康复网,内容丰富有趣,生活中的好帮手!
肿瘤康复网 > vue仿微信网页版|vue+web端聊天室|仿微信客户端vue版

vue仿微信网页版|vue+web端聊天室|仿微信客户端vue版

时间:2020-02-25 11:56:24

相关推荐

一、项目介绍

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

二、技术框架

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

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

◆引入公共及全局组件配置components.js

/*引入公共及全局组件配置*/ // 引入侧边栏及联系人import winBar from './components/winbar'import sideBar from './components/sidebar'import recordList from './components/recordList'import contactList from './components/contact'// 引入jqueryimport $ 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: "e1dedc6bdd765d46693986ff7ff969f4",plugin: ["AMap.Autocomplete", //输入提示插件"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 class="vChat-wrapper flexbox flex-alignc"><div class="vChat-panel" style="background-image: url(src/assets/img/placeholder/vchat__panel-bg01.jpg);"><div class="vChat-inner flexbox"><!-- //顶部按钮(最大、最小、关闭) --><win-bar></win-bar><!-- //侧边栏 --><side-bar></side-bar><keep-alive><router-view class="flex1 flexbox"></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 class="me">\<div class="content">\<p class="author">王梅(Fine)</p>\<div class="msg picture"><img class="img__pic" src="'+ _img + '" preview="1" /></div>\</div>\<a class="avatar" 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);$("#J__swiperEmotion .swiper-wrapper").html($("." + _tmpl).html());emotionSwiper = new Swiper('#' + _tmpl, {// loop: true,// autoplay: true,// 分页器 pagination: {el: '.pagination-emotion', clickable: true,},});}// 表情模板切换$("body").on("click", "#J__emotionFootTab ul li.swiperTmpl", function () {// 先销毁swiperemotionSwiper && 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仿微信网页版|vue+web端聊天室|仿微信客户端vue版》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。