热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HTML5与移动端web学习笔记

HTML5提供了很多新的功能,主要有:新的HTML元素,例如section,nav,header,footer,article等用于绘画的Canvas元素用于多媒体播放的

HTML5 提供了很多新的功能,主要有:

新的 HTML 元素,例如 section, nav, header, footer, article 等
用于绘画的 Canvas 元素
用于多媒体播放的 video 和 audio 元素
用于定位的 Geolocation API
本地存储以及离线应用
Web Workers、Web WebSocket API

移动前端开发可分为:

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

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

canvas

canvas部分请参考:http://segmentfault.com/a/1190000000661407

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

 oDiv.Ondragover= function(ev){ //只有加阻止默认事件才可以触发drop ev.preventDefault(); }; 

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

HTML5实现拖拽上传预览图片:

 1 
 2     
 3     
 4     
19     
70 
71 
72 

请拖拽到此区域

73
    74

    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对象:

    var reader = new FileReader(); 

    Web Worker和缓存

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

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

    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.绑定worker.onmessage方法来接收worker发送过来的数据。 4.可以使用 worker.terminate() 来终止一个worker的执行。 

    worker新线程:

    1.通过postMessage( data ) 方法来向主线程发送数据。
    
    2.绑定onmessage方法来接收主线程发送过来的数据。
    

    例子:计数功能

    首先创建一个index.html文件

     1 
     2 
     3 
     4     
     5     
     6     
     7 
     8 
     9 
    0
    10 11 12 13

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

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

    再创建一个index.js文件

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

    Web SQL

    三个核心方法:

    1、openDatabase:这个方法使用现有数据库或创建新数据库创建数据库对象。
    
    2、transaction:这个方法允许我们根据情况控制事务提交或回滚。
    
    3、executeSql:这个方法用于执行真实的SQL查询。 
    

    浏览器的本地数据库占用资源少,处理速度快。
    openDatabase方法打开一个已经存在的数据库,如果数据库不存在,它还可以创建数据库,创建并打开数据库的语法如下:

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

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

    WebSockets

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

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

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

    HTTP协议通常承载于TCP协议之上,有时也承载于TLSSSL协议层之上,这个时候,就成了我们常说的HTTPS

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

    getUserMedia API

    navigator.getUserMedia可以提示用户需要权限去使用像摄像头或麦克风之类的媒体设备.
    下面是一个获取用户摄像头并提供拍照功能的例子:

     1 
     2 
     3 
     4 
     5 
    44 

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

    1 

    浏览器对象

    audio和video

    下图是audiovideo的属性及其浏览器的兼容性:

    Fullscreen API

    进入全屏模式

     1 // 找到正确的方法  
     2 function launchFullScreen(element) {  
     3   if(element.requestFullScreen) {  
     4     element.requestFullScreen();  
     5   } else if(element.mozRequestFullScreen) {  
     6     element.mozRequestFullScreen();  
     7   } else if(element.webkitRequestFullScreen) {  
     8     element.webkitRequestFullScreen();  
     9   }  
    10 }  
    11 
    12 // 启动全屏模式  
    13 launchFullScreen(document.documentElement); // 整个页面  
    14 launchFullScreen(document.getElementById("videoElement")); // 单独元素 

    退出全屏模式

     1 function cancelFullscreen() {  
     2   if(document.cancelFullScreen) {  
     3     document.cancelFullScreen();  
     4   } else if(document.mozCancelFullScreen) {  
     5     document.mozCancelFullScreen();  
     6   } else if(document.webkitCancelFullScreen) {  
     7     document.webkitCancelFullScreen();  
     8   }  
     9 }  
    10 
    11 // 取消全屏  
    12 cancelFullscreen();   

    全屏属性和事件

    document.fullScreenElement:当前全屏显示的元素。 document.fullScreenEnabled:判断浏览器是否支持全屏。 fullscreenchange事件:全屏状态改变事件。 

    History API

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

    Geolocation API

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

    getCurrentPosition()
    watchPosition()
    clearWatch()
    

    表单元素

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

    datalist datetime output keygen date month week time color number range email url 

    html5移动端优化

    PC端的优化对于移动端同样适用,Android同时支持4个并发请求,iOS 5后可支持6个,所以,应尽量减少http请求数

    1. PC优化手段在Mobile侧同样适用 2. 在Mobile侧我们提出三秒种渲染完成首屏指标 3. 基于第二点,首屏加载3秒完成或使用Loading 4. 基于联通3G网络平均338KB/s(2.71Mb/s),所以首屏资源不应超过1014KB 5. Mobile侧因手机配置原因,除加载外渲染速度也是优化重点 6. 基于第五点,要合理处理代码减少渲染损耗 7. 基于第二、第五点,所有影响首屏加载和渲染的代码应在处理逻辑中后置 8. 加载完成后用户交互使用时也需注意性能 

    不滥用Float

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

    不滥用Web字体

    Web字体需要下载,解析,重绘当前页面,尽量减少使用
    

    不声明过多的Font-size

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

    减少重绘和回流

    a) 避免不必要的Dom操作
    b) 尽量改变Class而不是Style,使用classList代替className
    c) 避免使用document.write d) 减少drawImage 

    Viewport可以加速页面的渲染,请使用以下代码

    <meta name=”viewport” cOntent=”hljs-attribute">initial-scale=1″> 

    动画优化

    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语法提供浏览器兼容性测试及使用建议:http://html5please.com/

    meta相关总结

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

    <meta name="viewport" cOntent=" /> 

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

    <meta name="format-detection" cOntent="telephOne=no" /> 

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

    <meta name="format-detection" cOntent="email=no" /> 

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

        <meta name="apple-mobile-web-app-capable" cOntent="yes" />  

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

    <meta name="apple-mobile-web-app-status-bar-style" cOntent="black" />  

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

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

    以下支持webkit

    touchstart——当手指触碰屏幕时候发生。不管当前有多少只手指
    touchmove——当手指在屏幕上滑动时连续触发。通常我们再滑屏页面,会调用event的preventDefault()可以阻止默认情况的发生:阻止页面滚动 touchend——当手指离开屏幕时触发 touchcancel——系统停止跟踪触摸时候会触发。例如在触摸过程中突然页面alert()一个提示框,此时会触发该事件,这个事件比较少用 

    以下支持windows phone 8

    MSPointerDown——当手指触碰屏幕时候发生。不管当前有多少只手指 MSPointerMove——当手指在屏幕上滑动时连续触发。通常我们再滑屏页面,会调用css的html{-ms-touch-action: none;}可以阻止默认情况的发生:阻止页面滚动 MSPointerUp——当手指离开屏幕时触发 

    手机拍照和上传图片

    accept 属性

     <input type=file accept="image/*">  <input type=file accept="video/*"> 

    使用总结:

    ios 有拍照、录像、选取本地图片功能 部分android只有选取本地图片功能 winphone不支持 input控件默认外观丑陋 

    移动端手势总结

    主要用户操作

    手势的具体操作

    触摸屏手势

    手势的具体操作


    推荐阅读
    • 详细指南:使用IntelliJ IDEA构建多模块Maven项目
      本文在前两篇文章的基础上,进一步指导读者如何在IntelliJ IDEA中创建和配置多模块Maven项目。通过详细的步骤说明,帮助读者掌握项目模块化管理的方法。 ... [详细]
    • 本文深入探讨了JavaScript中实现继承的四种常见方法,包括原型链继承、构造函数继承、组合继承和寄生组合继承。对于正在学习或从事Web前端开发的技术人员来说,理解这些继承模式对于提高代码质量和维护性至关重要。 ... [详细]
    • EasyMock实战指南
      本文介绍了如何使用EasyMock进行单元测试,特别是当测试对象的合作者依赖于外部资源或尚未实现时。通过具体的示例,展示了EasyMock在模拟对象行为方面的强大功能。 ... [详细]
    • 微信小程序中实现位置获取的全面指南
      本文详细介绍了如何在微信小程序中实现地理位置的获取,包括通过微信官方API和腾讯地图API两种方式。文中不仅涵盖了必要的准备工作,如申请开发者密钥、下载并配置SDK等,还提供了处理用户授权及位置信息获取的具体代码示例。 ... [详细]
    • 在Linux系统上构建Web服务器的详细步骤
      本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
    • 本文探讨了如何在Node.js环境中,通过Tor网络使用的SOCKS5代理执行HTTP请求。文中不仅提供了基础的实现方法,还介绍了几种常用的库和工具,帮助开发者解决遇到的问题。 ... [详细]
    • 本文探讨了浏览器的同源策略限制及其对 AJAX 请求的影响,并详细介绍了如何在 Spring Boot 应用中优雅地处理跨域请求,特别是当请求包含自定义 Headers 时的解决方案。 ... [详细]
    • 本文档详细介绍了Scrapy框架中的信号系统,包括如何利用信号来增强爬虫的功能性和灵活性,以及各个内置信号的具体用途和参数。 ... [详细]
    • 探索Squid反向代理中的远程代码执行漏洞
      本文深入探讨了在网站渗透测试过程中发现的Squid反向代理系统中存在的远程代码执行漏洞,旨在帮助网站管理者和开发者了解此类漏洞的危害及防范措施。 ... [详细]
    • 本文详细介绍了ActivityManagerService (AMS) 的工作原理及其在Android系统中的重要角色。AMS作为system_server进程的一部分,在系统启动时加载,负责管理和协调应用程序中的Activity和服务(Service)。文章将通过具体的接口图和通信流程,帮助读者更好地理解AMS的工作机制。 ... [详细]
    • 本文探讨了在QT框架中如何有效遍历文件内容,并解决了一个常见的错误,即文件内容读取为空时弹窗无法正常显示的问题。 ... [详细]
    • Spring Security核心概念与应用实践
      本文详细介绍了Spring Security的核心机制,包括其作为一系列过滤器的工作原理,如何实现用户认证与授权,以及常见的配置方法和高级特性如CSRF防护。 ... [详细]
    • 本文介绍了一个项目中如何在Windows平台上实现多声道音频数据的采集,特别是针对DANTE音频接口的8路立体声音频通道。文章详细描述了使用Windows底层音频API进行音频采集的方法,并提供了一个具体的实现示例。 ... [详细]
    • Canvas漫游:碰撞检测与动画模拟
      探索Canvas在Web开发中的应用,通过碰撞检测与动画模拟提升交互体验。 ... [详细]
    • 在DELL Inspiron 14R上部署CentOS X64 6.4的详细步骤
      本文详细记录了在DELL Inspiron 14R笔记本电脑上安装CentOS X64 6.4操作系统的过程,包括遇到的问题及解决方法。 ... [详细]
    author-avatar
    U友50140932
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有