近期H5项目开发小结

前言:2016差不多又过了半啦,最近参与了公司好几个h5项目(严格来说,也只能算是推广页面活动)。主要是新品牌的推广需要,当然也有给公司以前老客户做的案例。今天主要总结下为新品牌开发的2个h5推广;就主要的运用技术,页面优化,以及存在的短板做总结。

一、主题与设计;

 2个h5主题主要与4.1愚人节与5月的母亲节做对应;然后要比较婉转自然地为新品牌作铺垫,自然推广是主要的目的,但是又不能那么直白明显;所以2个h5分别选择了虚拟产品介绍与游戏参与为设计思路;主要设计图如下:

 愚人节:       扫描体验

母亲节:     只能微信扫描体验

2个h5 分别以流程展示和游戏互动参与为操作主线进行,在最后通过时节的特点(愚人节自然是整蛊咯,母亲节则是温馨情感)导向品牌网站。个人对UI的整体设计还是比较认可的。

 

一、主要的技术点与亮点;

 两个h5的UE交互比较相似,所以在技术层面上也比较贴切。整体没有太大的难度,与之前开发的H5互动页面技术采用差别不大;不过创意总是无限的,根据设计师的设计理念,并与之交流后确定的交互展示方式算得上是这2个h5的一大亮点。围绕效果对采用的技术作分析总结。

 

1.重力感应动画效果,摇一摇;

  项目里已不是第一次运用html5手机api,时至今日,几乎所有智能手机都很好地支持了DeviceOrientation 和DeviceMotion 这个2个手机接口;根据设计配合了css3的transform动画,营造了视觉差的效果;代码实现也是比较简单,单纯地调用接口代码即可;至于摇一摇动能,之前的文章也有提到过,so,不复赘述。

window.addEventListener('deviceorientation',  function(e) {var x = parseInt(e.gamma);var w = parseInt(0.4*x);if(Math.abs(x) < 80){$('.p0_cen').css('webkitTransform',' translate3d('+0.8*w+'px,0px,0) rotate3d(0,1,0,' + 1*w + 'deg) ');$('.p0_tip').css('webkitTransform',' translate3d('+2*w+'px,0px,0) rotate3d(0,1,0,' + 1.2*w + 'deg) ');if($('.p1').hasClass('on')){ //p1$('.p1_bg').css('webkitTransform','translate3d('+1.5*w+'px,0px,-100px) rotate3d(0,1,0,' + 0.8*w + 'deg) scale(1.5)');$('.p1_tit1').css('webkitTransform',' translate3d('+1.4*w+'px,0px,0) rotate3d(0,1,0,' + 1.5*w + 'deg) ');$('.p1_tit2').css('webkitTransform',' translate3d('+1*w+'px,0px,0) rotate3d(0,1,0,' + 1.5*w + 'deg) ');$('.p1_tit3').css('webkitTransform',' translate3d('+1.2*w+'px,0px,0) rotate3d(0,1,0,' + 1.2*w + 'deg) ');$('.p1_tit4').css('webkitTransform',' translate3d('+.7*w+'px,0px,0) rotate3d(0,1,0,' + 1*w + 'deg) ');$('.p1_bot').css('webkitTransform',' translate3d('+2*w+'px,0px,0) rotate3d(0,1,0,' + 0.6*w + 'deg) ');};        };
});

2.帧动画,css spite,css animation;

  页面中的动画效果主要还是由css3 的animation组成,比较直观可控;由于设计的特殊性,需要用到大量仿真的场景动画效果,这时候显然是图片输出为主,尽管css sprite动画也可以做到,不过对于大帧数的效果,一个是不易导出整张图片,存储大小过大,另外一点就是不利于网页加载速度;所以用js控制images替换的帧动画比较合适。当然,提前预加载图片,时间控制,与音频的同步也是需要注意的细节。

 

var barTimer = setInterval(function(){if(num < 52){var path = 'res/img/p5/all_000'+num+'.jpg';$('.p5_anigla').attr('src',path);num++;}else{clearInterval(barTimer);};},50);

3.html5 <video>的使用;

  由于母亲节设计的原因,在初始loading完资源后会涉及到视频的自动播放,好的一点是在微信内置浏览器里,可以自动播放,外置浏览器比如safari还是需要用户交互才能执行,所以根据项目的运行环境还是需要做不同的事件处理;

  另外一点值得注意的就是,在微信内置浏览器里非wp.weixin.com域名下的视频资源,在安卓下引用会出现各种各样的播放组件(比如播放完后会出现播放按钮,视频下方的进度条等;),ios暂无此等问题;所以,在运用视频的时候就需要针对安卓用户考虑是否接受这样一个效果体验;否则,还是做平台的不同处理吧。

4.移动自适应的优化;

  此次还有一点就是针对以前的页面适配问题再次作了一次普遍的优化;由于市面上的各种显示屏大小,分辨率的存在,间可能减少在码css的时候针对分辨率做媒体查询;所以,结合网上的一些代码案例,将之前的纯rem,依靠screen width适配的方案进行了提升:

  1)约定了基础设计图纸的大小;

  2)根据屏幕高度采取了比例缩放,使得布局不再仅仅依据屏幕宽度做调整;

 

