Code Monkey home page Code Monkey logo

wechat-h5-boilerplate's Introduction

wechat-h5-boilerplate

「让制作H5像制作PPT一样简单!」

Wechat-H5-Boilerplate(以下简称WHB)是一个H5动效模板,专门为微信优化,适合快速构建全屏滚动型H5宣传页。

效果图

例如让一段文字动起来只需要一行代码:

<p class="animated" data-ani-name="slideInRight" data-ani-duration="1s" data-ani-delay="0.3s">I'm a coder!</p>

目录

实时预览

使用手机访问下面的地址或扫描下方二维码

https://panteng.github.io/wechat-h5-boilerplate/

此处输入图片的描述

依赖列表

  1. Swiper --> 用于实现页面的整屏滚动
  2. Animate.css --> 用于提供CSS动画
  3. jQuery --> 用于操作DOM
  4. Normalize.css --> 用于CSS Reset

项目结构

    /app
        /dist               --> 项目文件的分发版本,所有的文件均由Gulp任务生成,请勿手动修改
            /audios         --> 从app/src/audios复制而来
            /fonts          --> 从app/src/fonts和在config/vendors.js中指定的第三方字体复制而来
            /images         --> 由app/src/images下的图片经Imagemin压缩优化生成
            /javascripts    --> 由app/src/javascripts下的文件经Browserify打包生成
            /stylesheets    --> 由app/src/scss下的文件编译生成
            index.html      --> 由app/src/index.html经Gulp-inject插入bundle.(min.).css和bundle.(min.).js后生成
        /src                --> 项目的源码,所有文件都可编辑
            /audios         --> 存放音频、视频文件
            /fonts          --> 存放字体文件
            /images         --> 存放图片文件
            /javascripts    --> JS源文件,经Browserify打包后生成app/dist/javascripts/bundle.js
            /scss           --> SCSS文件,经过编译后生成app/dist/stylesheets/bundle.css
            index.html      --> 页面HTML,经过Gulp-inject处理后生成app/dist/index.html
    /config
        vendors.js          --> 第三方CSS、JS、Fonts列表,详见vendors.js说明
    .gitignore
    gulpfile.js             --> Gulp任务
    package.json

