svelte-webchat(基于Svelte3+SvelteKit仿微信Mac网页界面聊天实例)
概述
Svelte-Webchat 一款仿制微信网页版类Mac界面聊天项目。使用最新技术栈svelte3.x+svelteKit+sass+mescroll+svelte-layer
等技术开发构建。别致的dock可拖拽/左右滚动菜单。
功能特效
?经典Dock可滚动菜单模式
?流畅的操作体验
?可收缩/展开侧边
?可全屏/恢复窗口、退出弹窗提示
?丰富的视觉效果,自定义桌面虚化主题
?自定义可视化弹窗+滚动条,支持各种自定义定制开发。
文章图片
技术栈
- 编辑器:Vscode
- 框架技术:Svelte^3.46.5+SvelteKit
- 状态管理:svelte/store
- 下拉刷新:mescroll.js
- 滚动条组件:svelte-scrollbar
- 对话框组件:svelte-layer
- sass预处理:sass^1.50.1+svelte-preprocess
文章图片
文章图片
svelte-webchat 还内置了朋友圈模块。
项目结构 非常清晰的分层目录结构。
文章图片
svelte自定义组件(弹窗+滚动条) 项目中无处不在的弹窗及滚动条功能,均是基于svelte.js自定义组件实现功能。
文章图片
- svelte-layer 一款基于svelte3开发的网页对话框组件
https://segmentfault.com/a/1190000041721778 - svelte-scrollbar 一款基于svelte.js虚拟美化滚动条组件
https://segmentfault.com/a/1190000041814107
svelte公共布局模板 svelteKit提供了
__layout.svelte
布局模板及__error.svelte
错误处理页面。文章图片
如上图:整体布局分为左侧+右侧内容区+底部dock菜单。
{#if $userinfo} {:else}{/if}
文章图片
{status} Error! - 锐客网
文章图片
┗| {status} |┛Page Error~~
{error.message}
返回首页
svelte实现聊天 聊天编辑框支持多行文本、光标处插入内容,粘贴截图发送图片+拖拽发送图片。
编辑框监听paste事件
editorEl.addEventListener('paste', function(e) {
e.preventDefault()let cbd = e.clipboardData
let ua = window.navigator.userAgent
if(!(e.clipboardData && e.clipboardData.items)) returnif(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 imgpath = this.result// 返回图片给父组件
dispatch('paste', imgpath)
}
}
}
})
svelte拖拽上传
/**
* svelte拖拽上传图片
* author:andy Q:282310962
*/
function handleDragEnter(e) {
e.stopPropagation()
e.preventDefault()
}
function handleDragOver(e) {
e.stopPropagation()
e.preventDefault()
}
function handleDrop(e) {
e.stopPropagation()
e.preventDefault()handleFileList(e.dataTransfer)
}
// 拖拽文件列表
function handleFileList(filelist) {
let files = filelist.files
if(files.length >= 2) {
svLayer.message({content: '暂时支持拖拽一张图片', icon: 'error', time: 0, xclose: true, shade: true})
return false
}
for(let i = 0;
i < files.length;
i++) {
if(files[i].type != '') {
handleFileAdd(files[i])
}else {
svLayer.message({content: '目前不支持文件夹拖拽功能', icon: 'error', time: 0, xclose: true, shade: true})
}
}
}
function handleFileAdd(file) {
let len = msgList.length
// 消息队列
let msgArr = {
id: `msg_${++len}`,
msgtype: 5,
isme: true,
avatar: '/uimg/img-avatar08.jpg',
author: 'Hison',
msg: '',
imgsrc: '',
videosrc: ''
}if(file.type.indexOf('image') == -1) {
svLayer.message({content: '目前不支持非图片拖拽功能', icon: 'error', time: 0, xclose: true, shade: true})
}else {
let reader = new FileReader()
reader.readAsDataURL(file)
reader.onload = async function() {
let img = this.resultmsgArr.imgsrc = https://www.it610.com/article/img
msgList = msgList.concat(msgArr)await tick()
scrollBottom()
}
}
}
OK,基于svelte.js开发仿微信web版聊天实例就分享到这里。
【svelte-webchat(基于Svelte3+SvelteKit仿微信Mac网页界面聊天实例)】最后附上两个最新实例项目
https://segmentfault.com/a/1190000041357547
https://segmentfault.com/a/1190000040015181
文章图片
推荐阅读
- 基于QT5的文件读取程序的实现
- 笔记|基于JavaWeb的简单博客系统
- Svelte3.x网页聊天实例|Svelte3.x网页聊天实例|svelte.js仿微信PC版聊天svelte-webchat
- 基于SqlSugar的开发框架的循序渐进介绍(1)--框架基础类的设计和使用
- 基于DEM的坡度坡向分析
- 基于Python制作三款起床闹钟的示例代码
- 基于后端云的Android注册登录开发
- react使用 create-react-app 构建基于TypeScript的React前端架构----上
- 基于cxf的app文件上传接口(带回显功能)
- 在 Windows 上搭建基于Android Studio 3.2 的 Flutter 开发环境