《Head Firsh HTML5》学习笔记(总结)

    简介:文章中的知识:CSS3,Web工作线程,本地存储,画布,地理定位,新表单,音频/视频

第一章:认识HTML5

  • HTML5是最新版本的HTML,它引入了简化的标记,新的语义和媒体元素,另外要依赖一组支持Web应用的JavaScript
  • Xhtml不在是Web页面的标准,开发人员和W3C决定还是继续扩展和改进HTML
  • 新的,更为简单的HTML5 doctype在较老的浏览器上也得到支持,这些浏览器看到这个doctype时会使用标准模式
  • <script>标记或指向css的样式表链接中不再需要type属性。现在JavaScript和CSS是默认类型。
  • 用于指定字符集的<meta>标记已经大为简化,只包含字符编码,如<meta charset="utf-8">
  • UTF-8现在是Web上使用的标准字符集
  • 对doctype和<meta>标记做出修改不会影响页面在较老浏览器上的显示。
  • HTML5的新元素是HTML 4元素的一个超集,这说明,较老的页面在现代浏览器中仍能正常工作
  • HTML5中引入了一些新元素,可以向叶面增加新的语义,
  • HTML5中的很多新特性都需要JavaScript来充分加以利用
  • 通过使用JavaScript,可以与DOM交互,也就是文档对象模型
  • DOM是Web页面的浏览器内部表示。通过使用JavaScript,你可以访问元素,修改元素,该可以向DOM中增加新元素
  • JavaScript API是一个应用编程接口。利用API,可以控制HTML5的所有方面,比如绘图,视频回放。
  • JavaScript是世界上最流行的语义之一,最近几年,JavaScript实现有了显著的改进
  • 可以检测一个浏览器中是否支持某个新特性,如果不支持还能够妥善降级
  • CSS是HTML5的样式标准,很多用"HTML5"描述创建Web应用所用的技术家族时,都包含CSS。

第二章,介绍JavaScript和DOM

    在web中,HTML标记是结构,CSS是表示,JavaScript是行为,JavaScript和DOM之间的知识还是对初学者来说还是很多的。不过我这里就不详细写了,笔记这篇文章的主要作者是写给我自己的. 2333.

  • undefined和null是两个不同的值,undefined表示一个变量未赋值,null表示这个变量有一个空值。可以将null理解为一个不存在对象的占位符。
  • 数组表达式,布尔表达式和串表达式会分别得到一个书,布尔值或串值。注意空串也是串,而不是NULL
  • Math.random会返回一1个介于0和1的浮点数,(但不会是1)
  • Math.floor把一个浮点数小数点后面的所有位去除,将它转换为一个整数

第三章,事件,处理程序

  • 你的浏览器中一直在发生很多事件,如果你想对这些事件做出响应,就要用事件处理程序来处理这些事件
  • 要把一个新元素增加到DOM,首先需要创建这个元素,然后增加这个元素作为某个元素的子元素。document.createElement() >> appendChild()

第四章,JavaScript函数和对象

  • 如果在一个函数局部向一个新变量赋值而且没有使用var关键字。会创建一个全局变量
  • 函数声明可以出现在脚本中的任何位置。因为首先你要加载页面,浏览器会解析页面中(或外部文件中)的所有JavaScript,开始执行代码前它会看到这个函数声明。还可以吧全局变量声明放在脚本中的任何地方,不过一般建议放在文件最前面。
  • 构造函数和析构函数,构造函数用来构造一个对象,析构函数与构造函数相反,当对象结束其生命周期时,析构函数用来做"清理善后"的工作,如:释放内存。
  • 函数和方法真正的差别是什么?根据约定,如果对象有一个函数,我们就称它是一个方法。它们都以同样的方式工作,只不过调用对象的方法时要使用点操作符,而且方法可以使用this来访问这个方法的对象。可以认为函数是一段能调用都独立代码,而方法是与一个特定对象关联的行为。
  • this在对象方法之外有值吗?没有,如果没有调用一个对象方法,this就算未定义的(undefined)

    window对象中的几个重要的属性和方法:

  • location:包含页面的url,如果改变这个属性,浏览器就会访问新URL
  • status:包含将在浏览器状态区显示的一个串
  • onload:包含了页面完全加载时要调用的函数
  • document:包含DOM
  • alert:显示一个提醒
  • prompt:显示一个带对话框的提醒
  • open:打开一个新的浏览器窗口
  • close:关闭窗口
  • setTimeout:指定的时间间隔后调用一个处理程序
  • setInterval:以一个指定的时间间隔反复调用一个处理程序

document对象的几个重要属性和方法

  • domain:提供文档的服务器的域,
  • title:
  • URL:文档的URL
  • getElementById:
  • getElementByTagName:
  • getElementByClassName:
  • createElement

第五章,实现HTML位置感知

第六章,与Web交流

1,一个使用XMLHttprequest请求的例子:

window.onload = function(){
	var url = "127.0.0.1/xiaobaicai";
	var request = new XMLHttpRequest();
	request.onload = function(){
		if(request.status == 200){
			//operation code
		}
	};
	request.open("GET",url);
	request.send(null);
}

