1、什么是html5
2、HTML5-语义化标签及兼容性处理
3、HTML5-表单新增的type属性
4、H5新增的其他属性
5、表单新增元素datalist
6、HTML5-新增的表单事件
7、进度条
8、音频和视频
9、DOM扩展
10、网络监听事件
11、全屏接口的使用
12、FileReader的使用
13、拖拽接口使用
14、地理定位接口的使用
15、web存储
16、应用程序缓存
1、什么是html5 <--返回目录
* H5是html语言的第五次重大修改版本
* 主流浏览器都支持H5 chrome firefox safari, IE9(部分支持)及以上支持H5, IE8以下不支持H5
* 改变了用户与文档的交互方式:多媒体video audio canvas
* 增加了其他的新特性:语义特性,本地存储特性,网页多媒体,二维三维,特效(过渡,动画)
* 相对H4的进步:
- 抛弃了一些不合理不常用的标签和属性
- 新增了一些标记和属性
- 从代码角度而言,H5网页结构更简洁
h5网页结构 sublime:html + tab
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> </body> </html>
sublime:html:xt +tab,xhtml过渡型文档类型
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Document</title> </head> <body> </body> </html>
2、HTML5-语义化标签及兼容性处理 <--返回目录
header 页眉
nav 导航
main 文档主体
article 文章
aside 主题内容之外
footer 页脚
传统网页布局
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>网页经典布局</title> <style> body { margin: 0; padding: 0; background-color: #F7F7F7; } ul { list-style: none; padding: 0; margin: 0; } /*头部*/ .header { height: 100px; background-color: blue; } .main { width: 1000px; height: 500px; margin: 0 auto; } .article { width: 700px; height: 100%; float: left; background-color: pink; } .aside { width: 300px; height: 100%; float: right; background-color: yellow; } .footer { height: 100px; background-color: green; } </style> </head> <body> <!-- 头部 --> <div class="header"> <ul class="nav"></ul> </div> <!-- 主体部分 --> <div class="main"> <!-- 文章 --> <div class="article"></div> <!-- 侧边栏 --> <div class="aside"></div> </div> <!-- 底部 --> <div class="footer"></div> </body> </html>
网站经典布局HTML5版
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> body { margin: 0; padding: 0; background-color: #F7F7F7; } ul { list-style: none; padding: 0; margin: 0; } /*头部*/ header { height: 100px; background-color: blue; } .main { width: 1000px; height: 500px; margin: 0 auto; } article { width: 700px; height: 100%; float: left; background-color: pink; } aside { width: 300px; height: 100%; float: right; background-color: yellow; } footer { height: 100px; background-color: green; } </style> </head> <body> <!-- 头部 --> <header> <ul class="nav"></ul> </header> <!-- 主体部分 --> <div class="main"> <!-- 文章 --> <article></article> <!-- 侧边栏 --> <aside></aside> </div> <!-- 底部 --> <footer></footer> </body> </html>
兼容性处理
第一种方式:手动创建标签, 默认创建的标签都是行级元素
<script>
document.createElement('header');
document.createElement('nav');
document.createElement('main');
...
</script>
然后将行级元素转成块级元素 display: block;
第二种方式:引入html5shiv.main.js
在默认情况下,IE8及以下版本不支持h5,引入html5shiv.main.js就可以做到兼容h5
<!-- 注意:ie8以下的浏览器不支持h5标签--> <!--解决办法: 引入html5shiv.js文件--> <!-- 条件注释 只有ie能够识别--> <!--[if lte ie 8]> <script src="html5shiv.min.js"></script> <![endif]--> <!-- l:less 更小 t:than 比 e:equal等于 g:great 更大 -->
3、HTML5-表单新增的type属性 <--返回目录
* <input type="email" name="email">
type="email"提供了默认的邮箱验证:要求包含@和服务器名称,如果不满足验证,则会阻止当前的提交
* <input type="tel">:不是用来实现验证的,目的是为了能够在移动端打开数字键盘。
如何查看效果:qq发送文件,手机端使用qq接受,使用浏览器打开文件
* <input type="url">
- 空也能提交,输入必须是网址,必须包含http://否则提示
* 数字控件<input type="number" step="5" value="默认值" min="" max="">
* <input type="search"> 类似text,但是获得焦点时右侧有个X,可以删除文本
* <input type="range" min="0" max="100" value="50"> 滑块
* 颜色拾取 <input type="color">
* 日期控件<input type="date" name="date">
- 在火狐浏览器下,默认会有一个日期插件进行选择,最后get提交后在url后添加date=2018-05-22
* 时间控件<input type="time" name="time">
- 在火狐浏览器下,格式:上午 05:10,最后get提交后在url后添加time=05%3A10
* 日期+时间<input type="datetime"> 大多数浏览器不支持
* 日期+时间<input type="datetime-local">谷歌支持,火狐不支持
* 月份 <input type="month">
* 星期 <input type="week">
4、H5新增的其他属性 <--返回目录
* 用户名:<input type="text" placeholder="请输入用户名" autofocus autocomplete="on">
- placeholder:提示文本,占位文本
- autofocus:自动获取焦点,有多个焦点时自动获取第一个焦点
- autocomplete="on/off": 前提1)有name属性;2)成功提交过后;以后会有输入提示
* 手机号:<input type="tel" required pattern="^(+86)?">
- 不是用来实现验证的,目的是为了能够在移动端打开数字键盘
- required: 必须输入
- pattern: 正则表达式进行约束
* <input type="file" multiple>
- multiple:可以选中多个文件
<input type="email" multiple>
- multiple:可以写多个email,逗号分隔
* <form id="myForm">
<input type="text" form="myForm">
- form="myForm"表示该元素也属于<form id="myForm">
5、表单新增元素datalist <--返回目录
不仅可以输入,还可以选择
用户名:<input type="text" list="listId"> <datalist id="listId"> <option value="1111" label="aa"></option> <option value="2222" label="bb"></option> </datalist>
谷歌支持,火狐不支持option的value属性;火狐双击显示效果
6、HTML5-新增的表单事件 <--返回目录
oninput:监听当前指定元素的内容是否改变(键盘录入或复制或删除),改变了就会触发事件
oninvalid:当验证不通过时触发事件
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <form> 邮箱:<input type="email" required id="phoneId"> <input type="submit" value="提交"> </form> <script type="text/javascript"> document.getElementById("phoneId").oninvalid=function(){ this.setCustomValidity("请输入正确的邮箱"); //修改提示信息 }; </script> </body> </html>
7、进度条 <--返回目录
* <progress value="50" max="100">
* 度量器
high="80" low="40"分成三个部分,高于,低于,等于这个区域
<meter high="80" low="40" value="20" max="100" min="0"></meter>
<meter high="80" low="40" value="60" max="100" min="0"></meter>
<meter high="80" low="40" value="90" max="100" min="0"></meter>
8、音频和视频 <--返回目录
* <audio src="" controls>
- controls:控制面板
- autoplay:自动播放
- loop:循环
* <video src="">
- controls:控制面板
- autoplay:自动播放
- loop:循环
- width和height:宽高,一般设置一个值就行
- poster:指定未播放时显示的图片,路径
* 不同浏览器支持的视频文件格式不一样
<video controls>
<source src="" type="video/flv">
<source src="" type="video/mp4">
您的浏览器不支持当前的视频播放
</video>
9、DOM扩展 <--返回目录
document.querySelector 只会获取符合条件的第一个元素
document.querySelectorAll('div.box') // 获取所有复合条的 标签,返回的是一个数组, 参数:可以是任意 css选择器
H5操作元素类样式
ele.classList.add("类名字");
ele.classList.remove("类名字");
ele.classList.toggle("类名字");//切换
ele.classList.contains("类名字");//判断是否包含某个样式,包含true,不包含false
ele.classList.item(0);//获取样式
自定义属性
* <p data-school-name="属性值">文本</p>
- 获取自定义属性 p.dataset["schoolName"];
10、网络监听事件 <--返回目录
window.ononline=fn;
window.onoffline=fn;
window.addEventListener('online',function(){ alert('联网了'); }) window.addEventListener('offline',function(){ alert("断网了!") })
11、全屏接口的使用 <--返回目录
requestFullScreen():开启全屏显示
不同浏览器需要添加不同的前缀 chrome:webket firefox:moz ie:ms opera:o
var = document.querySelector("div") if(div.requestFullScreen){ div.requestFullScreen(); } else if(div.webkitRequestFullScreen){ div.webkitRequestFullScreen(); } else if(div.mozRequestFullScreen){ div.mozRequestFullScreen(); } else if(div.msRequestFullScreen){ div.msRequestFullScreen(); }
cancelFullScreen():退出全屏显示,使用document来使用
不同浏览器需要添加不同的前缀 chrome:webket firefox:moz ie:ms opera:o
if(document.requestFullScreen){ document.requestFullScreen(); } else if(document.webkitRequestFullScreen){ document.webkitRequestFullScreen(); } else if(document.mozRequestFullScreen){ document.mozRequestFullScreen(); } else if(document.msRequestFullScreen){ document.msRequestFullScreen(); }
fullScreenElement():是否全屏状态,使用document来使用
if(document.fullScreenElement || document.webkitFullScreenElement || document.mozFullScreenElement || document.msFullScreenElement){ alert(true); }
设置全屏后的样式
.box:-webkit-full-screen{
background-color: red;
}
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> .box{ 250px; height: 250px; background-color: green; margin:100px auto; border-radius: 50%; } .box:-webkit-full-screen{ background-color: red; } </style> </head> <body> <div class="box"></div> <script> var box=document.querySelector('.box'); document.querySelector('.box').onclick=function(){ if(box.requestFullScreen){ box.requestFullScreen(); } else if(box.webkitRequestFullScreen){ box.webkitRequestFullScreen(); } else if(box.mozRequestFullScreen){ box.mozRequestFullScreen(); } else if(box.msRequestFullScreen){ box.msRequestFullScreen(); } } </script> </body> </html>
12、FileReader的使用 <--返回目录
* readAsText():读取文本文件,返回字符串,默认编码UTF-8
* readAsBinaryString():读取任意类型的文件,返回二进制字符串。这个方法不是用来读取文件展示给用户
看,而是存储文件。例如:读取文件的内容,获取二进制数据,传递给后台,后台接收数据之后,
再将数据保存。
* readAsDataURL():读取文件获取一段以data开头的字符串,这段字符串的本质就是DataURL.DataURL是一种将
文件嵌入到文档的方案。DataURL是将资源转换为base64编码的字符串形式,并且将这些内容直接存储在url中,
优化网站的加载速度和执行效率。
* abort():中断读取
需求:即时预览(上传图片时有个图片预览)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <input type="file" id="myFile"><br/> <img src="" id="imgId" width="400"> <script type="text/javascript"> var ele=document.getElementById("myFile"); ele.onchange=function(){ var file=ele.files[0];//获取文件 var reader=new FileReader(); reader.readAsDataURL(file);//读取文件 reader.onload=function(){ //监听文件是否读完,读取完毕触发该事件 document.getElementById("imgId").src=reader.result; }; }; </script> </body> </html>
* FileReader提供一个完整的事件模型,用来捕获读取文件时的状态
- onabort:读取文件中断时触发
- onerror:读取错误时触发
- onload:成功读取完毕时触发
- onloadend:读取完毕时触发,无论成功还是失败
- onloadstart:开始读取时触发
- onprogress:读取文件过程中持续触发
13、拖拽接口使用 <--返回目录
* 在H5中,如果想要拖拽元素,需要添加draggable="true",图片和超链接默认就可以拖拽。
* 应用于拖拽元素的事件:
- ondrag:应用于拖拽元素,整个拖拽过程都会调用
- ondragstart:拖拽开始时调用
- ondragleave:当鼠标拖拽过程中,鼠标离开被拖拽元素原来范围时调用
- ondragend:当拖拽结束时调用
* 应用于目标元素的事件:
- ondragenter:当拖拽元素进入时调用
- ondragover:当停留在目标元素时调用
- ondrop:当在目标元素上松开鼠标时调用
- ondragleave:当鼠标离开目标元素时调用
* 浏览器默认阻止ondrop事件。需要在ondragover事件里阻止浏览器的默认行为。
div2.ondragover=function(e){ e.preventDefault(); }; div2.ondrop=function(e){ div2.appendChild(p);//p=document.getELementById("pId"); };
demo1:给目标元素添加拖拽事件
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <style type="text/css"> *{margin: 0;padding: 0;} </style> </head> <body> <div style=" 200px;height: 200px;border: 2px solid blue;float: left;"> <p draggable="true">p标签内的文本</p> </div> <div style=" 200px;height: 200px;border: 2px solid blue;float: left;margin-left: 100px"></div> <script type="text/javascript"> var p = document.getElementsByTagName("p")[0]; var div1 = document.getElementsByTagName("div")[0]; var div2 = document.getElementsByTagName("div")[1]; div2.ondragover = function(e){ e.preventDefault(); }; div2.ondrop = function(e){ div2.appendChild(p); }; div1.ondragover = function(e){ e.preventDefault(); }; div1.ondrop = function(e){ div1.appendChild(p); }; </script> </body> </html>
demo2:给document注册拖拽事件,会拖拽到任何目标元素内(包括拖到body里面)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <style type="text/css"> * {margin: 0;padding: 0;} p { background-color: purple; } </style> </head> <body> <div style=" 200px;height: 200px;border: 2px solid blue;float: left;"> <p draggable="true">p标签内的文本</p> <span draggable="true">span标签内的文本</span> </div> <div style=" 200px;height: 200px;border: 2px solid blue;float: left;margin-left: 100px"></div> <script type="text/javascript"> var obj = null;//用于存储当前拖拽元素 document.ondragstart = function(e){ e.target.style.opacity = 0.5; obj = e.target; }; document.ondragend = function(e){ e.target.style.opacity = 1; }; document.ondragover = function(e){ e.preventDefault(); }; document.ondrop = function(e){ e.target.appendChild(obj);
obj = null; }; </script> </body> </html>
demo3
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> .box1,.box2{ 400px; height: 400px; border: 1px solid #000; } .box1 div,.box2 div{ 80px; 97px; height: 97px; background-color: red; border-radius: 50%; float: left; border: 1px solid #000; text-align: center; line-height: 100px; } .box2{ position: absolute; left:600px; top:100px; } </style> </head> <body> <div class="box1"> <div draggable="true">1</div> <div draggable="true">2</div> <div draggable="true">3</div> <div draggable="true">4</div> <div draggable="true">5</div> <div draggable="true">6</div> <div draggable="true">7</div> <div draggable="true">8</div> </div> <div class="box2"></div> <script> var box1 = document.querySelector('.box1'); var box2 = document.querySelector('.box2'); var boxs = document.querySelectorAll('.box1 div'); var temp = null; for(var i = 0;i < boxs.length; i++){ boxs[i].addEventListener('dragstart',function() { temp = this; }); } box2.addEventListener('dragover',function(e){ e.preventDefault(); }); box2.addEventListener('drop',function(e){ box2.appendChild(temp); temp=null; }); </script> </body> </html>
* 通过dataTransfer来实现数据的存储与获取
e.dataTransfer.setData(format, data)
format:数据类型 "text/html" "text/uri-list"
data:数据,一般是字符串
e.dataTransfer.setData("text/html", e.target.id);
var id = e.dataTransfer.getData("text/html"); //只能在ondrop事件中获取
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <style type="text/css"> * {margin: 0;padding: 0;} p { background-color: purple; } </style> </head> <body> <div style=" 200px;height: 200px;border: 2px solid blue;float: left;"> <p id="pId" draggable="true">p标签内的文本</p> <span id="spanId" draggable="true">span标签内的文本</span> </div> <div style=" 200px;height: 200px;border: 2px solid blue;float: left;margin-left: 100px"></div> <script type="text/javascript"> document.ondragstart = function(e){ e.target.style.opacity = 0.5; e.dataTransfer.setData("text/html", e.target.id); }; document.ondragend = function(e){ e.target.style.opacity = 1; }; document.ondragover = function(e){ e.preventDefault(); }; document.ondrop = function(e){ var id = e.dataTransfer.getData("text/html"); //只能在ondrop事件中获取 e.target.appendChild(document.getElementById(id)); }; </script> </body> </html>
14、地理定位接口的使用 <--返回目录
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>标题</title> </head> <body> <script> // navigator 导航, geolocation: 地理定位 // window.navigator.geolocation // 兼容处理:如果支持,获取用户地理信息 if (navigator.geolocation) { // successCallback 当获取用户位置成功的回调函数 // errorCallback 当获取用户位置失败的回调函数 navigator.geolocation.getCurrentPosition(successCallback, errorCallback); } else { console.log('sorry, 你的浏览器不支持地理定位'); } // 获取地理位置成功的回调函数 function successCallback(position) { // 获取用户当前的经纬度 // coords坐标 // 纬度latitude var wd = position.coords.latitude; // 经度longitude var jd = position.coords.longitude; console.log(`获取用户位置成功!当前位置,纬度 ${wd}, 经度 ${jd}`); } // 获取地理位置失败的回调函数 function errorCallback(error) { console.log(error); console.log('获取用户位置失败!') } </script> </body> </html>
15、web存储 <--返回目录
* sessionStorage的使用:存储数据到本地,存储的容量5Mb左右。
- 数据本质是存储在当前页面的内存中,生命周期为当前回话,关闭页面,数据没了。
- setItem(key,value)
- getItem(key)
- removeItem(key)
** 如果删除时,没有该key,也不会报错
- clear():清空所有存储的内容
* localStorage:
- 存储大概为20Mb;
- 不同浏览器不能共享数据,但是同一个浏览器的不同窗口可以共享。
- 永久生效,数据是存储在硬盘上,并不会随着页面或浏览器的关闭而清除。
<!DOCTYPE html> <html> <head> <title>标题</title> </head> <body> <input type="text" id="username" name="username" value="jack"> <input type="button" id="btn1" value="设置数据"> <input type="button" id="btn2" value="获取数据"> <input type="button" id="btn3" value="删除数据"> <script type="text/javascript"> document.querySelector("#btn1").onclick=function(){ var name=document.querySelector("#username").value; window.sessionStorage.setItem("name",name);//存储数据 }; document.querySelector("#btn2").onclick=function(){ var _name=window.sessionStorage.getItem("name");//获取数据 console.log(_name); }; document.querySelector("#btn3").onclick=function(){ window.sessionStorage.removeItem("name");//删除数据 }; </script> </body> </html>
16、应用程序缓存 <--返回目录
* 概念:使用HTML5,通过创建cache manifest文件,可以轻松创建web应用的离线版本
* 优势:
- 可配置需要缓存的资源
- 网络无连接时应用仍可用
- 本地读取缓存资源,提升访问速度,增加用户体验
- 减少请求,缓解服务器压力
* 使用步骤:
- 首先
<html manifest="应用程序缓存文件的路径demo.appcache">
- demo.appcache中的内容
#第一句,必须是CACHE MANIFEST
CACHE MANIFEST
#需要缓存的文件清单列表
CACHE:
images/1.jpg
#配置每一次都需要重新从服务器获取的文件清单列表,*代码所有
NETWORK:
images/2.jpg
#配置如果文件无法获取则使用指定的文件进行替代,/代表所有
FALLBACK:
images/5.jpg images/1.jpg
- 在web服务器上添加MIME-type类型