HTML5与移动端Web

概述css

HTML5 提供了不少新的功能,主要有:html

  • 新的 HTML 元素,例如 section, nav, header, footer, article 等前端

  • 用于绘画的 Canvas 元素html5

  • 用于多媒体播放的 video 和 audio 元素android

  • 用于定位的 Geolocation APIios

  • 本地存储以及离线应用git

  • Web Workers、Web WebSocket APIgithub

移动前端开发可分为:web

  • 手机网页开发。这部分跟web前端开发差异不大,使用的技术都是html+css+js。区别为手机浏览器是webkit的天下,pc端是IE的天下。数据库

  • App前端开发。使用的技术也是html+css+js,但它须要基于PhoneGap,React Native等开发平台调用手机核心功能接口(包括地理定位,加速器,联系人,声音和振动等)模拟native app,这部分跟web前端开发彻底不一样。最终代码发布要分别编译成各系统平台的app。

canvas

canvas部分请参考:浅尝HTML5之canvas

drag and drop(拖拽)

拖拽元素事件: 事件对象为被拖拽元素

  • dragstart:  拖拽前触发 

  • drag:拖拽前、拖拽结束之间,连续触发

  • dragend: 拖拽结束触发

目标元素事件: 事件对象为目标元素

  • dragenter:  进入目标元素触发,至关于mouseover

  • dragover: 进入目标、离开目标之间,连续触发

  • dragleave:  离开目标元素触发,至关于mouseout

  • drop: 在目标元素上释放鼠标触发

事件的执行顺序 :drop不触发的时候

  • dragstart  >  drag >  dragenter >  dragover >  dragleave > dragend 

事件的执行顺序 :drop触发的时候(dragover的时候阻止默认事件)

  • dragstart  >  drag >  dragenter >  dragover >  drop > dragend

解决火狐下的问题

火狐浏览器下必须设置dataTransfer对象的setData方法才能够拖拽除图片外的其余标签。

dataTransfer属性和方法

属性 描述
dropEffect 设置或获取拖曳操做的类型和要显示的光标类型
effectAllowed 设置光标样式(none, copy, copyLink, copyMove, link, linkMove, move, all 和 uninitialized)
setDragImage 三个参数:指定的元素,坐标X,坐标Y
files 获取外部拖拽的文件,返回一个filesList列表。filesList下有个type属性,返回文件的类型

 

方法 描述
clearData 经过 dataTransfer 或 clipboardData 对象从剪贴板删除一种或多种数据格式
setData() 设置数据 key和value(必须是字符串)
getData() 获取数据,根据key值,获取对应的value

只有加阻止默认事件才能够触发drop

1
2
3
  oDiv.ondragover =  function (ev){   //只有加阻止默认事件才能够触发drop
         ev.preventDefault();
     };

drag and drop的浏览器支持状况:

2169587196-553cce03af12f.jpg