开发流程

  1. 将本项目clone到本地

    在控制台中运行:

     git clone --depth=1 https://github.com/panteng/wechat-h5-boilerplate.git <your-project-name>
     cd <your-project-name>
    

    或者你也可以直接在Release页面下载WHB的源码压缩包。

  2. 安装第三方包

    WHB使用NPM管理第三方包

    在控制台中运行:

     npm install
    

    注意1:由于**网络环境恶劣,下载NPM上的包速度很慢,建议使用淘宝NPM镜像CNPM。CNPM的安装方法请参考官网使用说明。CNPM v4.2.0在Windows系统上有Bug(参考#97),Windows用户请勿使用该版本,虽然官方说已经修复,但我在Windows上使用CNPM安装需要node-gyp编译的包时仍然会报错。我也不建议使用CNPM v3.4.1,因为其内置的NPM版本过旧。推荐npm install --registry=https://registry.npm.taobao.org -d这种直接使用镜像仓库的方式安装。(加入 -d 是为了显示安装过程中的详细信息,我个人经常用这种方法来判断安装过程是否因为网络或其他问题卡住了)。

    注意2:WHB所需的一些第三方包依赖于node-gyp,在安装这些包之前,请先确认你的机器已经正确安装node-gyp。请参考node-gyp官方文档来进行安装。Windows用户可能会遇到一些麻烦,因为在Windows上安装node-gyp是一件很痛苦的事。

    注意3:Windows用户,请不要将WHB放在路径太深的目录中。因为Windows只支持长度为255个字符以内的路径,所以如果你将本项目放在路径很深的目录中,有很大可能会造成node-gyp编译失败。

    注意4:Windows用户,如果你已经正确安装了node-gyp,但在运行npm install -d时依然报错,且报错信息为“EPERM, operation not permitted”的话,请尝试npm install -d --force

  3. 开始开发

    在控制台运行:

     gulp dev
    

    稍等片刻,浏览器窗口会自动打开并指向地址localhost:3000,当你修改app/src下的任意文件时,浏览器页面会自动刷新。

发布流程

  1. 执行gulp prod任务

    在控制台中运行:

     gulp prod
    

    该任务将在app/dist文件夹中生成两个新文件bundle.min.css和bundle.min.js,并删除原有的bundle.css和bundle.js。

  2. 发布时,只需要将app/dist文件夹中的文件上传到服务器即可,其他文件都不是必需的。app/dist中的CSS、JS和图片文件都是经过压缩优化的。

开发指南

  1. 加载动画

    H5页面通常包含大量图片和背景音乐,因此一个好看的加载动画是必要的。

    你可以自己写一些CSS3动画,将动画相关的HTML代码插入在app/src/index.html中的<div class="loading-overlay"></div>中,并将相关的CSS3 Animation代码整合进app/src/scss中。

    想省事的话,loading.io这个网站可以帮你生成现成的加载动画(打不开请翻墙)。建议生成SVG格式的动画图像文件,将文件改为为loading.svg并替换app/src/images/下的同名文件即可。

    此外分享一些优秀的CSS3加载动画库:

  2. 页面切换效果

    页面切换暂时只支持Swiper自带的四种:slide,fade, flip和coverflow(cube不支持,因为不符合此场景)。详见Swiper文档中关于effect的部分。

    WHB尚无法对不同页面指定不同的切换方式,我将在后续版本中考虑加入此功能以及更多更酷的切换方式。

  3. 页面内元素(图片、文字)动画

    在WHB中为图片和文字添加动画非常简单。

    例如在第一页中有一段文字需要以动画显示,代码如下:

     <div class="swiper-slide slide-1">
         <p class="animated" data-ani-name="slideInRight" data-ani-duration="1s" data-ani-delay="0.3s">I'm a coder!</p>
     </div>
    

    只需要在这段文字上添加类名animated,并指定data-ani-name(动画名称),data-ani-duration(动画执行时间),data-ani-delay(动画延迟时间)三个属性即可。

    WHB的动画由Animate.css提供,支持的动画名称可以在Animate.css官网上查看。

  4. 字体图标

    WHB自带的字体图标文件中只有两个图标,分别是右上角的音乐符号,和屏幕下方的上划提示符号。如果你需要更多图标,建议使用Icomoon.io进行定制,选择你需要的图标(也可以自己设计并上传),打包成字体文件即可。

    这里不建议使用Font-Awesome等通用字体包的原因是,Font-Awesome中的图标非常多,所以字体文件会比较大,而其中大部分图标是用不到的。较大的字体文件会拖慢网页在用户设备上的加载速度。

  5. 图像优化

    WHB中自带对app/src/images下的图片进行有损压缩的功能,但我仍然建议在你将图片扔进app/src/images文件夹前,对图片进行必要的手动优化,例如将图片调整为合适的尺寸,将部分小图片整合成精灵图等。

    分享一些好用的图片优化处理网站:

    • 图片压缩:TinyPNG
    • 精灵图生成器(包括生成图片和CSS代码):CSS Sprite Generator
    • 精灵图CSS代码生成器(自动识别精灵图中的元素并生成CSS代码):Sprite Cow
  6. 背景音乐

    建议背景音乐的文件格式为mp3,且大小尽量不要超过1MB。可使用Adobe Audition等专业音频编辑软件对背景音乐进行截取和压缩。

    如非必要,请不要设置背景音乐来打扰用户。

  7. 移动端调试

    首先,运行gulp dev任务,在控制台的输出信息中找到下面这段:

     [BS] Access URLs:
      ----------------------------------------
            Local: http://localhost:3000
         External: http://192.168.187.101:3000
      ----------------------------------------
               UI: http://localhost:3001
      UI External: http://192.168.187.101:3001
      ----------------------------------------
    

    然后,确保你的移动设备(手机、平板等)和电脑处于同一局域网内(最简单的方式就是让电脑、手机和平板连接同一个WIFI;或者电脑用网线连接路由器,手机和平板连接同是这个路由器发出的WIFI)。

    最后,在你的移动设备上打开浏览器,访问上面第三行中External对应的URL(注意你的URL可能跟我上面写的不一样,以你自己的控制台中显示的External URL为准)。

    现在只要你修改app/src下的文件,所有访问这个URL的移动设备和电脑都会自动刷新浏览器页面。你在其中一个设备上进行的操作也会实时同步到其他设备(比如用手指向上划动页面)。

  8. 响应式设计

    建议使用rem替代px来设置元素的尺寸、边距和字体大小。

    在WHB中,1rem对应的px数值会随着设备屏幕尺寸的不同而变化。

    在屏幕宽度小于400px的设备上,1rem = 16px;

    在屏幕宽度大于400px且小于600px的设备上,1rem = 22px;

    在屏幕宽度大于600px的设备上,1rem = 32px;

    参见app/src/scss/base/_base.scss中关于Media Query的代码。

  9. config/vendors.js说明

    vendors.js文件用来登记第三方CSS、JS和Fonts信息,凡在vendors.js中登记过的第三方文件,均会以某种形式被添加到项目中。举个例子: 假如现在vendors.js是这样的:

     module.exports = {
         stylesheets: [
             'node_modules/normalize.css/normalize.css',
             'node_modules/swiper/dist/css/swiper.css',
             'node_modules/animate.css/animate.css',
             'node_modules/font-awesome/css/font-awesome.css'
         ],
         javascripts: [
             'node_modules/jquery/dist/jquery.js',
             'node_modules/swiper/dist/js/swiper.jquery.js'
         ],
         fonts: [
             'node_modules/font-awesome/fonts/*'
         ]
     };
    

    vendors.js的stylesheets中所有的css文件均会被加入项目最终生成的bundle.css中;

    vendors.js的javascripts中所有的js文件均会被加入项目最终生成的bundle.js中;

    vendors.js的fonts中所有的文件均会被复制到app/dist/fonts文件夹中。

    记住vendors.js中登记的文件会被优先加入bundle.css和bundle.js中,因此你无需担心自己写的SCSS中的样式被覆盖或者在main.js中发现某个第三方库的对象未定义的情况。而在vendors.js中登记的文件会按照登记顺序依次加入bundle.css和bundle.js,因此你要确保登记顺序正确,比如jquery.js一定要在swiper.jquery.js前面登记,因为swiper.jquery.js是依赖于jquery.js的。

    注意1:文件路径是相对于gulpfile.js的,不是相对于vendors.js的。

    注意2:如果你不喜欢通过这种方式引入第三方JS文件,而想使用CommonJS的require写法来引入,也是可以的。例如在app/src/javascripts/main.js中用这种方式引入jQuery:

     var $ = require('jquery');
    
  10. Gulp任务

    在开发过程中,如果你发现明明已经修改或替换了app/src文件下的图片、音频、字体等文件,但浏览器中的页面却没有做出相应改变的话,请尝试在控制台中重新运行gulp dev任务。

待办事项

  1. 完善开发文档
  2. 优化动画效果
  3. 优化元素定位方式
  4. 增加更多Slide切换效果

Lisence

MIT

wechat-h5-boilerplate's People

Contributors

panteng avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wechat-h5-boilerplate's Issues

执行 gulp prod 后 dist 目录只有 index.html

当我 git clone 此项目后,安装依赖,执行 gulp prod,得到输出:

[18:18:28] Using gulpfile ~/Projects/wechat-h5-boilerplate/gulpfile.js
[18:18:28] Starting 'prod'...
[18:18:28] Starting 'minify-css'...
[18:18:28] Starting 'uglify-js'...
[18:18:28] Finished 'minify-css' after 11 ms
[18:18:28] Finished 'uglify-js' after 5.94 ms
[18:18:28] Starting 'inject-min'...
[18:18:28] Starting 'del-bundle'...
[18:18:28] Finished 'del-bundle' after 5 ms
[18:18:28] gulp-inject Nothing to inject into index.html.
[18:18:28] Finished 'inject-min' after 16 ms
[18:18:28] Finished 'prod' after 30 ms

而 app/dist 只有一个 index.html 文件,在此期间我并没有修改任意一行代码。
ps: prod dev 是正常的

有行代码, 觉得没必要,还望讲解

在 animation-control.js中,这么一行代码,
$(this).attr('data-origin-class', $(this).attr('class'))

在clearAnimation方法中,又使用到了,
clearAnimation: function () {
$('.animated').each(function () {
$(this).css({ 'visibility': 'hidden' });
$(this).attr('class', $(this).data('origin-class'));
});
}

这2行代码,我觉得删了也没有什么影响,请问他们的意思是什么,还望见谅
$(this).attr('data-origin-class', $(this).attr('class'))
$(this).attr('class', $(this).data('origin-class'));

如何使用没有npm包的js插件

1.如果该插件没有npm包,但是支持commonjs规范,是不是可以直接放到src/js/文件夹下 用require方式引入
2.如果连commonjs都不支持 是不是就不能使用

node_modules/optipng-bin/vendor/optipng ENOENT

when run
$ gulp dev
Error: spawn /home/streverf/www/fancy/node_modules/optipng-bin/vendor/optipng ENOENT
at exports._errnoException (util.js:870:11)
at Process.ChildProcess._handle.onexit (internal/child_process.js:178:32)
at onErrorNT (internal/child_process.js:344:16)
at nextTickCallbackWith2Args (node.js:441:9)
at process._tickCallback (node.js:355:17)

env:
$ npm -version
3.5.2
$ nodejs --version
v4.2.6

gulp prod has error

events.js:160 throw er; // Unhandled 'error' event ^ GulpUglifyError: unable to minify JavaScript at createError (H:\h50121\node_modules\.2.1.2@gulp-uglify\lib\create-error.js:6:14) at wrapper (H:\h50121\node_modules\.4.17.4@lodash\_createHybrid.js:87:15) at trycatch (H:\h50121\node_modules\.2.1.2@gulp-uglify\minifier.js:26:12) at DestroyableTransform.minify [as _transform] (H:\h50121\node_modules\.2.1.2@gulp-uglify\minifier.js:79:19) at DestroyableTransform.Transform._read (H:\h50121\node_modules\.2.3.3@readable-stream\lib\_stream_transform.js:182:10) at DestroyableTransform.Transform._write (H:\h50121\node_modules\.2.3.3@readable-stream\lib\_stream_transform.js:170:83) at doWrite (H:\h50121\node_modules\.2.3.3@readable-stream\lib\_stream_writable.js:406:64) at writeOrBuffer (H:\h50121\node_modules\.2.3.3@readable-stream\lib\_stream_writable.js:395:5) at DestroyableTransform.Writable.write (H:\h50121\node_modules\.2.3.3@readable-stream\lib\_stream_writable.js:322:11) at write (H:\h50121\node_modules\.1.0.34@readable-stream\lib\_stream_readable.js:623:24)

用rem如何设置元素大小

如果是750px的设计稿,有个元素大小为375px宽,用rem标记大小,该写多大rem,(因为rem随屏幕变化)

Error running npm install after upgrading node

2385 warn optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules\fsevents):
2386 warn notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
2387 verbose notsup SKIPPING OPTIONAL DEPENDENCY: Valid OS: darwin
2387 verbose notsup SKIPPING OPTIONAL DEPENDENCY: Valid Arch: any
2387 verbose notsup SKIPPING OPTIONAL DEPENDENCY: Actual OS: win32
2387 verbose notsup SKIPPING OPTIONAL DEPENDENCY: Actual Arch: x64
2388 verbose stack Error: [email protected] install: node scripts/install.js
2388 verbose stack spawn bash ENOENT
2388 verbose stack at _errnoException (util.js:1022:11)
2388 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:190:19)
2388 verbose stack at onErrorNT (internal/child_process.js:372:16)
2388 verbose stack at _combinedTickCallback (internal/process/next_tick.js:138:11)
2388 verbose stack at process._tickCallback (internal/process/next_tick.js:180:9)
2389 verbose pkgid [email protected]
2390 verbose cwd E:\node\wechat-h5-boilerplate
2391 verbose Windows_NT 10.0.16299
2392 verbose argv "E:\node\node.exe" "E:\node\node_modules\npm\bin\npm-cli.js" "install"
2393 verbose node v8.10.0
2394 verbose npm v5.7.1
2395 error file bash
2396 error path bash
2397 error code ELIFECYCLE
2398 error errno ENOENT
2399 error syscall spawn bash
2400 error [email protected] install: node scripts/install.js
2400 error spawn bash ENOENT
2401 error Failed at the [email protected] install script.
2401 error This is probably not a problem with npm. There is likely additional logging output above.
2402 verbose exit [ 1, true ]