!function(win, option) {var count = 0, designWidth = option.designWidth, designHeight = option.designHeight || 0, designFontSize = option.designFontSize || 20, callback = option.callback || null,root = document.documentElement,body = document.body,rootWidth, newSize, t, self;//返回root元素字体计算结果function _getNewFontSize() {var scale = designHeight !== 0 ? Math.min(win.innerWidth / designWidth, win.innerHeight / designHeight) : win.innerWidth / designWidth;return parseInt( scale * 10000 * designFontSize ) / 10000;}!function () {rootWidth = root.getBoundingClientRect().width;self = self ? self : arguments.callee;//如果此时屏幕宽度不准确,就尝试再次获取分辨率,只尝试20次,否则使用win.innerWidth计算if( rootWidth !== win.innerWidth &&  count < 20 ) {win.setTimeout(function () {count++;self();}, 0);} else {newSize = _getNewFontSize();//如果css已经兼容当前分辨率就不管了if( newSize + 'px' !== getComputedStyle(root)['font-size'] ) {root.style.fontSize = newSize + "px";return callback && callback(newSize);};};}();//横竖屏切换的时候改变fontSize,根据需要选择使用win.addEventListener("onorientationchange" in window ? "orientationchange" : "resize", function() {clearTimeout(t);t = setTimeout(function () {self();}, 200);}, false);}(window, {designWidth: 640, designHeight: 1136,designFontSize: 100,callback: function (argument) {/*console.timeEnd("test")*/}});

 

三、缺陷与短板;

由于开发时间与进程等各种原因,几个h5堆积起来也是蛮紧张的,即时基础模板与样式库大同小异,不过还是聊下在各种调整与优化中出现的不足;

1.css3 3D动画

  1)很早之前的h5使用css3 3D animation的时候已经提出过这个问题,就是在ios系统上的ratateX,Y系列总会与页面元素之间出现穿透遮挡的问题,一直没有找到代码层面的原因,究其根本还是浏览器自身的支持与解析造成的吧,总之安卓上webkit内核是没有这种情况出现的;

不过问题还是要处理掉的,方法无非就是外层容器溢出隐藏:overflow:hidden;另外就是在z距上的translate ,再相应地scale缩放。

  2)对3D变换的更深理解:不可或缺的perspective,意为透视,视角;正确使用将会给使用者在视觉上造成3D的视觉,主要表示的就是观察者距离屏幕的px距离;正为前方观察,负值为后方;

-webkit-perspective:620px;

   自然,你可以将这个属性单独设置到舞台容器上,也可以针对不同视觉效果单独给元素添加;

  3)还是那个老问题,针对低端安卓机,即使开启了硬件加速,也会或多或少地出现动画卡顿不流畅的情况,所以根据以后h5的设计趋势,动画效果占比越来越大,css3的动画应该尽量少用,转为canvas;

2.音视频的控制

  以后的H5几乎都会有音视频的加入吧,也算是一个整体流行趋势,不管是吴亦凡H5 还是前段时间的宝马M2,视频的运用已经比较普遍;但是兼容性还是存在各种问题,比如(安卓不能同时播放2个多媒体,自动全屏播放,预加载,不同网络状况下的处理等等);