2,使用JSON

  • JSON.stringify(object):将json对象转换成字符串
  • JSON.parse(string):将json字符串对象装换会JSON对象

有关XMLHttpRequest的一些介绍:

  • 要从服务器得到HTML文件或数据,浏览器会发出一个HTTP请求
  • HTTP响应包括一个响应码,指示请求是否有错误
  • HTTP响应码200表示请求没有错误
  • 要从JavaScript发出一个HTTP请求,需要使用XMLHttpRequest对象
  • XMLHttpRequest对象的onload处理程序从服务器获取响应
  • XMLHttpRequest的JSON响应放在请求的responseText属性中
  • 要把responseText串转换为JSON,可以使用JSON.parse方法
  • 应用中可以使用XMLHttpRequest更新内容,如地图和email,而无需重新加载页面
  • XMLHttpRequest可以获取任何类型的文本内容,如XML,JSON等。
  • 要使用XMLHttpRequest,必须从一个服务器提供文件和请求数据。可以在你自己的机器上建立一个本地服务器进行测试,也可以使用一个托管解决方案

3,使用JSONP

    <script src="http://xiaobaicai.com/xiaobaicai.js"></script>

JSONP介绍:

  • 除了提供HTML和JavaScript的服务器外,XMLHttpRequest不允许从其他不同服务器请求数据。这是一个浏览器安全策略,专门设计用来避免恶意的JavaScript访问你的Web页面和用户的cookie。
  • 要访问Web服务托管的数据,除了XMLHttpRequest外,令一种候选方法是JSONP
  • 如果HTML和JavaScript与数据在同一个机器上,就可以使用XMLHttpRequest
  • 如果需要访问由远程服务器上的一个Web服务托管的数据,则要使用JSONP
  • JSONP是一种使用<script>元素获取数据的方法
  • JSONP就算JSON数据包装在JavaScript中,通常会包装在一个函数调用中
  • 将JSON数据包装在JSONP中的函数调用称为"回调"
  • 将回调函数指定为JSONP请求中的一个URL查询参数
  • 如果做出多次请求,可以在JSONP请求URL的末尾使用一个随机数,使浏览器不会缓存这个响应
  • replaceChild方法会用另一个元素替换DOM中的一个元素
  • setInterval是一个定时器以指定的间隔调用一个函数。可以使用setInterval向服务器做出重复的JSONP请求来获取新数据

第七章,画布

第八章,视频

视频中相关的属性,方法和事件:

属性:videoWidth videoHeight currentTime duration ended error loop muted paused readyState seeking volume

方法:play pause load canPlayType

事件:play pause progress error  timeupdate ended adort waiting loadeddate  loadedmetadata volumechange 

关于视频的一些介绍:

  • 可以使用<video>元素和一简单的属性播放视频
  • autoplay属性在页面加载时就开始播放,不过只应在适当的情况下使用
  • controls属性会使浏览器提供一组播放控件
  • 可以用poster属性提供你自己的海报图像
  • src属性包含要播放的视频的URL
  • 对于视频和音频格式有很多"标准"
  • 3种常用的格式包括WebM,MP4/H.264和Ogg/Theora
  • 使用<source>标记来指定候选的视频格式
  • 在<source>标记中使用完全限定类型可以节省浏览器的工作和时间
  • 视频对象提供了一组丰富的属性,方法和事件
  • 视频支持播放,暂停,加载,循环和静音方法及属性来直接控制视频的播放
  • 可以利用ended事件了解视频播放何时结束
  • 可以使用scratch缓冲区,在将视频复制到表面之前先对视频进行处理。
  • 可以使用setTimeout处理程序来处理视频帧。尽管没有直接链接到视频的每一帧,但这是目前最好的方法。
  • 可以使用一个URL作为视频来播放网络视频
  • 有些浏览器对视频有一个同源策略,要求同源页面同样的来源提供视频

第九章,web存储

    web存储可以使用localStorage 对象   对象常用的方法有 setItem(key)  getItem(key) .length

