如何搭积木式的快速开发H5页面?

简介: 2个月前开源的H5编辑器 H5-Dooring 目前已经成功迭代到1.0版本, 从最开始的基本的页面生成框架到现在的支持更丰富的组件资源,交互能力和数据追踪能力, 期间做了很多的设计和迭代,也收获了很多网友的反馈和启发, 也有很多志同道合的朋友加入进来一起让 H5-Dooring 变的更好更强大, 在此特意分享一下我们最新的版本和功能实现.

网络异常,图片无法展示
|


2个月前开源的H5编辑器 H5-Dooring 目前已经成功迭代到1.0版本, 从最开始的基本的页面生成框架到现在的支持更丰富的组件资源,交互能力数据追踪能力, 期间做了很多的设计和迭代,也收获了很多网友的反馈和启发, 也有很多志同道合的朋友加入进来一起让 H5-Dooring 变的更好更强大, 在此特意分享一下我们最新的版本和功能实现.


设计初衷



笔者最开始开发这个项目的主要目的是提高个人和企业开发 H5 页面的成本和效率, 可以通过搭积木的方式, 利用已有组件库或外部组件资源(正在设计)搭建出适合不同场景的 H5 应用, 并且支持一键下载代码, 让技术人员轻松将H5页面部署到自己的服务器中. 笔者之前也做过很多代码生成的小应用, 但是都是为程序员少写代码而设计的, 不足以成为一个真正的开源项目, 所以笔者打算把H5-Dooring好好落地, 做成一个真正有价值的项目.


笔者接下来将介绍最新版H5编辑器的功能和实现思路, 以及如何实现所见即所得的方案尝试.


最新版编辑器效果预览



网络异常,图片无法展示
|


表单数据看板和数据分析:


网络异常,图片无法展示
|


技术栈



之前在笔者的文章中也介绍过H5-Dooring使用的技术栈和基础架构实现了, 感兴趣的可以参考 基于React+Koa实现一个h5页面可视化编辑器


最近我们在用nest重构项目的后端部分, 后期会做一定的技术方案介绍. 这里简单介绍一下项目实现的技术栈:


  • umi3.0 + dva + antd4.0
  • react + react生态
  • nest + mysql + redis
  • nginx + pm2


所以这个项目属于一个全栈项目, 很多核心功能的实现取决的约定好的DSL层, 页面渲染层后端能力.


功能点和实现方案



笔者之前的系列文章中有介绍具体功能点和实现方案, 这里我们主要介绍1.0版本已有的新功能.


新增富文本组件, 日历组件, 按钮交互组件, 专栏组件


富文本组件笔者采用的是国产的braft, 预览如下:


网络异常,图片无法展示
|


因为项目用antd4.0开发的, 所以笔者专门封装了一套适配antd4.0组件的富文本编辑器, 支持Form组件的受控模式. 感兴趣的可以子啊github上学习具体的实现方式.


日历组件也是最近刚加的, 主要是为了实现更丰富的H5页面展示, 如下:


网络异常,图片无法展示
|


我们可以设置选择的时间范围, 被选择范围的主色, 日期等. 日期组件笔者主要采用的zarmCalendar组件, 核心如下:

importReact, { useState, memo, useEffect, useRef } from'react';
import { Calendar } from'zarm';
importstylesfrom'./index.less';
import { ICalendarConfig } from'./schema';
constCalendarPlayer=memo((props: ICalendarConfig& { isTpl: boolean }) => {
const { time, range, color, selectedColor, round, isTpl } =props;
constrealRange=range.split('-');
const [value, setValue] =useState<Date[] |undefined>([newDate(`${time}-${realRange[0]}`), newDate(`${time}-${realRange[1]}`)]);
const [min] =useState(newDate(`${time}-01`));
const [max] =useState(newDate(`${time}-31`));
constboxRef=useRef<any>(null);
return<divclassName={styles.calenderWrap} style={{borderRadius: round+'px', pointerEvents: isEditorPage?'none' : 'initial'}} ref={boxRef}><Calendarmultiple={!!range}
value={value}
min={min}
max={newDate(max)}
disabledDate={(date:any) =>/(0|6)/.test(date.getDay())}
onChange={(value:Date[] |undefined) => {
setValue(value);
            }}
/></div>});
exportdefaultCalendarPlayer;