所以考虑到以后的优化手段与开发效率,需要一些动画库来管理与处理,比如以前开发中使用过的craftyJs一类的动画框架,最近也在研究腾讯TGideas的几个 动画H5,个人觉得creatJs这个类库也是方案很好的解决途径之一。

3.图片处理

  图片上传显示也算是在移动网页上,尤其是一些互动性h5常见的功能点,此次为了配合最后的大头贴功能,也着实是对图片压缩适配做了不少工作;包括截取的自适应,热区感应,位置对齐等,不过经过前几个h5的经验,最后还是比较完美地处理;不过手机浏览器对input的限制也是大不相同;有的安卓依旧不能选择摄像头即时拍照;编辑卡顿的现象。不过这也是很少在手机移动端出现图片大功能编辑的原因之一,总之还是根据实际功能需求来调整。

 

结束语:现在的移动端H5热潮差不多是一个稳定的阶段,通俗一点就是烂大街了,不过依旧会有大厂的神来之笔出现让人眼前一亮;微信衍生出来的这个移动平台也极大地推广了移动web的发展;各种技术与创意也是层出不穷。

即使前段时间 腾讯放出的H5推广浏览率分析,有点让人开发者心灰意冷;但是也很好地说明了,技术与创新结合,想象力与设计,给用户新颖舒适的体验才能催发更优秀的作品。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/3colors/p/5474700.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

依赖包报错Invalid options object. Less Loader has been initialized using an options object that does not

1.问题&#xff1a;yarn安装依赖包&#xff0c;启动项目报错 error in ./node_modules/ant-design-vue/dist/antd.less Module build failed: ValidationError: Invalid options object. Less Loader has been initialized using an options object that does not match the A…

Asp.net页面和Html页面之间的关系

Asp.net页面显然要转化为普通的html页面才能在浏览器中显示&#xff0c;但是对于两者的关系&#xff0c;或者说从服务器在接受请求处理请求这段时间内对asp.net页面的操作一直不是很明白&#xff0c;下边的一段话可以让人豁然开朗&#xff0c;虽然并未谈论技术&#xff0c;但简…

vue-cli2定制ant-design-vue主题

本篇是vue-cli2定制主题&#xff0c;vue-cli3通过vue.config.js定制主题点击此处 1.引入less和less-loader&#xff08;如果报错&#xff0c;请将less-loader版本更改到5.0.0&#xff09; npm install less less-loader --save2.在 vue cli 2 中定制主题&#xff0c;修改build…

YUV视频格式分析

Andrew Huang <bluedrum163.com> 转载请注明作者及联络方式在摄像头之类编程经常是会碰到YUV格式,而非大家比较熟悉的RGB格式. 我们可以把YUV看成是一个RGB的变种来理解.YUV的原理是把亮度与色度分离&#xff0c;研究证明,人眼对亮度的敏感超过色度。利用这个原理&#x…

自定义ant中table表格的展开图标 修改ant-vue-design中嵌套表格table的expandIcon自定义图标

效果&#xff1a; 1. <a-table:expandIcon"expandIcon":loading"loading":columns"columns":data-source"data"class"components-table-demo-nested"change"onChangeTable":scroll"{x:1300,y:y}":p…

Foundationd和Application Kit的类层次

Foundationd类 Application Kit类 转载于:https://www.cnblogs.com/ikodota/archive/2012/08/01/2618590.html

dup和dup2的使用方法

/*本文通过标准输出的重定向和恢复的过程来解释dup和dup2的使用方法*/#include <stdio.h> #include <unistd.h>#include <fcntl.h>//STDIN_FILENO标准输入描述符&#xff08;0&#xff09;//STDOUT_FILENO标准输出描述符&#xff08;1&#xff09; //STDERR_…

python多线程编程(2): 线程的创建、启动、挂起和退出

From: http://www.cnblogs.com/holbrook/archive/2012/03/02/2376940.html 如上一节&#xff0c;python的threading.Thread类有一个run方法&#xff0c;用于定义线程的功能函数&#xff0c;可以在自己的线程类中覆盖该方法。而创建自己的线程实例后&#xff0c;通过Thread类的…

记录ie下报XMLHttpRequest: 网络错误 0x80070005, 拒绝访问。

