念:
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 实现图片上传。
谈一谈我们需要使用到的技术:
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;
拖拽上传需要注意的是需要判断两个条件
// 检测是否是拖拽文件到页面的操作
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页面中的图片数据了,下一步就是将其发送到服务器端。
总结
video 元素的三种视频格式:
video 元素的属性:
video 元素的方法:
audio元素的三种音频格式:
audio元素的属性:
audio元素的方法:
什么是 Canvas?
<canvas id="myCanvas" width="200" height="100"></canvas>
Canvas在HTML5 中的新属性有:
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
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
*请认真填写需求信息,我们会在24小时内与您取得联系。