HTML5实现拖拽上传预览图片(点击下载实现代码

FileReader(读取文件信息)

属性名 描述
error 在读取文件时发生的错误. 只读
readyState 代表FileReader对象的当前状态
result 读取到的文件内容。这个属性只在读取操做完成以后才有效

 

方法名 描述
abort 停止该读取操做,在返回时,readyState属性的值为DONE
readAsArrayBuffer 将File对象F读取为一个 ArrayBuffer 对象
readAsBinaryString 将File对象F读取为一个二进制字符串
readAsDataURL 将File对象F读取为编码过的数据URL
readAsText(File f, [encoding]) 读取 File对象F并赋予一个字符串

建立一个FileReader对象:

1
var  reader =  new  FileReader();

Web Worker和缓存

Web Worker的基本原理就是在当前js的主线程中,使用Worker类加载一个js文件来开辟一个新的线程,起到互不阻塞执行的效果,而且提供主线程和新线程之间数据交换的接口:postMessage,onmessage。

主机 worker 和 worker 脚本能够经过 postMessage 发送消息并使用 onmessage 事件侦听响应。消息的内容做为事件的数据属性进行发送。

1
2
3
4
var  worker =  new  Worker( 'worker.js' );
worker.onmessage =  function (e) {
   alert(e.data);
};

worker主线程:

1.经过 worker = new Worker( url ) 加载一个JS文件来建立一个worker,同时返回一个worker实例。

2.经过worker.postMessage( data ) 方法来向worker发送数据。

3.绑定orker.onmessage方法来接收worker发送过来的数据。

4.可使用 worker.terminate() 来终止一个worker的执行。

worker新线程:

1.经过postMessage( data ) 方法来向主线程发送数据。

2.绑定onmessage方法来接收主线程发送过来的数据。

例子:计数功能

首先建立一个index.html文件

QQ截图20150604182750.png

其次,建立一个count.js文件:

1
2
3
4
5
6
7
var  countNum = 0;
function  count(){
     postMessage(countNum);
     countNum++;
     setTimeout(count,1000);
}
count();

再建立一个index.js文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var  numDiv;
var  work =  null ;
window.onload =  function  () {
     numDiv = document.getElementById( 'numDiv' );
     document.getElementById( 'start' ).onclick = startWorker;
     document.getElementById( 'stop' ).onclick =  function  () {
         if (work){
             work.terminate(); //中止,释放掉资源
             work =  null ; //work从新初始化
         }
     };
};
function  startWorker(){
     if (work){
         return ;
     }
     work =  new  Worker( 'count.js' );
     work.onmessage =  function  (e) {
         numDiv.innerHTML = e.data;
     };
}

2022515381-553cef54e0852_articlex.jpg

Web SQL

三个核心方法:

一、openDatabase:这个方法使用现有数据库或建立新数据库建立数据库对象。

二、transaction:这个方法容许咱们根据状况控制事务提交或回滚。

三、executeSql:这个方法用于执行真实的SQL查询。 

浏览器的本地数据库占用资源少,处理速度快。

openDatabase方法打开一个已经存在的数据库,若是数据库不存在,它还能够建立数据库,建立并打开数据库的语法以下:

1
var  db = openDatabase( 'mydb' '1.0' 'Test DB' , 2 * 1024 * 1024);

参数为:数据库名(mydb)、版本号(1.0)、描述(Test DB)和数据库大小(2*1024*1024)以及建立回调函数。

WebSockets

TCP是因特网的基础传输协议,而WebSocket是Web应用程序的传输协议,它提供了双向的,按序到达的数据流。WebSocket链接的是URL,而非因特网上的主机和端口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  // 建立一个Socket实例
var  socket =  new  WebSocket( 'ws://localhost:8080' );
// 打开Socket
socket.onopen =  function (ev) {
     // 发送一个初始化消息
     socket.send( 'hello HTML5' );
     // 监听消息
     socket.onmessage =  function (ev) {
         console.log( 'Client received a message' ,ev);
     };
     // 监听Socket的关闭
     socket.onclose =  function (ev) {
         console.log( 'Client notified socket has closed' ,ev);
     };
     // 关闭Socket....
     socket.close()
};

同http协议使用http://开头同样,WebSocket协议的URL使用ws://开头,而安全的WebSocket协议使用wss://开头。

HTTP协议一般承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了咱们常说的HTTPS。

 

3388588914-553de862a75ae_articlex.jpg

默认HTTP的端口号为80,HTTPS的端口号为443。

getUserMedia API

navigator.getUserMedia能够提示用户须要权限去使用像摄像头或麦克风之类的媒体设备

 

下面是一个获取用户摄像头并提供拍照功能的例子(点击下载实现源码

下面是浏览器兼容性的写法:

 

QQ截图20150604183146.png

浏览器对象点击下载大图

1465036893-553e4ae9ad4c3.jpg

audio和video

下图是audio和video的属性及其浏览器的兼容性:

3235211975-553dee6d0cdb8.jpg

Fullscreen API

进入全屏模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 找到正确的方法  
function  launchFullScreen(element) {  
   if (element.requestFullScreen) {  
     element.requestFullScreen();  
   else  if (element.mozRequestFullScreen) {  
     element.mozRequestFullScreen();  
   else  if (element.webkitRequestFullScreen) {  
     element.webkitRequestFullScreen();  
   }  
}  
// 启动全屏模式  
launchFullScreen(document.documentElement);  // 整个页面  
launchFullScreen(document.getElementById( "videoElement" ));  // 单独元素 
退出全屏模式
function  cancelFullscreen() {  
   if (document.cancelFullScreen) {  
     document.cancelFullScreen();  
   else  if (document.mozCancelFullScreen) {  
     document.mozCancelFullScreen();  
   else  if (document.webkitCancelFullScreen) {  
     document.webkitCancelFullScreen();  
   }  
}  
// 取消全屏  
cancelFullscreen();

全屏属性和事件

  • document.fullScreenElement:当前全屏显示的元素。

  • document.fullScreenEnabled:判断浏览器是否支持全屏。

  • fullscreenchange事件:全屏状态改变事件。

History API

HTML5 更新了两个API,无刷新更新地址 history.pushState方法和history.replaceState 方法。

Geolocation API

Geolocation API 是经过window.navigator.geolocation 得到对地理定位的访问的。该对象有以下三个方法:

  • getCurrentPosition()

  • watchPosition()

  • clearWatch()

4211637635-553e4732ca7c5.jpg

表单元素

HTML5 新增了不少表单元素让开发者构建更优秀的 Web 应用程序。如下是HTML5新增的表单元素

  • datalist

  • datetime

  • output

  • keygen 

  • date 

  • month 

  • week

  • time

  • color

  • number 

  • range 

  • email 

  • url

1485979339-553e37ef283da_articlex.jpg

html5移动端优化

PC端的优化对于移动端一样适用,Android同时支持4个并发请求,iOS 5后可支持6个,因此,应尽可能减小http请求数

3552139123-553e3cd058c1c_articlex.jpg

1. PC优化手段在Mobile侧一样适用

2. 在Mobile侧咱们提出三秒种渲染完成首屏指标

3. 基于第二点,首屏加载3秒完成或使用Loading

4. 基于联通3G网络平均338KB/s(2.71Mb/s),因此首屏资源不该超过1014KB

5. Mobile侧因手机配置缘由,除加载外渲染速度也是优化重点

6. 基于第五点,要合理处理代码减小渲染损耗

7. 基于第2、第五点,全部影响首屏加载和渲染的代码应在处理逻辑中后置

8. 加载完成后用户交互使用时也需注意性能

462322984-553e3da07b565.jpg

不滥用Float

Float在渲染时计算量比较大,尽可能减小使用

不滥用Web字体

Web字体须要下载,解析,重绘当前页面,尽可能减小使用

不声明过多的Font-size

过多的Font-size引起CSS树的效率

减小重绘和回流

a) 避免没必要要的Dom操做

b) 尽可能改变Class而不是Style,使用classList代替className

c) 避免使用document.write

d) 减小drawImage

Viewport能够加速页面的渲染,请使用如下代码

QQ截图20150604183227.png

动画优化

a) 尽可能使用CSS3动画

b) 合理使用requestAnimationFrame动画代替setTimeout

