当前位置: 首页 > news >正文

「前端早读君006」移动开发必备:那些玩转H5的小技巧

今日励志语录
有志者自有千计万计,无志者只感千难万难。

文章原出处:腾讯ISUX

开始阅读之前你可以先扫一扫体验demo
clipboard.png

一、CSS3时序错开渐显动画

这是一种比较常用的动画,它的优点是节奏感强,做法就是先让每个元素隐藏,然后当页面呈现后每个元素错开时间出现。

例子(忽略兼容前缀和无关属性):

clipboard.png

效果就是两个元素分别从上面掉下来,这里有个小细节(keyframes),为了让掉下来的动画生动点,应该是在90%的时候先掉下一点点,然后瞬间在100%时回跳5px。

还有个细节,安卓2.3.*不能良好支持-webkit-animation-fill-mode,也就是渐变动画不能停止在最后一帧。有这样一个解决方案:

1.用Modernizr去检测是否支持这个属性,加上识别类.no-animation-fill-mode;

2.根据识别类采取以下措施:

(1)用js模拟同样效果;

(2)用css屏蔽掉动画;

(3)或者直接全部都用transition来做(不要keyframes)。

示例页面如下:

clipboard.png

二、CSS3细节强调动画

一些局部细节如果还是渐现显示,会枯燥没什么感觉,例如标题、按钮等,需要一种强调。

分两种情况:

1.如果时间允许的话,基本做法是先把一个元素切成不同的块状,例如小人的手脚都切成不同图片,然后让它们重新组合,再通过赋予不同的CSS动画来让它生动起来,这里引用个webank的例子:

clipboard.png

2.如果时间紧凑,又不像桑尼一样擅长于动画细节,可以使用一些辅助工具:

Animate.css,通过直接预览选择想要的动效,然后下载它的CSS把对应的keyframe扒下来就好了(引用整个CSS是资源浪费)。

三、SVG动画

SVG技术越来越不陌生,使用门槛也渐渐降低,而且SVG动画还可以使用CSS控制。

可见SVG是很强大的!弥补了CSS3的不足。

然而这种动画也是略耗时,但有一种比较常用的,就是线条的描绘动画,CSS3比较难实现,这里可以用SVG,

介绍一个PS插件svgArtisan(目前还未有主页),这个工具可以直接根据PSD的路径图层生成SVG图形。

接下来就简单了,将设计稿上的路径图形用插件生成对应的SVG,例如是这样的:

(注意,其中的foreignObject标签内是不支持svg的浏览器会看到一张.m3-svg-nosupport标签下的图片。)

clipboard.png

再使用CSS3的animation控制stroke-dashoffset:

clipboard.png

效果不难吧!SVG还有各种用途,例如制作ICONFONT等,可以深入挖掘。

四、 重力陀螺仪

想让页面更有层次感,不妨让设计提供一些碎片元素,例如彩花,星星之类,然后把它们单独切出来放画面前景,使用陀螺仪伴随着手机运动碎片也跟着运动,多么好玩!

这里提供一个工具可以轻松实现陀螺仪重力效果的:parallax.js

用法简单,定义一个parallax-obj的父类,把需要动的元素加上layer的类,然后设置动的范围data-depth:

clipboard.png

五、背景音乐&音效

H5页面要炫酷,画面生动还是不够的,一定要配合生动的音乐。因此可以主动跟设计或产品沟通,让他们可以提供音乐资源,分分钟导致UV猛涨有木有!

当然,有了音乐,前端也不是直接引用的,还是有点要求:

1.音乐不宜过长,30s为佳,而且音乐要加上渐现渐隐效果,方便循环播放;

2.音乐体积要小,音质和流量,在手机上还是优先考虑流量吧。

一般背景音乐体积可以接受的范围是200K以下,若太大,可以使用格式工厂等软件,降低它的比特率和声道来改变体积。

接着,只需要简单引用:

clipboard.png

这里有个问题,IOS是不能自动播放音乐的,一定要触发一个用户交互事件,例如点击。

但是有一种hack的方法可以让IOS微信侧页面自动播放(SAFARI依旧无效):

通过new一张图片,监听一张图片的onload事件,结束后回调执行音频播放audio.play()即可,原理估计是动了dom结构,相当于执行了一次交互。(有人也用过createEvent模拟,原理也是动了dom。)

因此,记得暴露一个音乐关闭/打开的按钮,不然肯定被用户骂死。

六、有趣的loading

Loading页还是要有的,万一用户网速慢呢?

以上做了那么多事,如果没有资源加载都是玩不来的,因此还需要一个loading的支持。一般情况下页面体积大于3m则要加上loading页。

然而loading还是可以做得很有趣的,一般的做法是:

1.引入品牌,例如APP宣传页;

2.引入有趣动画,放一个贱贱的人物跳舞给你看;

3.一切从简,用CSS3简单动画。

====最后总结====

最后,给一个例子结尾吧。

这是空间5.0预约页第二版,使用了以上的若干方法论,例如loading动画,CSS3动画,SVG星空连线,首屏星球重力感应,音乐(这里使用开启按钮后播放)等等。(由于活动已结束,很多运营处都被删掉从简了,忽略那些细节)

clipboard.png

当然,真正要做到高效制作动态H5页面,还是靠积累,因此平时做好的细节动画自己都积累起来,下次分分钟就能用得上。

clipboard.png
扫一扫查看效果

打开微扫一扫关注早读君,每天早晨为你推送前端知识,度过挤地铁坐公交的时光

相关文章:

  • ERLANG 网工修炼笔记 ---- UDP
  • 10.Spring入门笔记
  • css 单选按钮图标替换
  • CF724E Goods transportation
  • Binomial Coefficient(二项式系数)
  • 桂余丢证
  • 记2018年的最后一个bug
  • 算法踩坑小记
  • 洛谷P3674 小清新人渣的本愿
  • 我们是如何从ng1迁移ing到vue的
  • linux设置动态库路径和环境变量
  • 小细节见实力,告诉你vivo Z3如何成为爆款千元机
  • 8分钟学会Consul集群搭建及微服务概念
  • 2019年Java和JVM生态系统预测:OpenJDK将成为Java运行时市场领导者
  • 天海实业携手海宇勇创签署战略合作协议
  • conda常用的命令
  • CSS中外联样式表代表的含义
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • javascript从右向左截取指定位数字符的3种方法
  • js递归,无限分级树形折叠菜单
  • js面向对象
  • Laravel 中的一个后期静态绑定
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • VuePress 静态网站生成
  • 当SetTimeout遇到了字符串
  • 关于 Cirru Editor 存储格式
  • 记一次和乔布斯合作最难忘的经历
  • 提醒我喝水chrome插件开发指南
  • 项目管理碎碎念系列之一:干系人管理
  • 一道闭包题引发的思考
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​linux启动进程的方式
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #NOIP 2014#Day.2 T3 解方程
  • #pragma 指令
  • (C语言)fgets与fputs函数详解
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一) springboot详细介绍
  • (一)Linux+Windows下安装ffmpeg
  • (转)详解PHP处理密码的几种方式
  • .net 4.0发布后不能正常显示图片问题
  • .NET Core 2.1路线图
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .net MVC中使用angularJs刷新页面数据列表
  • .Net Remoting(分离服务程序实现) - Part.3
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET开源快速、强大、免费的电子表格组件
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • @RequestBody与@ResponseBody的使用
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • []sim300 GPRS数据收发程序