成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從零搭建一款PC頁面編輯器PC-Dooring

系統 Linux
沒有太多時間做PC端搭建化項目, 好在搭建平臺很多原理都是通用的, 所以早在去年我就開發好了面向PC端的編輯器PC-Dooring, 雖然在設計上還有些不足(在后面的內容中會提到) , 但是基本模型已經實現, 接下來就和大家一起分享一下具體的實現.

[[392395]]

之前一直忙著調研lowcode平臺和開發以下兩個項目:

  • H5編輯器H5-Dooring ,
  • 可視化大屏編輯器V6.Dooring

沒有太多時間做PC端搭建化項目, 好在搭建平臺很多原理都是通用的, 所以早在去年我就開發好了面向PC端的編輯器PC-Dooring, 雖然在設計上還有些不足(在后面的內容中會提到) , 但是基本模型已經實現, 接下來就和大家一起分享一下具體的實現.

為了保證文章整體的邏輯性和條理性, 我將可視化搭建平臺的具體的實現劃分為了以下幾個部分:

  • PC編輯器效果展示
  • 整體技術架構
  • 可視化搭建技術實現方式
  • 編輯器核心思路
  • 編輯器架構模型
  • 如何開發標準物料組件
  • 編輯器后期規劃

PC編輯器效果展示

pc-dooring

在上面的演示中, 組件庫方式和H5-Dooring類似, 只不過組件庫筆者采用了PC端專屬的組件庫antd, 所以我們可以將antd支持的任何組件集成進PC-Dooring.

整體技術架構

整體技術架構和H5-Dooring類非常相似, 也是遵循筆者的產品設計哲學—— 不要讓用戶思考. 降低一切拖拽復雜度, 采用智能網格的交互模式來實現(這種設計方式有一定的局限, 僅供大家參考, 當然也可以使用V6.Dooring的自由布局模式). 整體架構如下圖所示:

 

image.png

由上圖我們可以看出編輯器主要分為如下幾個部分:

  • 組件物料
  • 畫布區
  • 屬性編輯區
  • 功能輔助
  • 其他

目前組件物料主要實現了基礎組件, 可視化組件和 媒體組件, 其他類的組件實現也類似, 技術整體實現我們會在下面介紹.

可視化搭建技術實現方式

image.png

前端框架我們還是使用的React, 當然大家也可以使用Vue3.0, 原理都是相通的, 不同插件之間也提供了多框架的支持. 編輯器核心的一環就是組件拖拽, 這里筆者使用了社區比較強大且穩定的庫react-dnd, 其拖拽分為兩個部分, 一個是從組件區拖拽到畫布區, 另一個是畫布區內部組件的自由拖拽. 我們可以用原生H5的拖放API來實現第一部分的功能, 本質是將拖動源攜帶的數據傳到畫布制定區域, 目標源監聽事件拿到攜帶的數據動態渲染出實際的組件. 過程如下:

image.png

當然深入研究過react-dnd的朋友都知道, 以上兩個功能通過react-dnd都可以實現, 大家可以參考它的官網react-dnd官網學習研究具體實現流程, 也可以直接參考PC-Dooring源碼.

至于組件庫, 我們可以采用任何我們熟悉的組件庫, 比如antd, element, zant等, 組件物料需要遵循我們約定的DSL協議, 這里大家可以參考工業級協議標準odata規范. 有了一定的規范, 我們就可以包裝標準的組件物料從而集成第三方組件庫了.

至于功能輔助模塊和狀態管理, 我們可以采用如mobx, redux, dva等來實現, 最終目的就是讓編輯器不同部分能相互關聯, 實時更新組件狀態, 以及數據回傳能力.

編輯器核心思路

編輯器核心實現思路筆者之前也分析了幾個現有方案, 發現字節魔方的思路很貼切, 這里附上一個原理圖:

image.png

核心就是通過編輯器產生的有效詞法數據, 讓渲染器能解析渲染成可用的HTML頁面.

編輯器整體架構模型

編輯器整體架構模型主要是為了讓大家全局的了解可視化編輯器的實現思路, 以及未來的規劃方向, 筆者做了一個基本的草圖, 如下:

image.png

如何開發標準物料組件

開發標準組件物料需要遵循我們編輯器內部的數據協議和組件開發規范, 在PC-Dooring中開發組件主要由以下幾部分組成:

  • 組件代碼
  • schema定義
  • template定義

