一、前言

写了很多h5之后,对于写手写html和css已经麻木的我决定动手写个工具自动生成h5结构和样式。其实这个想法由来已久,但总是觉得自己技术不够,所以一直没实行。直到某天我真的写够了,我决定动手了。在此也要感谢我周围的小伙伴。是波波同学告诉了我如何使用ps中的脚本批量把图层导出成图片,嘉哥告诉了我怎么裁剪png图片。站在了巨人肩膀上的我,利用这两个方法和我自己的聪明才智,经过2/3天的努力,终于完成了我的工具。个人感觉非常满意。

二、规范说明

  1. 设计稿要求为640x1006尺寸,设计人员给的设计稿通常带有微信头,尺寸为640x1136.这时候需要制作人员修改画布大小,选择向上截取,将画布大小改为640x1006
  2. 图片文件夹规范,图片文件夹根目录名称image,子文件夹p1、p2、p3、other……。子文件夹里不能再含有文件夹。如果有n个子文件夹,程序会创建n-1个slider。other文件夹一般用于存放一些slider共有的或者loading页用的的图片素材,所以不会被创建成slider。
  3. 实用cropPng裁剪完图片以后,默认的图片名称为“文件夹名-数字(位序)-t数字-l数字-w数字-h数字”;t、l分别是图片在设计稿中距离上边和左边的距离单位px,w、h为图片的宽和高。tlwh用于生成css文件时使用。使用initH5-xxx.js生成专题以后,图片的名称更改为"文件夹-数字(位序)",比如原先的图片名称为p1-0-1-t159-l533-w101-h131.png,生成专题后图片名称变为p1-0-1.png
  4. 自定义属性,因为生成的index.html文件中,各个div的class名称是"文件夹+数字",这样的命名是没有意义的。所以在使用cropPng裁剪完图片后还你还可以通过修改图片的名字为该图片定义class属性,id属性,和事件。这样使用initH5-xxx.js生成的专题后,使用该图片为背景图的div就会拥有class属性、id属性和事件。
  • clN[xxx] 其中xxx为图片的class名。比如p1-0-t159-l533-w101-h131-clN[p1-car].png;如果有多个class,class之间使用空格分开,绑定时间时以[]内第一个class名为准,如果没有自定义class名和id名,绑定事件时绑定的元素名为使用该图片作为背景的元素名,比如$(".p1-0");
  • id[xxx] 其中xxx为图片的id名。比如p1-0-t159-l533-w101-h131-id[p1-car].png
  • ev[xxx] 其中xxx为需要给该div绑定的事件名称p1-0-t159-l533-w101-h131-ev[touchstart].png

三、使用步骤

  1. 修改尺寸:拿到设计稿后,确保设计稿的尺寸为640x1006
  2. 合并图层:把需要添加动画的图层合(ctrl+e)并起来,比如在小车需要添加动画,在psd中就应该把跟小车有关的图片合并成一个图层;比如某段文字需要添加动画,就需要把跟该文字有关的图层合并起来;其他不需要做动画的元素直接合并到背景上。目的是图层越少越好,减少工作量。
  3. 合并完图层以后在项目所在目录生成image文件夹,然后使用ps中的脚本将图层导出到image文件夹下对应的p1、p2……文件夹下,生成png图片。ps-文件-脚本-讲图层导出到文件…,选择仅可见图层,选择png-24格式。默认使用ps脚本导出的图片名称是没有规则的,这样生成的专题需要调整slider里div的顺序,建议使用本人修改过的脚本导出,这样生成的专题就不用再调顺序了。新的脚本见附录。initH5-swiper.js创建的是基于swiper插件的h5,initH5-pageslider.js创建的是基于pageslider的h5专题。
  4. 使用initH5-xxx.js生成专题,然后根据自己的需要给专题添加动画和事件即可

四、附录

  1. 修改photoshop"将图层导出成文件…"的规则。该程序所在目录(我电脑)C:Program FilesAdobeAdobe Photoshop CS6 (64 Bit)PresetsScriptsExport Layers To Files.jsx。将文件夹“ps脚本中文件”中的文件替换掉photoshop中原有的文件就可以了。
  2. 文件夹image-bf中的文件,是我从ps中导出来的文件,image-crop中的文件是我使用cropPng.js裁剪后的图片,测试的时候,如果测试生成h5只需要使用image-crop文件夹中的子文件夹覆盖image中的子文件夹即可,然后运行initH5-xxx.js。如果要测试裁剪就使用image-bf中的子文件夹替换掉image中的子文件夹即可。这两个文件夹主要是方便测试使用,不需要你们再从ps中导出文件。

五、遇到过的问题

1、node异步问题,这个问题非常严重,因为异步导致很多时候我们判断不出来程序是否完成。这个工具中有很多是需要同步操作的,比如只有读取了图片你才能修改图片的名字。如果两个程序同时操作一个文件,比如修改名字和裁剪同时操作一个图片或者改了文件名字再裁剪都会爆出文件not found错误。为了避免这个问题,这个工具很多地方都使用了同步的方法。
2、数组排序问题。我们从ps中批量导出的文件是按照图层上下顺序排列的,顶层的是px-0,再往下是px-1……。linux读取文件是按索引排列的,本来p10应该排在p2的后面,但是因为linux的读取规则问题,导致p10排在了p1后p2前。这就导致专题里某些图片会被遮挡而不能显示。解决办法是对fs.readdirSync返回的数组重新排序。

