小白成长记(1)

HTML5 的几种类型

该篇作为 HTML5 的一个引子,大体将 HTML5 中常用 api 作个简单分类。

HTML5 DOM

  1. getElementsByClassName
  2. 遍历相关,如下左侧属性

只涉及元素节点的操作(不涉及其它节点),建议使用左侧的属性替代右侧的属性:

属性名被替代的属性
childrenchildNodes
childElementCountchildNodes.length
previousElementSiblingpreviousSibling
nextElementSiblingnextSibling
firstElementChildfirstChild
lastElementChildlastChild
  1. ele.scrollIntoView()

调用 ele.scrollIntoView(), ele 元素顶端会移动到可视区域的顶端; 若传入参数 alignToTop: false, 则 ele 移到屏幕底部;

HTML5 事件

  1. contextmenu

contextmenu 使用 demo

<ul id="myMenu" style="position: absolute;visibility: hidden;background-color: silver">
  <li>111</li>
  <li>222</li>
  <li>333</li>
</ul>
<script>
  var menu = document.getElementById('myMenu')
  document.addEventListener('contextmenu', (event) => {
    event.preventDefault()
    menu.style.left = event.clientX + 'px'
    menu.style.top = event.clientY + 'px'
    menu.style.visibility = 'visible'
  }, false)
  document.addEventListener('click', (event) => {
    menu.style.visibility = 'hidden'
  }, false)
</script>
  1. DOMContentLoaded

优于 window.load 执行

  1. readystatechange

可用来判断动态载入的 script、link 标签是否加载完成。demo 如下:

const script = document.createElement('script')
script.addEventListener('readystatechange', function eventListener(event) {
  if (event.readyState === 'loaded' || event.readyState === 'complete') { // hack 的手段,浏览器自身的问题
    script.removeEventListener('readystatechange', eventListener)
  }
})

script.src = 'example.js'
document.body.appendChild(script)
  1. hashchange

HTML5 表单

  1. input/textarea 里新增 autoFocus() 字段
  2. 表单校验 api

使用 checkValidate() 校验 requiredpattern="\d+" 属性

HTML5 脚本

  1. 跨文档消息传输(XDM), 核心是 postMessage
  2. 拖放 api

拖放 api 使用示例

<head>
	<style>
		#draggable {
			width: 200px;
			height: 20px;
			text-align: center;
			background: white;
		}

		.dropzone {
			width: 200px;
			height: 20px;
			background: blueviolet;
			margin-bottom: 10px;
			padding: 10px;
		}
	</style>
</head>

<body>
	<div class="dropzone">
		<div id="draggable" draggable="true" ondragstart="event.dataTransfer.setData('text/plain',null)">
			This div is draggable
		</div>
	</div>
	<div class="dropzone"></div>
	<div class="dropzone"></div>
	<div class="dropzone"></div>
	<script>
		window.onload = function () {
			var dragged

			document.addEventListener("dragstart", function (event) {
				dragged = event.target
			}, false)

			document.addEventListener("dragover", function (event) {
				// prevent default to allow drop
				event.preventDefault()
			}, false)

			document.addEventListener("drop", function (event) {
				// prevent default action (open as link for some elements)
				event.preventDefault()
				if (event.target.className == "dropzone") {
					dragged.parentNode.removeChild(dragged)
					event.target.appendChild(dragged)
				}
			}, false)
		}
	</script>
</body>
  1. 媒体元素 <video><audio>
  2. 浏览器状态管理(history)

HTML5 存储

  1. sessionStorage: 大小上限为 2.5Mb(不同浏览器会有差异), 页面关闭时便清空;
  2. localStorage: 大小上限为 2.5Mb(不同浏览器会有差异), 页面关闭时不会清空;

它们的 api 也是一致的, 有如下几个:

  • setItem(key, value)
  • getItem(key)
  • removeItem(key)
  • clear()

在 HTML5 范围之外与存储相关的技术还有 cookie(存放在客户端,可以由客户端也可以由服务端生成, 大小上限为 4 kb)、IndexedDB(大小上限为 5 Mb)、cacheStorage(ServiceWorker)。

HTML5 JavaScript Api

  1. requestAnimationFrame
  2. Web Worker
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值