組件代碼就是組件內部具體的實現, 如下案例:

  1. import React, { memo } from 'react'
  2. import { ITextConfig } from './schema'
  3. import logo from '@/assets/text.png'
  4. const Text = memo((props: ITextConfig & { isTpl: boolean }) => { 
  5.   const { align, text, fontSize, color, lineHeight, isTpl } = props; 
  6.   return ( 
  7.     <> 
  8.       {isTpl ? ( 
  9.         <div> 
  10.           <img src={logo} alt=""></img> 
  11.         </div> 
  12.       ) : ( 
  13.         <div style={{ color, textAlign: align, fontSize, lineHeight }}>{text}</div> 
  14.       )} 
  15.     </> 
  16.   ); 
  17. }); 
  18. export default Text; 

 schema定義了組件的屬性約束, 可編輯項類型以及默認值, 如下:

  1. import { 
  2.   IColorConfigType, 
  3.   INumberConfigType, 
  4.   ISelectConfigType, 
  5.   ITextConfigType, 
  6.   TColorDefaultType, 
  7.   TNumberDefaultType, 
  8.   TSelectDefaultType, 
  9.   TTextDefaultType, 
  10. from '@/components/FormComponents/types'
  11.  
  12. export type TTextSelectKeyType = 'left' | 'right' | 'center'
  13. export type TTextEditData = Array< 
  14.   ITextConfigType | IColorConfigType | INumberConfigType | ISelectConfigType<TTextSelectKeyType> 
  15. >; 
  16. export interface ITextConfig { 
  17.   text: TTextDefaultType; 
  18.   color: TColorDefaultType; 
  19.   fontSize: TNumberDefaultType; 
  20.   align: TSelectDefaultType<TTextSelectKeyType>; 
  21.   lineHeight: TNumberDefaultType; 
  22.  
  23. export interface ITextSchema { 
  24.   editData: TTextEditData; 
  25.   config: ITextConfig; 
  26. const Text: ITextSchema = { 
  27.   editData: [ 
  28.     { 
  29.       key'text'
  30.       name'文字'
  31.       type: 'Text'
  32.     }, 
  33.     { 
  34.       key'color'
  35.       name'標題顏色'
  36.       type: 'Color'
  37.     }, 
  38.     { 
  39.       key'fontSize'
  40.       name'字體大小'
  41.       type: 'Number'
  42.     }, 
  43.     { 
  44.       key'align'
  45.       name'對齊方式'
  46.       type: 'Select'
  47.       range: [ 
  48.         { 
  49.           key'left'
  50.           text: '左對齊'
  51.         }, 
  52.         { 
  53.           key'center'
  54.           text: '居中對齊'
  55.         }, 
  56.         { 
  57.           key'right'
  58.           text: '右對齊'
  59.         }, 
  60.       ], 
  61.     }, 
  62.     { 
  63.       key'lineHeight'
  64.       name'行高'
  65.       type: 'Number'
  66.     }, 
  67.   ], 
  68.   config: { 
  69.     text: '我是文本'
  70.     color: 'rgba(60,60,60,1)'
  71.     fontSize: 18, 
  72.     align: 'center'
  73.     lineHeight: 2, 
  74.   }, 
  75. }; 
  76. export default Text; 

template主要規定了組件在畫布中展示的基本方式, 如下:

  1. const template = { 
  2.   type: 'Text'
  3.   h: 20, 
  4.   displayName: '文本組件'
  5. }; 
  6. export default template; 

當然大家也可以擴展其定義或者將schema和template合并. 只要一個組件符合了以上約定, 都可以被我們編輯器所消費.

編輯器后期規劃

PC編輯器目前仍存在一些問題沒有很好的解決, 比如布局方式的局限性導致必須橫向擴展很多組件才能滿足不同用戶的個性化需求, 其次就是組件聯動機制, 需要統一數據中心來管理, 后面會在H5-Dooring 中展示具體的實現方式, 大家感興趣也可以實現一下.

目前PC-Dooring已經在github上以MIT協議完全開源, 如果大家感興趣,也可以貢獻你的一份力量, 幫助社區解決更多問題.

 

責任編輯:姜華 來源: 趣談前端
相關推薦

2022-08-31 08:32:22

數據可視化項目nocode

2021-08-26 05:15:22

圖片編輯器 H5-DooringMitu-Doorin

2021-06-22 14:47:19

electronDooring架構

2024-03-06 08:26:29

2021-11-24 09:12:11

Markdown編輯器Linux

2021-09-11 21:03:09

可視化搭建框架

2021-09-14 08:38:57

組件開源前端

2020-09-16 10:27:50

MarkDown編輯器編程

2019-05-30 08:43:45

JavaScript富文本編輯器編輯器

2022-09-05 13:16:42

MicroVim編輯器

2021-02-20 07:02:24

Vue.js組件開發技術

2023-01-07 08:09:41

零代碼Dooring組件

2021-04-08 14:58:59

開發前端編輯器

2023-06-20 00:04:18

框架開發UMD

2021-01-27 07:24:38

TypeScript工具Java

2016-08-10 14:59:41

前端Javascript工具

2021-10-28 08:42:31

Dooring表單設計器數據可視化

2015-02-12 09:51:24

代碼編輯

2021-03-10 09:15:15

代碼文本編輯器編程

2020-12-29 05:26:27

視頻播放器Vuevideo
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美在线观看一区 | 成人中文字幕在线 | 国产精品久久久久久久久免费高清 | 日韩成人在线免费观看 | av手机在线| av天天看 | 久久国产精品一区二区三区 | 五十女人一级毛片 | 中文字幕日韩一区二区 | 午夜精品三区 | 精品日韩一区二区 | 日日天天 | 日韩欧美亚洲 | 羞羞视频免费在线观看 | 亚洲欧美日韩在线不卡 | 免费观看黄色片视频 | 精品一区二区在线看 | 免费在线观看av片 | 国产一级视频在线 | 男女免费在线观看视频 | 91精品国产色综合久久 | 天天干夜夜操 | 国产精品免费大片 | 日日噜噜噜夜夜爽爽狠狠视频, | 亚洲欧洲一区 | 狠狠爱免费视频 | 色噜噜亚洲男人的天堂 | 国产精品一区在线 | 国产乱码精品一品二品 | 国内成人免费视频 | 国产91丝袜在线播放 | 日韩av成人 | 欧美成人一区二区三区 | 亚洲精品自在在线观看 | 中文字幕精品一区二区三区精品 | 成人做爰9片免费看网站 | 国产乱码久久久久久 | 国产精品18久久久久久久 | 色久电影 | 国产视频中文字幕 | 在线 丝袜 欧美 日韩 制服 |