附件

h5自动生成工具下载地址 http://pan.baidu.com/s/1nv3vnOd

h5自动生成工具的更多相关文章

  1. 代码自动生成工具MyGeneration之一(程序员必备工具)

    代码自动生成工具MyGeneration之一(程序员必备工具) 转 分类: C#2008-08-06 18:12 16064人阅读 评论(12) 收藏 举报 工具数据库相关数据库stringbrows ...

  2. Makefile自动生成工具-----autotools的使用(详细)

    相信每个学习Linux的人都知道Makefile,这是一个很有用的东西,但是编写它是比较复杂,今天介绍一个它的自动生成工具,autotools的使用.很多GNULinux的的软件都是用它生成Makef ...

  3. Asp.net mvc 5 CRUD代码自动生成工具- vs.net 2013 Saffolding功能扩展

    Asp.net mvc 5 CRUD代码自动生成工具 -Visual Studio.net2013 Saffolding功能扩展 上次做过一个<Asp.net webform scaffoldi ...

  4. springboot成神之——swagger文档自动生成工具

    本文讲解如何在spring-boot中使用swagger文档自动生成工具 目录结构 说明 依赖 SwaggerConfig 开启api界面 JSR 303注释信息 Swagger核心注释 User T ...

  5. 基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v6.0.0版)

    TableGo v6.0.0 版震撼发布,此次版本更新如下: 1.UI界面大改版,组件大调整,提升界面功能的可扩展性. 2.新增BeautyEye主题,界面更加清新美观,也可以通过配置切换到原生Jav ...

  6. C# 代码自动生成工具

    开源:C# 代码自动生成工具,支持站点前后台   前言 写这个项目有很长一段时间了,期间也修修改改,写到最后,自己也没咋用(研究方向变化了). 正文 具体项目开源了:https://github.co ...

  7. iBatis 代码自动生成工具 iBator 及 Example 使用

    iBator的下载和安装 官方下载地址:http://people.apache.org/builds/ibatis/ibator/ 安装:见<Eclipse 插件安装> 安装完成后,“F ...

  8. CoolPlist 帧动画自动生成工具

    工具英文名称:CoolPlist作者: 陈前帆 thinkingMan | sonny 邮箱: 625936034@qq.com | chenqianfan1@163.com电话: 136704713 ...

  9. C/C++ makefile自动生成工具(comake2,autotools,linux),希望能为开源做点微薄的贡献!

      序     在linux下C或C++项目开发,Makefile是必备的力气,但是发现手写很麻烦. 在百度有个comake2工具,用于自动生成Makefile工具,而在外边本想找一个同类工具,但发现 ...

随机推荐

  1. 纸上谈兵:表(list)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 表 表(list)是常见的数据结构.从数学上来说,表是一个有序的元素集合.在C语言 ...

  2. C++ 二叉树深度优先遍历和广度优先遍历

    二叉树的创建代码==>C++ 创建和遍历二叉树 深度优先遍历:是沿着树的深度遍历树的节点,尽可能深的搜索树的分支. //深度优先遍历二叉树void depthFirstSearch(Tree r ...

  3. django1.7取消syncdb后不能创建model相应表的问题

    一.在运行一个django程序时,无法创建自定义model相应的表. 我检查seetings.py文件,发现自定义的app,blog已经写到INSTALLED_APPS中, INSTALLED_APP ...

  4. Spring day03笔记

    spring day02回顾 AOP :切面编程 切面:切入点 和 通知 结合 spring aop 编程 <aop:config> 方法1: <aop:pointcut expre ...

  5. 5.Firedac错误信息

    主要错误信息属性: 1.EFDDBEngineException Errors -- TFDDBError对象集合. ErrorCount --错误的记录数 Kind -- DBMS的错误集合. Me ...

  6. Android_getSystemService (demo_testNet)

    今天主要通过一个案例来看下我们的Android 获取系统服务的问题. 我们通常能够看见登录QQ后如果没有网络的状态的时候,它会告诉你一句话:您进入了没有网络的异次元或者是什么网络连接错误等等.Andr ...

  7. C++(MFC)中WebBrowser去除3D边框的方法(实现IDocHostUIHandler接口)控制 WebBrowser 控件的外观和行为

    在 CSDN 上经常看到以下两个问题:1.在 MFC 应用程序中,如果创建了一个 WebBrowser 控件(包括 CHtmlView 在内),如何可以把该控件的三维边框禁止掉?2.在 MFC 应用程 ...

  8. kafka命令

    ./kafka-topics.sh --zookeeper ip:port --list ./kafka-topics.sh --create --topic test --zookeeper ip: ...

  9. MapGIS6.7安装图文教程(完美破解)

    mapgis安装比较简单,主要注意在安装的时候,先打开软件狗,然后再进行软件安装,一般就不会照成其他安装失败的现象,有时候安装之前没有打开软件狗也安装成功了,也有这情况,不过软件使用也需要软件狗的支持 ...

  10. ubuntu 16.04软件源

    来源:模板:16.04source   deb http://cn.archive.ubuntu.com/ubuntu/ xenial main restricted universe multive ...