问题&#xff1a; 同样的调用接口&#xff0c;在谷歌是没有问题的&#xff0c;但是在ie下报错XMLHttpRequest: 网络错误 0x80070005, 拒绝访问。 1.分析&#xff1a; 对比了一下&#xff0c;相同的是接口传递参数错误导致报错&#xff0c;传递的参数自动带上了 " "…

MVC3.0+DWZ探索

将themes 文件移到 js文件 index.html 转载于:https://www.cnblogs.com/acyy/archive/2012/08/03/2621594.html

棋盘覆盖

在一个2k x 2k ( 即&#xff1a;2^k x 2^k )个方格组成的棋盘中&#xff0c;恰有一个方格与其他方格不同&#xff0c;称该方格为一特殊方格&#xff0c;且称该棋盘为一特殊棋盘。在棋盘覆盖问题中&#xff0c;要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外…

VMM2012应用指南之12- 创建自助服务用户并分配云

河北经贸大学 王春海如果要在云中创建、管理虚拟机&#xff0c;首先要创建自助服务帐户&#xff0c;在创建用户角色的同时即可以分配云。本节介绍这部分内容。【说明】在做下面的这个操作的时候&#xff0c;需要向“库”服务器再添加另外一个库的路径&#xff0c;用于保存云中的…

解决vue项目在ie浏览器下白屏问题;ie运行项目报正在兼容性是图中运行,因为选中了“在兼容性视图中显示Intranet站点”

如果已经配置了babel-polyfill&#xff0c;在ie下依然白屏&#xff0c;打开控制台刷新&#xff0c;看看是否报 正在兼容性是图中运行&#xff0c;因为选中了“在兼容性视图中显示Intranet站点” 如图 解决方案 在ie浏览器—设置—兼容性视图设置&#xff08;B&#xff09;…

python多线程编程(4): 死锁和可重入锁

From: http://www.cnblogs.com/holbrook/archive/2012/03/08/2385449.html 在线程间共享多个资源的时候&#xff0c;如果两个线程分别占有一部分资源并且同时等待对方的资源&#xff0c;就会造成死锁。尽管死锁很少发生&#xff0c;但一旦发生就会造成应用的停止响应。下面看一…

ie浏览器跨域报错问题;Access-Control-Allow-Headers 列表不存在请求表头 content-type;XMLHTTPRequest:网络错误 0x80070005,拒绝访问。

问题&#xff1a; 这段是我在main.js下设置的&#xff0c;为了在请求头上添加后端需要的参数sessionId 和xrequestedwith &#xff0c;在谷歌下是正常的&#xff0c;ie报Access-Control-Allow-Headers 列表不存在请求表头 content-type&#xff1b;XMLHTTPRequest:网络错误 0x…

python多线程编程(5): 条件变量同步

From: http://www.cnblogs.com/holbrook/archive/2012/03/13/2394811.html 互斥锁是最简单的线程同步机制&#xff0c;Python提供的Condition对象提供了对复杂线程同步问题的支持。Condition被称为条件变量&#xff0c;除了提供与Lock类似的acquire和release方法外&#xff0c…

Prototype 字符串

2019独角兽企业重金招聘Python工程师标准>>> 原文地址&#xff1a;http://www.yiibai.com/prototype/prototype_string_processing.html Prototype 字符串处理&#xff1a;方法操作使用例子 - 学习如何操纵DOM和AJAX使用Prototype JavaScript框架.Prototype提高了一…

vue-cookies使用方法,vue中使用获取cookie

1.安装vue-cookies npm install vue-cookies -S2.在main.js引入 import VueCookies from "vue-cookies";Vue.use(VueCookies);如图&#xff1a; 3.在vue组件中使用(如果存入的是对象&#xff0c;需要先转换为json字符串) 设置cookies this.$cookies.set(fileIn…

认识repo

任何一个学习Android开发的开发者如果想要深入学习Android&#xff0c;一定要看Android源码&#xff0c;网上关于下载Android源码的教程有很多&#xff0c;如果你已经翻墙了&#xff0c;你可以直接参考Google官网的教程或者老罗最新出的教程&#xff0c;如果你还没有翻墙&#…