这也是实现Dooring组件的一种方式, 感兴趣的朋友欢迎为Dooring添加更多丰富组件支持.


之前还有个朋友问过我为什么项目利使用了这么多组件在预览H5页面的时候速度还是很快, 这里我说明一下具体的实现方式, 如下图:


网络异常,图片无法展示
|


所以说我们移动端的产物和依赖的资源非常少, 并且在webpack层和服务器层做了优化, 所以移动端访问H5页面会非常快, 这块优化笔者后期会详细介绍, 目前对性能这块还在持续优化.


按钮交互组件笔者之前也写过文章专门详细的介绍过如何实现按钮交互, 自定义交互代码以及富文本弹窗交互等, 感兴趣的可以参考文章低代码开发平台核心功能设计——组件自定义交互实现.


笔者这里展示一下具体的交互方式:


网络异常,图片无法展示
|


打开弹窗的交互用户可以自定义弹窗中的内容, 如下:


网络异常,图片无法展示
|


此时在手机端的预览效果如下:


网络异常,图片无法展示
|


对于自定义code这块, 笔者集成了代码编辑库codemirror, 这样我们就可以自定义实现交互能力了, 如下效果:


网络异常,图片无法展示
|



接下来是我们的专栏组件, 这块主要是基于业务需求做的业务组件, 实现方式和基础组件一样, 大家可以在线体验一下.


新增导入导出json文件功能


之所以会做这个功能主要是为了方便协作设计H5页面的, 比如说一个人设计了一个H5页面想让其他人一起参与设计, 可以将当前H5页面导出为JSON, 另一个人通过导入这个JSON文件就可以立马渲染成一模一样的H5页面, 进而做修改或者完善. 如下:


网络异常,图片无法展示
|


关于如何实现下载json, 笔者在之前的文章中也介绍过, 我们可以采用file-saver这个第三方模块来做. 上传解析json 我们完全可以自己实现, 笔者采用的是 Upload + FileReader API实现的, 核心代码如下:


constuploadprops=useMemo(() => ({
name: 'file',
showUploadList: false,
beforeUpload(file, fileList) {
// 解析并提取json数据letreader=newFileReader();
reader.onload=function(e) {
letdata=e.target.result;
importTpl&&importTpl(JSON.parse(data))
      };
reader.readAsText(file);
    }
  }), []);

新增一键截图并生成高清海报图功能


这块主要是为H5页面提供一个快速成图方案, 方便运营或者技术人员做页面效果评估用的, 在前端实现角度上我们主要采用canvas对dom进行转化, 原理如下:


网络异常,图片无法展示
|


笔者之前也分享过具体的实现方案, 可以参考如下文章:


前端如何实现一键截图功能?


这里笔者推荐两个好用的canvas截图工具, html2canvasdom-to-image.


Dooring页面的截图过程如下:


网络异常,图片无法展示
|


新增右键菜单和自定义键盘快捷键功能


为了进一步提高用户搭建H5页面的效率, 笔者添加了右键菜单, 可以轻松的复制已制作好的组件, 也可以一键删除, 如下:


网络异常,图片无法展示
|


但是对于键盘控们来说更希望通过键盘来实现所有功能, 所以个笔者添加了键盘快捷键, 支持一键复制, 粘贴,删除元素, 如下:


网络异常,图片无法展示
|


这里推荐几个还好用的右键菜单和键盘快捷键的库, react-contexify, keymaster.


新增页面配置


这块主要是让H5页面有更多的自由度, 可以自定义页面标题, SEO关键字, 页面背景和背景图等, 如下:


网络异常,图片无法展示
|


后续会添加更多页面自定义的能力.


界面设计优化


0.1版本比界面上做了很大的调整和优化, 比如说我们的登录页面:


网络异常,图片无法展示
|


预览页面:


网络异常,图片无法展示
|



支持sdk引入


这块也是笔者之前做的一个尝试, 让H5-Dooring能通过sdk的方式被植入到任何web系统中,并且提供了定制功能和展示的api, 主要如下:


网络异常,图片无法展示
|


实现原理笔者之前也在文章中介绍过了, 如下:


网络异常,图片无法展示
|


感兴趣的可以参考笔者的以下文章:


如何快速将你的应用封装成js-sdk?


后期规划


