整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

认识 HTML5

念:

HTML5 是HTML、XHTML 以及 HTML DOM 的新标准(推荐标准)。

语法:

根据HTML5设计化繁为简的准则,文档类型和字符说明都进行了简化:

<!DOCTYPE html>
<meta charset='UTF-8'>
.......

HTML5元素

HTML5定义了一组新的语义化标记来描述元素的内容。

header 标记头部区域的内容。
footer 标记脚部区域的内容
section 页面中的一块区域
article 独立的文章内容
aside 相关内容或者引文
nav 导航类
video:定义视频,比如 电影片段或其他视频流
<video src='movie.ogg' controls='controls'>video元素</video>
audio:定义音频,比如音乐或其他音频流 
<audio src='audio.wav'>audio元素</audio>
...........

HTML5其他功能

HTML5引入了一种用于用于查找页面DOM元素的selectors API。

document.querySelector("#demo")--->返回文档中匹配指定 CSS 选择器的第一个元素。
document.querySelectorAll("#demo")--->返回文档中匹配指定 CSS 选择器的所有元素。

html5文档结构代码

html5 有什么神奇? 就是进化的一套标准。

我是不是整理的都好初级,不过整理即巩固加回忆,只要是好好学习,那么时间就不是浪费,那么道路就一定是正确的!!加油啊 小果冻de迈阿密!!

我们学习了 HTML 提供的原生拖放(drag & drop)后,是时候想一想这个东西可以用来作什么可以在什么时候使用使用的场景等等

场景分析

当我们在注册成功一个账户时,一般网站会让我们上传我们的用户头像,或者在实名认证的时候会涉及到身份证图片上传到等,这时候我们可以使用input提供的file属性进行选择本地文件进行上传。

我们再想一下,当在电脑端的情况下,当用户打开文件选择框时再寻找图片对应的文件夹,再进行选取文件的时候是不是会有点麻烦呢?我们可不可以让用户找到图片文件,直接引入实现上传呢?答案是可以的。

怎么做

经过这些分析后,我们可以尝试使用 HTML5 提供的拖拽,使得目标元素增加读取文件功能,然后使用 ajax 实现图片上传。

谈一谈我们需要使用到的技术:

  • Drag & Drop: HTML5 基于拖拽的事件机制
  • File API: 可以很方便的让 Web 应用访问文件对象,File API 包括 FileList、Blob、File、FileReader、URI scheme,本文主要讲解拖拽上传中用到的 FileList 和 FileReader 接口。
  • FormData: FormData 是基于 XMLHttpRequest Level 2 的新接口,可以方便 web 应用模拟 Form 表单数据,最重要的是它支持文件的二进制流数据,这样我们就能够通过它来实现 AJAX 向后端发送文件数据了。

HTML5 拖拽事件

关于 Drag & Drop 拖拽事件,之前我写过一篇专门介绍的文章,HTML5-拖拽,大家有兴趣的话可以点击链接查看,我在这里就不在多啰嗦了~下面直接出拖拽上传的简要代码示例

var oDragWrap = document.body;
//拖进
oDragWrap.addEventListener(
 "dragenter",
 function(e) {
 e.preventDefault();
 },
 false
);
//拖离
oDragWrap.addEventListener(
 "dragleave",
 function(e) {
 dragleaveHandler(e);
 },
 false
);
//拖来拖去 , 一定要注意dragover事件一定要清除默认事件
//不然会无法触发后面的drop事件
oDragWrap.addEventListener(
 "dragover",
 function(e) {
 e.preventDefault();
 },
 false
);
//扔
oDragWrap.addEventListener(
 "drop",
 function(e) {
 dropHandler(e);
 },
 false
);
var dropHandler = function(e) {
 //将本地图片拖拽到页面中后要进行的处理都在这
};

获取文件数据 HTML5 File API

File API 中的 FileReader 接口,作为 File API 的一部分,FileReader 专门用来读取文件。我们在这里主要介绍一些 File API 中的 FileList 接口,它主要通过两个途径获取本地文件列表,一是<input type="file"/>的表单形式,另一种则是e.dataTransfer.files拖拽事件传递的文件信息。

var fileList = e.dataTransfer.files;

使用 files 方法将会获取到拖拽文件的数组形式的数据,每个文件占用一个数组的索引,如果索引不存在文件数据,将返回 Null。可以通过length属性获取文件的数量。

var fileNum = fileList.length;

拖拽上传需要注意的是需要判断两个条件

  1. 拖拽的是文件而不是页面的元素
  2. 拖拽的是图片而不是其他类型的文件,可以通过 file.type 属性获取文件的类型
