登录  /  注册
博主信息
博文 291
粉丝 0
评论 0
访问量 337238
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
基于svelteKit开发仿微信app界面聊天实例
原创
666人浏览过

一 、通过云开发平台快速创建初始化应用

1.创建相关应用模版请参考链接:尝鲜少代码高性能的Svelte框架

2.完成创建后就可以在github中查看到新增的Vite仓库

file

二 、 本地编写 Svelte3聊天室

1.将应用模版克隆到本地

  • 首先假定你已经安装了Git、node,没有安装请移步node官网进行安装。克隆项目:
  1. git clone + 项目地址
  • 进入项目文件
  1. cd Svelte
  • 切换到feature/1.0.0 分支上
  1. git checkout feature/1.0.0
  • 安装依赖包
  1. npm install
  • 启动服务
  1. npm run dev

这里打开浏览器8080端口,并出现默认页面。

2.项目结构目录

file

3.自定义导航栏Navbar+菜单栏Tabbar

项目中顶部导航条及底部菜单栏均是基于svelte定制开发的自定义组件。

file

file

file

4.自定义手机端弹窗组件

svelte-popup 一款基于Svelte3.x开发自定义多功能svPopup弹出框组件,支持超过20+参数自由配置、组件式+函数式混合调用方式。

file

5.config.js配置文件

如何在svelte.js项目中使用sass/less编写样式?可以安装 sass 及 svelte-preprocess 依赖。

file

  1. /**
  2. * svelte.config.js基础配置文件
  3. */
  4. import adapter from '@sveltejs/adapter-auto'
  5. import path from 'path'
  6. import SvelteProcess from 'svelte-preprocess'
  7. /** @type {import('@sveltejs/kit').Config} */
  8. const config = {
  9. kit: {
  10. adapter: adapter(),
  11. vite: {
  12. resolve: {
  13. alias: {
  14. '@': path.resolve('./src'),
  15. '@assets': path.resolve('./src/assets'),
  16. '@utils': path.resolve('./src/utils')
  17. }
  18. }
  19. }
  20. },
  21. // allow you to use Svelte with tools like TypeScript, PostCSS, SCSS, and Less.
  22. preprocess: SvelteProcess()
  23. };
  24. export default config

6.SvelteKit公共模板及错误页

使用svelteKit构建的项目,公共模板layout.svelte及错误页error.svelte配置如下。

  1. <script>
  2. import { onMount } from 'svelte'
  3. import { page } from '$app/stores'
  4. import { goto } from '$app/navigation'
  5. import { userinfo } from '@/store/index.js'
  6. let whiteRoute = ['/auth/login', '/auth/register']
  7. onMount(() => {
  8. if(!$userinfo) {
  9. goto('/auth/login')
  10. }else {
  11. if(whiteRoute.includes($page.url.pathname)) {
  12. goto('/')
  13. }else {
  14. goto($page.url.pathname)
  15. }
  16. }
  17. })
  18. </script>
  19. <div class="sv__container flexbox flex-col">
  20. <slot />
  21. </div>
  22. <style>
  23. @import '@/app.scss';
  24. @import '@assets/css/reset.scss';
  25. @import '@assets/css/layout.scss';
  26. @import '@assets/fonts/iconfont.css';
  27. </style>
  1. <!-- //Svelte错误页 -->
  2. <script context="module">
  3. export function load({ error, status }) {
  4. return {
  5. props: { error, status }
  6. }
  7. }
  8. </script>
  9. <script>
  10. import Navbar from '$lib/Navbar'
  11. export let status
  12. export let error
  13. function goBack() {
  14. history.go(-1)
  15. }
  16. </script>
  17. <svelte:head>
  18. <title>404错误</title>
  19. </svelte:head>
  20. <Navbar title="Page Error!!!" />
  21. <div class="sv__scrollview flex1">
  22. <div class="sv__page-error flexbox flex-col flex-alignc flex-justifyc">
  23. <div class="sv__page-error-img">
  24. <img src="404.png" alt="" />
  25. </div>
  26. <div class="sv__page-error-content">
  27. <div class="c-red fs-36">┗| {status} |┛ 嗷~~</div>
  28. <div class="c-999 mt-10">{error.message}</div>
  29. <div class="mt-20 sv__btn sv__btn-default" on:click={goBack}><i class="iconfont icon-arrL"></i> 返回首页</div>
  30. </div>
  31. </div>
  32. </div>

7.状态管理+本地存储

svelte框架也提供了创建状态管理svelte/store,配置localStorage本地化存储服务。

  1. /**
  2. * Svelte状态管理
  3. */
  4. import { writable } from 'svelte/store'
  5. const createStore = (value, key) => {
  6. const { subscribe, set, update } = writable(value)
  7. return {
  8. // 持久化存储
  9. useStorage: () => {
  10. const data = localStorage.getItem(key)
  11. if(data) {
  12. set(JSON.parse(data))
  13. }
  14. // 订阅
  15. subscribe(val => {
  16. [null, undefined].includes(val) ? localStorage.removeItem(key) : localStorage.setItem(key, JSON.stringify(val))
  17. })
  18. },
  19. subscribe,
  20. set,
  21. update,
  22. }
  23. }
  24. export const userinfo = createStore(localStorage.getItem('userinfo')||null, 'userinfo')

8.实现仿朋友圈下拉刷新

使用 svelte.js+mescroll 实现仿朋友圈下拉转圈功能。