web存储相关介绍:

  • web存储是浏览器中的一个存储库,也是一个API,可以用来从这个本地存储库保存和获取数据项
  • 大多数浏览器都为每个元提供了至少5MB的存储空间
  • Web存储包括本地存储和会话存储
  • 本地存储是持久的,即使你关闭浏览器窗口或退出浏览器,本地存储仍然保留
  • 会话存储中的数据项会在你关闭浏览器窗口或退出浏览器是删除。会话存储很适合临时数据项,而不是长期存储
  • 本读存储和会话存储使用完全相同的API
  • Web存储按源(或者称域)来组织。源就是Web上文档的位置
  • 每个域有一个单独的存储空间,所以存储在一个源的数据项对另一个源中的Web页面是不可见的。
  • 使用localStorage.setItem(key)可以向本地存储增加一个值
  • 使用localStorage.getItem(key)可以从本地存储获取一个值
  • 可以使用与关联数组相同的语法在本地存储中设置和获取数据项。可以使用localStorage[key]来完成
  • 可以使用localStorage.key()方法列出localStorage中的键
  • localStorage.length是一个给定源localStorage中的数据项数
  • 使用浏览器中的控制台可以查看和删除localStorage中的数据项
  • 可以从localStorage直接删除数据项,只需右键点击一个数据项,并选择delete
  • 可以在代码中使用removeItem(key)方法和clear方法删除localStorage中的数据项,注意,clear方法会删除你完成这个情况操作时源所在localStorage中的所有内容
  • 每个localStorage数据项的键必须是唯一的。如果使用与一个现有数据项相同的键,会覆盖这个数据项的值
  • 要生成一个唯一的键,一种方法是使用当前时间,并使用Date对象的getTime()方法
  • 要为你的Web应用创建一个合适的命名机制,使得即使数据项从本地存储删除,或者技术数据项从本地存储删除,或者如果从另一个应用在本地存储中创建了数据项,也能正常工作
  • Web存储目前只支持存储字符串作为对应键的值。
  • 可以使用parseInt或parseFloat将localStorage中作为字符串存储的数字转换回真正的数字。
  • 如果需要存储更复杂的数据,可以使用JavaScript对象,在存储之前会使用JSON.stringify把它们转换为字符串,在获取之后会使用JSON.parse再将其转换回对象
  • 本地存储对移动设备尤其有用,可以用来降低带宽需求
  • 会话存储类似于本地存储,只不过浏览器存储库中保存的内容不会持久存储。会话存储对于短期会话很有用,如购物会话。

第十章,web工作线程

    一个web工作线程的例子:

html:

<!doctype html>
<html>
	<head>
		<title>Ping Pong</title>
		<meta charset="utf-8">
		<script src="static/js/manager.js"></script>
	</head>
	<body>
		<p>看,下面是输出</p>
		<p id="output"></p>
		<time></time>
	</body>
</html>

manager.js

window.onload = function(){
	var worker = new Worker("/static/js/work.js");
	
	worker.postMessage("ping");
	
	worker.onmessage = function(event){
		var message = "Worker says " + event.data;
		document.getElementById("output").innerHTML = message;
	};
}

work.js

onmessage = pingpong;

function pingpong(event) {
	if (event.data == "ping") {
		postMessage("pong");
	}
	else {
		// intentionally make an error!
		1/x;
	}
}

关于web工作线程的几个问题

1,创建工作线程时能不能直接传递一个函数,而不是利用一个JavaScript文件?这样看起来更容易,而且与JavaScript通常的做法更一致:

    答:不,不能这样做。因为工作线程的要求之一就是它不能访问DOM,处于同样的原因,也不能访问主浏览器线程的任何状态。如果可以向worker构造函数传入一个函数,这个函数可能好包含DOM或主JavaScript代码的引用,这就会违反这个要求。所以,为了避免这个问题,Web工作线程的设计者选择的做法是只能传递一个JavaScript url。

2,工作线程可以访问localStorage或做出XMLHttpRequest请求吗?

    答:可以

web工作线程介绍:

  • 如果没有Web工作线程,JavaScript是单线程的,这说明它一次只能做一件事情
  • 如果你交给一个JavaScript程序太多的工作,你可能会收到一个"slow script"(脚本运行缓慢)的对话框
  • Web工作线程在一个单独的线程处理任务,所以主JavaScript代码可以继续运行,用户界面可以保持响应
  • Web工作线程不能访问页面代码中的函数或DOM
  • 页面中的代码与Web工作线程通过消息通信
  • 要向一个工作线程发送消息,可以使用postMessage
  • 可以通过postMessage向工作线程发送字符串和对象,但不能向工作线程发送函数
  • 可以将工作线程的onmessage属性设置为一个处理函数,来接受由工作线程返回的消息
  • 工作线程将其onmessage属性设置为一个处理函数,来接收页面代码发送的消息
  • 一个工作线程准备发回一个结果,会调用postMessage,并传入结果作为参数
  • 工作线程结果封装在一个事件对象中,并置于data属性中
  • 可以使用event.target属性查找哪个工作线程发出了消息
  • 消息在主页面代码和工作线程之间会复制,而非共享
  • 可以使用多个工作线程完成能分解为多个任务的大规模计算,如计算一个分形可视乎图像或对光线跟踪图像
  • 每个工作线程在它的线程中运行,所以如果你的计算机有一个多喝处理器,工作线程会并行运行,这会提高计算的速度
  • 可以从页面代码调用worker.terminate()来终止一个线程。这会终止工作线程脚本。工作线程还可以调用close()让自己停止工作
  • 工作线程还有一个onerror属性。可以把这个属性设置为一个错误处理函数,如果你的工作线程存在一个脚本错误就会调用这个处理函数。
  • 要在工作线程文件中包含和使用JavaScript库,可以使用importScripts
  • 工作线程不能访问DOM或主代码中的函数,但是可以使用XMLHttpRequest和本地存储。

猜你喜欢

转载自blog.csdn.net/qq_39263663/article/details/80623460