ES6 如何打包

我在任务里面加了一段 ES6 转码的,打包之后生产环境提示没有 JQuery 怎么解?

请问是否和vue之间会有冲突

RT,在添加了vue之后,页面不能滑动翻页,绑定的是swiper-wrapper这个元素

<div class="swiper-wrapper">
    <div class="swiper-slide slide-1">

是否考虑添加lazyload

我看到项目里面没有加swiper的图片lazyload功能,请问是否在后面的版本中添加这一块功能?

mac gulp dev 报错

fs.js:761
return binding.readdir(pathModule._makeLong(path));
^
Error: ENOENT, no such file or directory '/Users/renxianglei/IdeaProjects/summer_h5/node_modules/gulp-sass/node_modules/node-sass/vendor'
at Error (native)
at Object.fs.readdirSync (fs.js:761:18)
at Object.getInstalledBinaries (/Users/renxianglei/IdeaProjects/summer_h5/node_modules/gulp-sass/node_modules/node-sass/lib/extensions.js:119:13)
at foundBinariesList (/Users/renxianglei/IdeaProjects/summer_h5/node_modules/gulp-sass/node_modules/node-sass/lib/errors.js:20:15)
at foundBinaries (/Users/renxianglei/IdeaProjects/summer_h5/node_modules/gulp-sass/node_modules/node-sass/lib/errors.js:15:5)
at Object.module.exports.missingBinary (/Users/renxianglei/IdeaProjects/summer_h5/node_modules/gulp-sass/node_modules/node-sass/lib/errors.js:45:5)
at Object. (/Users/renxianglei/IdeaProjects/summer_h5/node_modules/gulp-sass/node_modules/node-sass/lib/index.js:15:28)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)