c) 适当使用Canvas动画 5个元素之内使用css动画,5个以上使用Canvas动画(iOS8可以使用webGL)

GPU加速

CSS中如下属性(CSS3 transitions、CSS3 3D transforms、Opacity、Canvas、WebGL、Video)来触发GPU渲染,请合理使用

PS:过渡使用会引起手机过耗电增长

资料参考:

如何作到一秒渲染一个移动页面

HTML5与CSS3语法提供浏览器兼容性测试及使用建议

meta相关总结

HTML5页面窗口自动调整到设备宽度,并禁止用户缩放页面

1433414035228191.png

忽略将页面中的数字识别为电话号码

 

QQ截图20150604183417.png

忽略Android平台中对邮箱地址的识别

QQ截图20150604183542.png

当网站添加到主屏幕快速启动方式,可隐藏地址栏,仅针对iOS的safari

QQ截图20150604183555.png

 

 

将网站添加到主屏幕快速启动方式,仅针对ios的safari顶端状态条的样式

QQ截图20150604183611.png

 

 

移动端touch事件(区分webkit 和 winphone)

当用户手指放在移动设备在屏幕上滑动会触发的touch事件

如下支持webkit:

touchstart——当手指触碰屏幕时候发生。无论当前有多少只手指

touchmove——当手指在屏幕上滑动时连续触发。一般咱们再滑屏页面,会调用event的preventDefault()能够阻止默认状况的发生:阻止页面滚动

touchend——当手指离开屏幕时触发

touchcancel——系统中止跟踪触摸时候会触发。例如在触摸过程当中忽然页面alert()一个提示框,此时会触发该事件,这个事件比较少用

如下支持windows phone 8:

MSPointerDown——当手指触碰屏幕时候发生。无论当前有多少只手指

MSPointerMove——当手指在屏幕上滑动时连续触发。一般咱们再滑屏页面,会调用css的html{-ms-touch-action: none;}能够阻止默认状况的发生:阻止页面滚动

MSPointerUp——当手指离开屏幕时触发

手机拍照和上传图片

QQ截图20150604183628.png

使用总结:

  • iOS有拍照、录像、选取本地图片功能

  • 部分android只有选取本地图片功能

  • winphone不支持

  • input控件默认外观丑陋

移动端手势总结

主要用户操做

3679495380-553e443f4170f.jpg

手势的具体操做

251376531-553e4403d337d_articlex.jpg

触摸屏手势

2002195188-553e44249b29c_articlex.jpg

手势的具体操做

457264527-553e443113302.jpg

相关文章
相关标签/搜索