后期主要做的事情是继续丰富高质量业务组件, 重构github上已有代码的设计架构, 做好视图, 数据, 逻辑的分层, 抽离页面渲染器和表单渲染器, 提供组件开放能力, 增强后台服务能力等, 欢迎感兴趣的朋友提出宝贵的建议和issue, 持续迭代和优化.

github地址:github.com/MrXujiang/h…


欢迎大家forkstar.



目录
相关文章
|
6月前
|
前端开发 JavaScript jenkins
构建高效前端项目:从模块化到自动化
【2月更文挑战第13天】 随着Web技术的不断进步,前端项目的复杂性日益增加。为了确保可维护性和性能,前端工程师必须采用模块化和自动化的策略来优化开发流程。本文将探讨如何使用现代前端工具和最佳实践来构建一个高效的前端项目架构,包括模块打包、代码分割和持续集成等方面。
|
6月前
|
JavaScript 数据可视化 PHP
想要快速开发一个系统?选 BuildAdmin 就对了!
Part1介绍 基于 Vue3.3 + ThinkPHP8 + TypeScript + Vite + Pinia + Element Plus 等流行技术栈的后台管理系统,自适应多端、可视化 CRUD 代码生成、自带 WEB 终端、同时提供 Web、WebNuxt、Server 端、内置全局数据回收站和字段级数据修改保护、自动注册路由、无限子级权限管理等,无需授权即可免费商用,希望能帮助大家实现快速开发。
92 0
|
数据可视化 IDE 安全
云巧-让开发更简单,更高效,更方便
近年来,快速迭代的新需求将引导企业改变其开发方式,进而转向使用支持快速、安全和高效的技术架构,组装式应用便成为了企业重要的战略技术趋势。组装式应用引入模块化的理念,使得各企业可以更敏捷、更有效地复用能力模块,提高商业的韧性和效率。云巧平台应运而生,能极大的改善开发环境,节省开发工作量,让开发更简单,更高效,更方便。
1882 0
|
1天前
|
前端开发 API UED
深入理解微前端架构:构建灵活、高效的前端应用
【10月更文挑战第23天】微前端架构是一种将前端应用分解为多个小型、独立、可复用的服务的方法。每个服务独立开发和部署,但共同提供一致的用户体验。本文探讨了微前端架构的核心概念、优势及实施方法,包括定义服务边界、建立通信机制、共享UI组件库和版本控制等。通过实际案例和职业心得,帮助读者更好地理解和应用微前端架构。
|
19天前
|
数据可视化 大数据 API
低代码可视化开发-uniapp新闻跑马灯组件-代码生成器
低代码可视化开发-uniapp新闻跑马灯组件-代码生成器
52 2
|
2月前
|
数据可视化 测试技术 开发工具
简化开发流程的利器后台低代码
该项目集合了众多Python小项目及工具,涵盖数据可视化、爬虫、Web开发、自动化测试等多个领域。其中包括Apache Superset数据探查平台、Django商城系统、Flask框架项目、AI视频创作工具等。此外,还有多个实用工具如IP代理池、负载测试工具Locust等。项目丰富多样,适合不同需求的开发者学习与使用。感谢您的关注和支持!提取码:8888,参考网址:http://www.603393.com。
38 4
|
2月前
|
开发者
后台低代码简化开发流程的利器
代码组是组织代码库的集合,类似文件夹,支持成员管理与权限设置,并可创建子代码组。登录云效代码管理可新建代码组,需填写名称、路径等信息并选择公开性。作为管理员,可在设置中修改基本信息,包括公开性。代码组的公开性影响子代码组和代码库的可见性。此外,还支持Webhook配置,可用于CI构建等多种功能。删除或转移代码组需谨慎,可能影响开发流程。
42 4
|
4月前
|
JavaScript 开发者 微服务
构建高效网站后台:插件化管理的艺术与实践
【7月更文挑战第5天】在现代Web开发领域,随着业务需求的日益复杂多变,网站后台管理系统面临着前所未有的挑战。为了提升系统的灵活性、可维护性和可扩展性,越来越多的开发者倾向于采用“插件化”管理的方式。本文将深入探讨如何在网站后台实现高效的插件管理体系,通过理论讲解结合实际代码示例,引导开发者掌握这一先进开发模式。
82 1
|
6月前
|
前端开发
基于Jeecgboot前后端分离的聊天功能集成(二)
基于Jeecgboot前后端分离的聊天功能集成(二)
98 0