会员登录 - 用户注册 - 设为首页 - 加入收藏 - 网站地图 如何搭积木式的快速开发H5页面?!

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

时间:2025-11-05 08:28:53 来源:益强数据堂 作者:域名 阅读:684次

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

设计初衷

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

最新版编辑器效果预览

 

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

技术栈

之前在笔者的文章中也介绍过H5-Dooring使用的技术栈和基础架构实现了, 感兴趣的可以参考 基于React+Koa实现一个h5页面可视化编辑器最近我们在用nest重构项目的后端部分, 后期会做一定的技术方案介绍. 这里简单介绍一下项目实现的技术栈:

umi3.0 + dva + antd4.0react + react生态nest + mysql + redisnginx + pm2

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

功能点和实现方案

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

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

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

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

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

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

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

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

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

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

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

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

打开弹窗的交互用户可以自定义弹窗中的免费信息发布网内容, 如下:

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

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

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

新增导入导出json文件功能

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

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

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

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

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

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

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

这里笔者推荐两个好用的canvas截图工具, html2canvas和 dom-to-image. Dooring页面的截图过程如下:

 

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

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

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

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

新增页面配置

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

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

界面设计优化

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

预览页面:

支持sdk引入

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

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

(责任编辑:IT科技)

推荐内容
  • 索尼KDL32R500C电视评测(探索索尼KDL32R500C的特点和性能)
  • windows 7系统密码重置盘创建使用教程图文详细介绍
  • 如何把windows 7超级任务栏的样式还原成xp任务栏的样式?
  • windows 7系统如何刻录CD光盘且不需要任何软件
  • 电脑链接错误代码651的解决办法(遇到错误代码651时,你需要知道的关键信息)
  • HHVM全称为 HipHop virtual Machine,它是一个开源虚拟机,用来运行由 Hack(一种编程语言)和 PHP 开发应用。HHVM 在保证了 PHP 程序员最关注的高灵活性的要求下,通过使用最新的编译方式来取得了非凡的性能。到目前为止,相对于 PHP + APC (Alternative PHP Cache) ,HHVM 为 FaceBook 在 HTTP 请求的吞吐量上提高了9倍的性能,在内存的占用上,减少了5倍左右的内存占用。同时,HHVM 也可以与基于 FastCGI 的 Web 服务器(如 Nginx 或者 Apache )协同工作。安装 HHVM,Nginx和 Apache 还有 MariaDB在本教程中,我们一起来配置 Nginx/Apache web 服务器、 数据库服务器 MariaDB 和 HHVM 。我们将使用 Ubuntu 15.04 (64 位),因为 HHVM 只能运行在64位系统上。同时,该教程也适用于 Debian 和 Linux Mint。第一步: 安装 Nginx 或者 Apache 服务器1、首先,先进行一次系统的升级并更新软件仓库列表,命令如下# apt-get update && apt-get upgrade系统升级2、 正如我之前说的,HHVM 能和 Nginx 和 Apache 进行集成。所以,究竟使用哪个服务器,这是你的自由,不过,我们会教你如何安装这两个服务器。安装 Nginx我们通过下面的命令安装 Nginx/Apache 服务器# apt-get install nginx安装 Nginx 服务器安装 Apache# apt-get install apache2安装 Apache 服务器完成这一步,你能通过以下的链接看到 Nginx 或者 Apache 的默认页面http://localhost或http://IP-AddressNginx 默认页面Apache 默认页面第二步: 安装和配置 MariaDB3、 这一步,我们将通过如下命令安装 MariaDB,它是一个比 MySQL 性能更好的数据库# apt-get install mariadb-client mariadb-server安装 MariaDB4、 在 MariaDB 成功安装之后,你可以启动它,并且设置 root 密码来保护数据库:# systemctl start mysql# mysql_secure_installation回答以下问题,只需要按下y或者 n并且回车。请确保你仔细的阅读过说明。Enter current password for root (enter for none) = press enterSet root password  [Y/n] = yRemove anonymous users[y/n] = yDisallow root login remotely[y/n] = yRemove test database and access to it [y/n] = yReload privileges tables now[y/n] = y5、 在设置了密码之后,你就可以登录 MariaDB 了。# mysql -u root -p第三步: 安装 HHVM6、 在此阶段,我们将安装 HHVM。我们需要添加 HHVM 的仓库到你的sources.list文件中,然后更新软件列表。# wget -O - http://dl.hhvm.com/conf/hhvm.gpg.key | apt-key add -# echo deb http://dl.hhvm.com/ubuntu DISTRIBUTION_VERSION main | sudo tee /etc/apt/sources.list.d/hhvm.list# apt-get update重要:不要忘记用你的 Ubuntu 发行版代号替换上述的 DISTRIBUTION_VERSION (比如:lucid, precise, trusty) 或者是 Debian 的 jessie 或者 wheezy。在 Linux Mint 中也是一样的,不过只支持 petra。添加了 HHVM 仓库之后,你就可以轻松安装了。# apt-get install -y hhvm安装之后,就可以启动它,但是它并没有做到开机启动。可以用如下命令做到开机启动。# update-rc.d hhvm defaults第四步: 配置 Nginx/Apache 连接 HHVM7、 现在,nginx/apache 和 HHVM 都已经安装完成了,并且都独立运行起来了,所以我们需要对它们进行设置,来让它们互相关联。这个关键的步骤,就是需要告知 nginx/apache 将所有的 php 文件,都交给 HHVM 进行处理。假如你用了 Nginx,请按照如下步骤:nginx 的配置文件在 /etc/nginx/sites-available/default, 并且这些配置文件会在 /usr/share/nginx/html 中寻找文件执行,不过,它不知道如何处理 PHP。为了确保 Nginx 可以连接 HHVM,我们需要执行所带的如下脚本。它可以帮助我们正确的配置 Nginx,将 hhvm.conf 放到 上面提到的配置文件 nginx.conf 的头部。这个脚本可以确保 Nginx 可以对 .hh 和 .php 的做正确的处理,并且将它们通过 fastcgi 发送给 HHVM。# /usr/share/hhvm/install_fastcgi.sh配置 Nginx、HHVM重要: 假如你使用的是 Apache,这里不需要进行配置。8、 接下来,你需要使用 hhvm 来提供 php 的运行环境。# /usr/bin/update-alternatives --install /usr/bin/php php /usr/bin/hhvm 60以上步骤完成之后,你现在可以启动并且测试它了。# systemctl start hhvm第五步: 测试 HHVM 和 Nginx/Apache9、 为了确认 hhvm 是否工作,你需要在 nginx/apache 的文档根目录下建立 hello.php。# nano /usr/share/nginx/html/hello.php       [对于 Nginx]或# nano /var/www/html/hello.php               [对于 Nginx 和 Apache]在文件中添加如下代码:< phpif (defined(HHVM_VERSION)) {    echo HHVM is working;    phpinfo();} else {    echo HHVM is not working;} >然后访问如下链接,确认自己能否看到 “hello world”http://localhost/info.php或http://IP-Address/info.phpHHVM 页面假如 “HHVM” 的页面出现了,那就说明你成功了。结论以上的步骤都是非常简单的,希望你能觉得这是一篇有用的教程,假如你在以上的步骤中遇到了问题,给我们留一个评论,我们将全力解决。
热点内容