// 检测是否是拖拽文件到页面的操作
if (fileList.length === 0) {
 return;
}
// 检测文件是不是图片
if (fileList[0].type.indexOf("image") === -1) {
 return;
}

下面我们看看结合之前的拖拽事件,来实现拖拽图片并在页面中预览

var dropHandler = function(e) {
 e.preventDefault(); //获取文件列表
 var fileList = e.dataTransfer.files;
 //检测是否是拖拽文件到页面的操作
 if (fileList.length == 0) {
 return;
 }
 //检测文件是不是图片
 if (fileList[0].type.indexOf("image") === -1) {
 return;
 }
 //实例化file reader对象
 var reader = new FileReader();
 var img = document.createElement("img");
 reader.onload = function(e) {
 img.src = this.result;
 oDragWrap.appendChild(img);
 };
 reader.readAsDataURL(fileList[0]);
};

当完成以上操作后,相信你可以成功的完成了拖拽图片预览的操作。当你查看 img 标签时会发现,img的src属性是一个超长的文件二进制数据,当你需要很多这种的img元素时,建议将展示区域脱离文档流,让其绝对定位减少页面的 reflow

AJAX 上传图片

既然已经获取到拖拽到web页面中的图片数据了,下一步就是将其发送到服务器端。

总结

  1. 监听拖拽: 监听页面元素的拖拽事件,包括: dragenter、dragover、dragleave 和drop,一定要将dragover的默认事件取消掉,不然无法触发drop事件。如需拖拽页面里面的元素,需要给其添加属性draggable="true"
  2. 获取拖拽文件: 在 drop 事件触发后通过e.dataTransfer.files获取拖拽文件列表,一定要将drop的默认事件取消掉,否则会默认打开文件length属性获取文件数量,type属性获取文件类型
  3. 读取图片数据并添加预览图: 实例化FileReader对象,通过其readAsDataURL(file)方法获取文件二进制流,并监听其onload事件,将e.result赋值给img的src属性,最后将图片添加到DOM中
  4. 发送图片数据

、什么是 HTML5?

  • HTML5 是最新的 HTML 标准;
  • HTML5 是专门为承载丰富的 web 内容而设计的,并且无需额外插件;
  • HTML5 拥有新的语义、图形以及多媒体元素;
  • HTML5 提供的新元素和新的 API 简化了 web 应用程序的搭建;
  • HTML5 是跨平台的,被设计为在不同类型的硬件(PC、平板、手机、电视机等等)之上运行;

二、HTML5的一些新特性

  • 用于绘画的 canvas 元素;
  • 用于媒介回放的 video 和 audio 元素;
  • 对本地离线存储的更好的支持;
  • 新的特殊内容元素,比如article、footer、header、nav、section;
  • 新的表单控件,比如 calendar、date、time、email、url、search;

三、video 元素

  • <video> 元素提供了播放、暂停和音量控件来控制视频;
  • <video> 元素也提供了 width 和 height 属性控制视频的尺寸;
  • <video> 与</video> 标签之间插入的内容是提供给不支持 video 元素的浏览器显示的;

video 元素的三种视频格式:

  • Ogg:带有 Theora 视频编码和 Vorbis 音频编码的 Ogg 文件;
  • MPEG4:带有 H.264 视频编码和 AAC 音频编码的 MPEG 4 文件;
  • WebM:带有 VP8 视频编码和 Vorbis 音频编码的 WebM 文件;

video 元素的属性:

  • src:要播放的视频的 URL;
  • width:设置视频播放器的宽度;
  • height:设置视频播放器的高度;
  • autoplay:自动播放;
  • controls:如果出现该属性,则向用户显示控件,比如播放按钮;
  • loop:循环播放;
  • preload:如果出现该属性,则视频在页面加载时进行加载,并预备播放,如果使用 "autoplay",则忽略该属性;

video 元素的方法:

  • pause():暂停当前播放的视频;
  • play():开始播放视频;
  • load():重新加载视频元素;
  • canPlayType():检测浏览器是否能播放指定的视频类型;
  • addTextTrack():向音频/视频添加新的文本轨道;

四、audio元素

  • HTML5 规定了在网页上嵌入音频元素的标准,即使用 <audio> 元素;
  • <audio>元素能够播放声音文件或者音频流;

audio元素的三种音频格式:

  • MP3:适用于Internet Explorer、Chrome、Safari 等浏览器;
  • Wav:适用于Firefox、Opera等浏览器;
  • Ogg:适用于Firefox、IE9、Chrome 浏览器;