file

  1. <!-- //朋友圈模板 -->
  2. <script>
  3. import { onMount } from 'svelte'
  4. import Navbar from '$lib/Navbar'
  5. import MeScroll from 'mescroll.js/mescroll.min.js'
  6. import 'mescroll.js/mescroll.min.css'
  7. onMount(() => {
  8. let mescroll = new MeScroll('mescroll', {
  9. down: {
  10. auto: false,
  11. offset: 40,
  12. callback: downCallback
  13. },
  14. // up: {
  15. // callback: upCallback
  16. // }
  17. })
  18. // 下拉刷新的回调
  19. function downCallback() {
  20. console.log('下拉刷新...')
  21. setTimeout(() => {
  22. // 隐藏下拉刷新的状态;
  23. mescroll.endSuccess()
  24. }, 2000)
  25. }
  26. // 上拉加载的回调 page = {num:1, size:10}; num:当前页 默认从1开始, size:每页数据条数,默认10
  27. function upCallback(page) {
  28. console.log('上拉加载...')
  29. var pageNum = page.num; // 页码, 默认从1开始
  30. var pageSize = page.size; // 页长, 默认每页10条
  31. }
  32. })
  33. // ...
  34. </script>
  35. <Navbar title="朋友圈" center transparent>
  36. <svelte:fragment slot="right">
  37. <div><i class="iconfont icon-tupian"></i></div>
  38. <div class="ml-30"><i class="iconfont icon-fabu"></i></div>
  39. </svelte:fragment>
  40. </Navbar>
  41. <div class="sv__scrollview flex1">
  42. <div id="mescroll" class="mescroll">
  43. <div>
  44. <div class="sv__uzone">
  45. ...
  46. </div>
  47. </div>
  48. </div>
  49. </div>

9.实现聊天功能

聊天页面文本框支持文字+emoj混排,光标处插入表情、网址/图片/视频预览、红等功能。并且底部文本框单独抽离了一个editor.svelte组件。

file

  1. <script>
  2. /**
  3. * @Desc Svelte.js实现聊天编辑框组件
  4. * @Time andy by 2022-04
  5. * @About Q:282310962 wx:xy190310
  6. */
  7. // 编辑器内容
  8. export let editor
  9. import { tick, createEventDispatcher } from 'svelte'
  10. const dispatch = createEventDispatcher()
  11. let editorNode
  12. let lastCursor = null
  13. // 获取光标最后位置
  14. function getLastCursor() {
  15. let sel = window.getSelection()
  16. if(sel && sel.rangeCount > 0) {
  17. return sel.getRangeAt(0)
  18. }
  19. }
  20. // 光标位置插入内容
  21. export async function addHtmlInCursor(html) {
  22. // ...
  23. }
  24. // 删除编辑器内容
  25. export async function deleteHtml() {
  26. let range
  27. let sel = window.getSelection()
  28. if(lastCursor) {
  29. sel.removeAllRanges()
  30. sel.addRange(lastCursor)
  31. }
  32. range = getLastCursor()
  33. range.collapse(false)
  34. document.execCommand('delete')
  35. await tick()
  36. editorNode.blur()
  37. }
  38. function handleInput() {
  39. editor = editorNode.innerHTML
  40. lastCursor = getLastCursor()
  41. }
  42. function handleClick() {
  43. dispatch('click')
  44. lastCursor = getLastCursor()
  45. }
  46. function handleFocus() {
  47. dispatch('focus')
  48. lastCursor = getLastCursor()
  49. }
  50. function handleBlur() {
  51. dispatch('blur')
  52. }
  53. </script>
  54. <div
  55. class="editor"
  56. bind:this={editorNode}
  57. contenteditable="true"
  58. bind:innerHTML={editor}
  59. on:input={handleInput}
  60. on:click={handleClick}
  61. on:focus={handleFocus}
  62. on:blur={handleBlur}
  63. style="user-select: text; -webkit-user-select: text;"
  64. ></div>

以上就是基于svelte.js+svelteKit开发仿微信app界面聊天实例的一些分享,希望对大家有所帮助!

三 、 云端一键部署上线应用

1.上传代码

  1. git add .
  2. git commit -m '添加你的注释'
  3. git push

2.在日常环境部署

一键进行应用部署。在应用详情页面点击日常环境的「部署」按钮进行一键部署,部署状态变成绿色已部署以后可以点击访问部署网站查看效果。

file

3.配置自定义域名在线上环境上线

  • 配置线上环境自定义域名。在功能开发验证完成后要在线上环境进行部署,在线上环境的「部署配置」-「自定义域名」中填写自己的域名。例如我们添加一个二级域名 company.workbench.fun 来绑定我们部署的前端应用。然后复制自定义域名下方的API网关地址对添加的二级域名进行CNAME配置。

file

  • 配置CNAME地址。复制好 API网关域名地址后,来到你自己的域名管理平台(此示例中的域名管理是阿里云的域名管理控制台,请去自己的域名控制台操作)。添加记录的「记录类型」选择「CNAME」,在「主机记录」中输入你要创建的二级域名,这里我们输入「company」,在「记录值」中粘贴我们之前复制的 API网关域名地址,「TTL」保留默认值或者设置一个你认为合适的值即可。

file

  • 在线上环境部署上线。回到云开发平台的应用详情页面,按照部署的操作,点击线上环境的「部署按钮」,部署完成以后就在你自定义的域名进行了上线。CNAME 生效之后,我们输入 company.workbench.fun(示例网址) 可以打开部署的页面。至此,如何部署一个应用到线上环境,如何绑定自己的域名来访问一个线上的应用就完成了,赶紧部署自己的应用到线上环境,用自己的域名玩起来吧

file

4.项目预览效果

file

file

file

file

file

file

一键创建svelte应用模版链接 :https://workbench.aliyun.com/application/front/create?fromConfig=25&fromRepo=sol_github_25

参考文献:https://www.cnblogs.com/xiaoyan2017/p/16110203.html

本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学