基於svelteKit開發仿微信app介面聊天例項
一 、透過雲開發平臺快速建立初始化應用
1.建立相關應用模版請參考連結: 嚐鮮少程式碼高效能的Svelte框架
2.完成建立後就可以在github中檢視到新增的Vite倉庫
二 、 本地編寫 Svelte3聊天室
1.將應用模版克隆到本地
git clone + 專案地址
cd Svelte
git checkout feature/1.0.0
npm install
npm run dev
2.專案結構目錄
3. 自定義導航欄Navbar+選單欄Tabbar
4. 自定義手機端彈窗元件
5. config.js配置檔案
/** * svelte.config.js基礎配置檔案 */ import adapter from '@sveltejs/adapter-auto' import path from 'path' import SvelteProcess from 'svelte-preprocess' /** @type {import('@sveltejs/kit').Config} */ const config = { kit: { adapter: adapter(), vite: { resolve: { alias: { '@': path.resolve('./src'), '@assets': path.resolve('./src/assets'), '@utils': path.resolve('./src/utils') } } } }, // allow you to use Svelte with tools like TypeScript, PostCSS, SCSS, and Less. preprocess: SvelteProcess() }; export default config
6. SvelteKit公共模板及錯誤頁
<script> import { onMount } from 'svelte' import { page } from '$app/stores' import { goto } from '$app/navigation' import { userinfo } from '@/store/index.js' let whiteRoute = ['/auth/login', '/auth/register'] onMount(() => { if(!$userinfo) { goto('/auth/login') }else { if(whiteRoute.includes($page.url.pathname)) { goto('/') }else { goto($page.url.pathname) } } }) </script> <div class="sv__container flexbox flex-col"> <slot /> </div> <style> @import '@/app.scss'; @import '@assets/css/reset.scss'; @import '@assets/css/layout.scss'; @import '@assets/fonts/iconfont.css'; </style>
<!-- //Svelte錯誤頁 --> <script context="module"> export function load({ error, status }) { return { props: { error, status } } } </script> <script> import Navbar from '$lib/Navbar' export let status export let error function goBack() { history.go(-1) } </script> <svelte:head> <title>404錯誤</title> </svelte:head> <Navbar title="Page Error!!!" /> <div class="sv__scrollview flex1"> <div class="sv__page-error flexbox flex-col flex-alignc flex-justifyc"> <div class="sv__page-error-img"> <img src="404.png" alt="" /> </div> <div class="sv__page-error-content"> <div class="c-red fs-36">┗| {status} |┛ 嗷~~</div> <div class="c-999 mt-10">{error.message}</div> <div class="mt-20 sv__btn sv__btn-default" on:click={goBack}><i class="iconfont icon-arrL"></i> 返回首頁</div> </div> </div> </div>
7. 狀態管理+本地儲存
/** * Svelte狀態管理 */ import { writable } from 'svelte/store' const createStore = (value, key) => { const { subscribe, set, update } = writable(value) return { // 持久化儲存 useStorage: () => { const data = localStorage.getItem(key) if(data) { set(JSON.parse(data)) } // 訂閱 subscribe(val => { [null, undefined].includes(val) ? localStorage.removeItem(key) : localStorage.setItem(key, JSON.stringify(val)) }) }, subscribe, set, update, } } export const userinfo = createStore(localStorage.getItem('userinfo')||null, 'userinfo')
8. 實現仿朋友圈下拉重新整理
<!-- //朋友圈模板 --> <script> import { onMount } from 'svelte' import Navbar from '$lib/Navbar' import MeScroll from 'mescroll.js/mescroll.min.js' import 'mescroll.js/mescroll.min.css' onMount(() => { let mescroll = new MeScroll('mescroll', { down: { auto: false, offset: 40, callback: downCallback }, // up: { // callback: upCallback // } }) // 下拉重新整理的回撥 function downCallback() { console.log('下拉重新整理...') setTimeout(() => { // 隱藏下拉重新整理的狀態; mescroll.endSuccess() }, 2000) } // 上拉載入的回撥 page = {num:1, size:10}; num:當前頁 預設從1開始, size:每頁資料條數,預設10 function upCallback(page) { console.log('上拉載入...') var pageNum = page.num; // 頁碼, 預設從1開始 var pageSize = page.size; // 頁長, 預設每頁10條 } }) // ... </script> <Navbar title="朋友圈" center transparent> <svelte:fragment slot="right"> <div><i class="iconfont icon-tupian"></i></div> <div class="ml-30"><i class="iconfont icon-fabu"></i></div> </svelte:fragment> </Navbar> <div class="sv__scrollview flex1"> <div id="mescroll" class="mescroll"> <div> <div class="sv__uzone"> ... </div> </div> </div> </div>
9. 實現聊天功能
<script> /** * @Desc Svelte.js實現聊天編輯框元件 * @Time andy by 2022-04 * @About Q:282310962 wx:xy190310 */ // 編輯器內容 export let editor import { tick, createEventDispatcher } from 'svelte' const dispatch = createEventDispatcher() let editorNode let lastCursor = null // 獲取游標最後位置 function getLastCursor() { let sel = window.getSelection() if(sel && sel.rangeCount > 0) { return sel.getRangeAt(0) } } // 游標位置插入內容 export async function addHtmlInCursor(html) { // ... } // 刪除編輯器內容 export async function deleteHtml() { let range let sel = window.getSelection() if(lastCursor) { sel.removeAllRanges() sel.addRange(lastCursor) } range = getLastCursor() range.collapse(false) document.execCommand('delete') await tick() editorNode.blur() } function handleInput() { editor = editorNode.innerHTML lastCursor = getLastCursor() } function handleClick() { dispatch('click') lastCursor = getLastCursor() } function handleFocus() { dispatch('focus') lastCursor = getLastCursor() } function handleBlur() { dispatch('blur') } </script> <div class="editor" bind:this={editorNode} contenteditable="true" bind:innerHTML={editor} on:input={handleInput} on:click={handleClick} on:focus={handleFocus} on:blur={handleBlur} style="user-select: text; -webkit-user-select: text;" ></div>
三 、 雲端一鍵部署上線應用
1.上傳程式碼
git add . git commit -m '新增你的註釋' git push
2.在日常環境部署
3.配置自定義域名線上上環境上線
4.專案預覽效果
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70003733/viewspace-2902108/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Svelte3-Chat:基於svelte+svelteKit+sass仿微信聊天例項|svelte仿微信
- svelte-webchat:基於Svelte3+SvelteKit仿微信Mac網頁介面聊天例項WebMac網頁
- Svelte3聊天室|svelte+svelteKit仿微信聊天例項|svelte.js開發AppJSAPP
- 基於 Flutter+Dart 聊天例項 | Flutter 仿微信介面聊天室FlutterDart
- 基於 Flutter+Dart 仿微信 App 聊天應用|flutter 聊天介面FlutterDartAPP
- electron+vue 仿微信客戶端聊天|electron 仿微信介面|electron 聊天例項Vue客戶端
- Nuxt+Vue聊天室|nuxt仿微信App介面|nuxt.js聊天例項UXVueAPPJS
- 基於 Taro+react 多端仿微信聊天室|taro 聊天例項分享React
- nuxt.js仿微信App通訊聊天|vue+nuxt聊天|仿微信介面UXJSAPPVue
- angular 版 IM 聊天室|仿微信 App 介面|angular 實戰開發AngularAPP
- vue.js聊天例項|仿微信聊天室vue版Vue.js
- react 實戰開發|react+redux 仿微信聊天介面ReactRedux
- 基於Flutter的仿微信聊天應用Flutter
- vue 高仿微信即時 IM 聊天|仿微信 vue+h5 版|仿微信介面VueH5
- ReactNative 聊天 App 實戰|RN 仿微信介面群聊|朋友圈ReactAPP
- flutter3-dart-chat:基於flutter3+material-ui仿微信App聊天應用FlutterDartUIAPP
- 智慧聊天機器人原始碼—仿微信介面機器人原始碼
- Svelte3.x網頁聊天例項|svelte.js仿微信PC版聊天svelte-webchat網頁JSWeb
- 高仿微信聊天介面長按彈框樣式
- Next.js+React聊天室|Next仿微信桌面端|next.js聊天例項JSReact
- 微信公眾平臺開發JS-SDK開發(影像介面例項)JS
- FlutterWinChat基於flutter3.x+bitsdojo_window+getx電腦端仿微信例項Flutter
- uni-ttLive:基於uniapp+uViewUI短視訊+聊天直播例項APPViewUI
- uni-App 仿微信 App 即時通訊|vue+uniapp 聊天APPVue
- 仿微信APP聊天IM原始碼出售轉讓,高併發運營級APP產品APP原始碼
- 仿微信APP聊天IM原始碼出售轉讓,可定製APP原始碼
- Restlet - 基於Spring的Restlet開發例項RESTSpring
- vue3.0仿製微信app聊天|vue3.x+vant3.x實戰聊天|仿朋友圈VueAPP
- flutter3-winchat桌面端聊天例項|Flutter3+Dart3+Getx仿微信Exe程式FlutterDart
- 仿微信APP聊天IM原始碼出售轉讓,可定製開發,高穩定性高併發全平臺APP原始碼
- 網頁版微信介面呼叫例項網頁
- Restlet - 基於JAX-RS的Restlet開發例項REST
- WEB例項:開發一個聊天室應用Web
- 基於Flutter實現的仿開眼視訊AppFlutterAPP
- HTML5 語音聊天 IM|仿微信語音介面|搖一搖效果HTML
- 高仿掘金App —— 基於 databindingAPP
- iOS 給高仿微信新增直播聊天功能iOS
- iOS Swift 仿微信聊天圖片顯示iOSSwift