audio元素的属性:

  • src:要播放的音频的 URL;
  • autoplay:自动播放;
  • controls:如果出现该属性,则向用户显示控件;
  • loop:循环播放;
  • preload:如果出现该属性,则音频在页面加载时进行加载,并预备播放,如果使用 "autoplay",则忽略该属性;

audio元素的方法:

  • pause():暂停当前播放的音频;
  • play():开始播放音频;
  • load():重新加载音频;

五、canvas 元素

什么是 Canvas?

  • HTML5 的 canvas 元素通过 JavaScript 在网页上绘制图像,元素本身并没有绘制能力,它只是图形容器,必须使用脚本来绘制图形;
  • canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法;
  • 创建一个画布
<canvas id="myCanvas" width="200" height="100"></canvas>

Canvas在HTML5 中的新属性有:

  • height:设置 canvas 的高度;
  • width:设置 canvas 的宽度;

六、绘制三角形

getElementById():可返回对拥有指定 ID 的第一个对象的引用;

getContext():返回一个用于在画布上绘图的环境,2d表示二维绘图;

beginPath():开始一条路径,或重置当前的路径;

moveTo():把路径移动到画布中的指定点,不创建线条。

lineTo():添加一个新点,然后创建从该点到画布中最后指定点的线条(该方法并不会创建线条);

closePath():创建从当前点到开始点的路径;

strokeStyle属性:设置或返回用于笔触的颜色、渐变或模式;

stroke():会实际地绘制出路径;

fillStyle属性:设置或返回用于填充绘画的颜色、渐变或模式;

fill():填充当前的图像(路径),默认颜色是黑色;

//空心三角形
var canvas=document.getElementById("myCanvas");
var cxt=canvas.getContext("2d");
cxt.beginPath();
cxt.moveTo(50,50);
cxt.lineTo(100,50);
cxt.lineTo(75,100);
cxt.closePath();//填充或闭合 需要先闭合路径才能画
cxt.strokeStyle="red";
cxt.stroke();
//实心三角形
cxt.beginPath();
cxt.moveTo(150,50);
cxt.lineTo(250,50);
cxt.lineTo(200,150);
cxt.closePath();
cxt.fillStyle="#89E1BF"
cxt.fill();

演示图



图1

七、使用Canvas绘制一个空心圆

arc():创建弧或曲线(用于创建圆或部分圆);

<body>
 <canvas id="myCanvas" width="200" height="200" style="border:1px solid #000;">
</body>
<script type="text/javascript">
 var can=document.getElementById("myCanvas") 
 var ctx=can.getContext("2d"); //创建context对象
 ctx.beginPath();//标志开始一个路径
 ctx.arc(100,100,50,0,2*Math.PI);//在canvas中绘制圆形
 ctx.stroke()
 </script>

演示图



图2

八、绘制一个实心圆

<body>
 <canvas id="myCanvas" width="200" height="200" style="border:1px solid #000;">
</body>
<script type="text/javascript">
 var c=document.getElementById("myCanvas");
 var ctx=c.getContext("2d"); 
 ctx.beginPath();
 ctx.arc(100,100,50,0,2*Math.PI);
 ctx.fillStyle="#deffff";
 ctx.fill();
 ctx.strokeStyle="red"
 ctx.stroke();
 </script>

演示图



图3

九、绘制一个空心矩形

strokeRect():绘制矩形(不填色),笔触的默认颜色是黑色;

<body>
 <canvas id="myCanvas" width="300" height="300" style="border:1px solid #000;">
</body>
<script type="text/javascript">
 var can=document.getElementById("myCanvas"); //获得画板数据
 var ctx=can.getContext('2d'); //获得笔刷
 ctx.strokeStyle="blue"; //设置线条颜色
 ctx.strokeRect(100,100,100,100); //线条画矩形
 </script>

演示图



图4

十、绘制一个实心的矩形

fillRect():绘制“已填色”的矩形,默认的填充颜色是黑色;

<body>
 <canvas id="myCanvas" width="300" height="300" style="border:1px solid #000;">
</body>
<script type="text/javascript">
var can=document.getElementById("myCanvas");//获得画板数据
var ctx=can.getContext('2d'); //获得笔刷
 ctx.strokeStyle="blue"; //设置线条颜色
 ctx.fillStyle="#ddedee"; //填充矩形
 ctx.fillRect(100,100,100,100);
 ctx.strokeRect(100,100,100,100);//线条画矩形
 </script>

演示图



图5