node版本是0.12.2,之前用windows没问题,现在换了mac报错了,不知道为什么,两个电脑node版本是一样的,研究很久也不知道怎么回事,求助,谢谢

不能循环滚动?

滚到最后一页,再往下不能到滚回第一页么?
(虽然易企秀什么的挺low的...)

Cannot find the specified path on running gulp dev

[15:53:11] Working directory changed to E:\node\wechat-h5-boilerplate
[15:53:13] Using gulpfile E:\node\wechat-h5-boilerplate\gulpfile.js
[15:53:13] Starting 'dev'...
[15:53:13] Starting 'clean-files'...
[15:53:13] Finished 'clean-files' after 11 ms
[15:53:13] Starting 'publish-fonts'...
[15:53:13] Starting 'publish-images'...
[15:53:13] Starting 'publish-audios'...
[15:53:13] Starting 'publish-css'...
[15:53:13] Starting 'publish-js'...
[15:53:13] Finished 'publish-audios' after 413 ms

events.js:160
throw er; // Unhandled 'error' event
^
Error: The system cannot find the path specified.

at notFoundError (E:\node\wechat-h5-boilerplate\node_modules\cross-spawn\lib\enoent.js:11:11)
at verifyENOENT (E:\node\wechat-h5-boilerplate\node_modules\cross-spawn\lib\enoent.js:46:16)
at ChildProcess.cp.emit (E:\node\wechat-h5-boilerplate\node_modules\cross-spawn\lib\enoent.js:33:19)
at Process.ChildProcess._handle.onexit (internal/child_process.js:204:12)

大神 H5中为啥px能实现等高(容器高度写死px,px无任何后处理)

everybody,想问个问题。H5中px等高问题:比如iphone6和iphone6plus,dpr分别为2和3,ppi分别为326和401 .假设我html直接写死style='height:100px',px无任何后处理,看效果2手机上高度为等高。但实际计算尺寸过程不是100乘以2/326(英寸)、100乘以3/401(英寸),明显不等,为何视图出来的是等高?研究发现似乎与设置ideal viewport有关,如果去掉ideal viewport,则不等高了。有没有大神能打通我的任督2脉

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.