HTML面试题总结,未完待续
HTML5新特性(更新了什么)
一、语义化标签
使得页面的内容结构化,见名知义
nav:定义文档的导航
header:定义了文档的头部区域
footer:定义了文档的尾部区域
aside:定义页面的侧边栏内容
section:定义文档中的节(section、区段)
article:定义页面独立的内容区域
二、表单
表单类型 Input 输入类型
email :验证当前输入的邮箱地址是否合法
url : 验证URL
number : 只能输入数字,自带上下增大减小箭头,max属性可以设置为最大值,min可以设置为最小值,value为默认值。
search : 自带清除按钮。
range : 提供给一个范围,其中可以设置max和min以及value,其中value属性可以设置为默认值
color : 提供了一个颜色拾取器
time : 时分秒
date : 日期选择年月日
datetime : 时间和日期(目前只有Safari支持)
datetime-local :日期时间控件
week :周控件
month:月控件
表单属性
placeholder :提示信息
autofocus :自动获取焦点
autocomplete=“on” 或者 autocomplete=“off” 使用这个属性需要有两个前提:表单必须提交过;必须有name属性。
required:要求输入框不能为空,必须有值才能够提交。
pattern=" " 里面写入想要的正则模式,例如手机号patte=“^(+86)?\d{10}$”
multiple:可以选择多个文件或者多个邮箱
form=" form表单的ID"
min 和 max 属性,设置元素最小值与最大值。
step 属性,为输入域规定合法的数字间隔。
height 和 width 属性,用于 image 类型的 标签的图像高度和宽度。
表单事件
oninput 每当input里的输入框内容发生变化都会触发此事件。
oninvalid 当验证不通过时触发此事件。
三、音频、视频标签:audio、video
<audio src='' controls autoplay loop='true'>
<source src="horse.ogg" type="audio/ogg">
<source src="horse.mp3" type="audio/mpeg">
</audio>
controls 控制面板,添加播放、暂停和音量控件。
autoplay 自动播放
loop='true' 循环播放
<audio> 元素允许使用多个 <source> 元素. <source> 元素可以链接不同的音频文件,浏览器将使用第一个支持的音频文件
<audio>元素支持三种音频格式文件: MP3, Wav, 和 Ogg
<video src='' poster='imgs/aa.jpg' controls>
<source src="movie.mp4" type="video/mp4">
<source src="movie.ogg" type="video/ogg">
</video>
poster:指定视频还没有完全下载完毕,或者用户还没有点击播放前显示的封面。默认显示当前视频文件的第一针画面,当然通过poster也可以自己指定。
controls 控制面板,播放、暂停和音量控件来控制视频;也可以使用dom操作来控制视频的播放暂停,如 play() 和 pause() 方法。
width 和 height 属性控制视频的尺寸.
video 元素支持多个source 元素. 元素可以链接不同的视频文件。浏览器将使用第一个可识别的格式( MP4, WebM, 和 Ogg)
四、数据存储:localStorage、sessionStorage
客户端存储数据的两个对象为:
localStorage - 没有时间限制的数据存储
sessionStorage- 针对一个 session 的数据存储, 当用户关闭浏览器窗口后,数据会被删除。
在使用 web 存储前,应检查浏览器是否支持 localStorage 和sessionStorage
if(typeof(Storage)!=="undefined"){
// 是的! 支持 localStorage sessionStorage 对象!
}else{
// 抱歉! 不支持 web 存储。
}
API:
保存数据:localStorage.setItem(key,value);
读取数据:localStorage.getItem(key);
删除单个数据:localStorage.removeItem(key);
删除所有数据:localStorage.clear();
得到某个索引的key:localStorage.key(index);
五、canvas(画布)
canvas 标签只是图形容器,必须使用脚本来绘制图形。使用 JavaScript 在网页上绘制图像。画布是一个矩形区域,可以控制其每一像素。canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。
<canvas id="myCanvas" width="200" height="100" style="border:1px solid #000000;"></canvas>
标签通常需要指定一个id属性 (脚本中经常引用), width 和 height 属性定义的画布的大小,使用 style 属性来添加边框。可以在HTML页面中使用多个 <canvas> 元素
用Javascript来绘制图像,canvas 元素本身是没有绘图能力的。所有的绘制工作必须在 JavaScript 内部完成
<script>
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.fillStyle="#FF0000";
ctx.fillRect(0,0,150,75);
</script>
getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。
设置 fillStyle 属性可以是CSS颜色,渐变,或图案。fillStyle默认设置是#000000(黑色)。fillRect(x,y,width,height) 方法定义了矩形当前的填充方式。意思是:在画布上绘制 150x75 的矩形,从左上角开始 (0,0)。
六、SVG绘图
SVG是指可伸缩的矢量图形,用于定义用于网络的基于矢量的图形,使用 XML 格式定义图形,图像在放大或改变尺寸的情况下其图形质量不会有损失,它是万维网联盟的标准。
SVG 与 Canvas两者间的区别
SVG 是一种使用 XML 描述 2D 图形的语言。Canvas 通过 JavaScript 来绘制 2D 图形。
SVG 基于 XML,这意味着 SVG DOM 中的每个元素都是可用的。您可以为某个元素附加 JavaScript 事件处理器。
在 SVG 中,每个被绘制的图形均被视为对象。如果 SVG 对象的属性发生变化,那么浏览器能够自动重现图形。
Canvas 是逐像素进行渲染的。在 canvas 中,一旦图形被绘制完成,它就不会继续得到浏览器的关注。如果其位置发生变化,那么整个场景也需要重新绘制,包括任何或许已被图形覆盖的对象。
七、 Geolocation(地理定位)
用于定位用户的位置。
window.navigator.geolocation {
getCurrentPosition: fn 用于获取当前的位置数据
watchPosition: fn 监视用户位置的改变
clearWatch: fn 清除定位监视
}
八、拖放API
拖放是一种常见的特性,即抓取对象以后拖到另一个位置。在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放。
拖放的过程分为源对象和目标对象。源对象是指你即将拖动元素,而目标对象则是指拖动之后要放置的目标位置。
拖放的源对象(可能发生移动的)可以触发的事件:
dragstart:拖动开始
drag:拖动中
dragend:拖动结束
整个拖动过程的组成: dragstart1 + dragn + dragend*1
拖放的目标对象(不会发生移动)可以触发的事件:
dragenter:拖动着进入
dragover:拖动着悬停
dragleave:拖动着离开
drop:释放
整个拖动过程的组成1: dragenter1 + dragovern + dragleave*1
整个拖动过程的组成2:dragenter1 + dragovern + drop*1
dataTransfer:用于数据传递的“拖拉机”对象;
在拖动源对象事件中使用e.dataTransfer属性保存数据:
e.dataTransfer.setData( k, v )
在拖动目标对象事件中使用e.dataTransfer属性读取数据:
var value = e.dataTransfer.getData( k )
九、WebSocket
HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道,两者之间就直接可以数据互相传送。
浏览器通过 JavaScript 向服务器发出建立 WebSocket 连接的请求,连接建立以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。当你获取 Web Socket 连接后,你可以通过 send() 方法来向服务器发送数据,并通过 onmessage 事件来接收服务器返回的数据。
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>W3Cschool教程(w3cschool.cn)</title>
<script type="text/javascript">
function WebSocketTest(){
if ("WebSocket" in window){
alert("您的浏览器支持 WebSocket!");
// 打开一个 web socket
var ws = new WebSocket("ws://localhost:9998/echo");
ws.onopen = function(){
// Web Socket 已连接上,使用 send() 方法发送数据
ws.send("发送数据");
alert("数据发送中...");
};
ws.onmessage = function (evt){
var received_msg = evt.data;
alert("数据已接收...");
};
ws.onclose = function(){
// 关闭 websocket
alert("连接已关闭...");
};
}else{
// 浏览器不支持 WebSocket
alert("您的浏览器不支持 WebSocket!");
}
}
</script>
</head>
<body>
<div id="sse">
<a href="javascript:WebSocketTest()">运行 WebSocket</a>
</div>
</body>
</html>
十、history API
history.pushState()
history.pushState(stateObject, title, url);
stateObject:状态
title:标题(--几乎没有浏览器支持该参数,但是传一个空字符串会比较安全。)
url:要插入的url 不写的话默认为当前的url
history.replaceState("","", url + "#_newurl_")
history.replaceState()
replace比起push的差异在于,push是进栈把当前页面放在栈中,但是replace是会直接取代当前页面。
history.go()
history.back() 等价于 history.go(-1)
history.forward() 则等价于 history.go(1)
等同于浏览器界面的前进后退