DOM变化 我们知道DOM有许多的版本,其中DOM0和DOM2这两个级别以对事件的纳入标准而为人所知 但是呢,这里不讲事件,在后面会有专门和事件有关的部分作为详细讲解 这里就只讲一下DOM2和DOM3的背景来历 首先DOM1级主要定义的是HTML和XML文档底层的结构,DOM2和DOM3两个级别则主要致力于为文档引入更加丰富的交互能力 与此同时这两个版本也支持了更加高级的XML特性 首先DOM2分为了许多模块 如下所示: 1. DOM2级核心 2.DOM2级视图 3.DOM2级事件 4.DOM2…
此系列文章,用于记录所学,如有错误欢迎指出. Javascript组成 1.核心(ECMAScript) 2.文档对象模型(DOM) 3.浏览器对象模型(BOM) 1.核心(ECMAScript) ECMAScript说白了是定义Javascript的标准,而这种标准与浏览器并无依赖关系. 我们现在前端所使用的Javascript只是遵循这一标准的,以浏览器为宿主平台的脚本语言. 遵循这一标准的脚本语言都可以称之为js. 而js的宿主平台除了我们最常用的浏览器平台之外,还有node,和Adobe…
样式 在HTML中定义元素的方式有以下三种: 1.link标签引入外部样式表 2.style标签定义嵌入样式 3.通过JS中对style特性定义元素样式(行内样式) “DOM2级样式”围绕上述样式机制提供了一套API 若需要检测CSS2是否可用可以使用以下代码(虽然现在应该是用不着,毕竟CSS4都快普及了emmm) var supportsDOM2CSS = document.implementation.hasFeature("CSS","2.0"); var s…
遍历 “DOM2级遍历和范围” 定义了两个用于辅助完成顺序遍历的DOM结构类型 NodeIterator 和 TreeWalk 上述两种类型可以基于给定起点的DOM结构执行深度优先的遍历操作 对于检测浏览器对于该功能的实现可以使用以下代码 var supportTraversals = document.implementation.hasFeature("Traversal","2.0"); var supportsNodeIterator = (typeof d…
范围 为了让开发人员更加方便地控制页面“DOM2级遍历和范围”模块定义了“范围”接口 通过该接口开发人员可以选择文档中的一个区域,而不必考虑元素的界限 在常规操作不能有效地修改文档时,使用范围往往可以达到目的 DOM中的范围 DOM2级在Document类型中定义了 createRange()方法 在兼容该接口的浏览器中,该方法属于document对象 可以使用以下代码,检测浏览器对其的兼容 var supportsRange = document.implementation.hasFeatu…
在日常实践中,我们在使用JS的时候难免会需要获取元素的大小及位置 首先要声明的是,这一部分的内容并不属于DOM2样式规范,因为DOM中并没有对我们如何获取元素大小的相关信息做出规范 偏移量 偏移量及元素在页面中的位置 要获取元素的偏移量和下方五个属性有关: offsetHeight:元素的高度(包含元素的外边框及水平滚动条) offsetWidth:元素的宽度(包含元素的外边框及垂直滚动条) offsetTop:元素的上边框到包含当前元素的元素的内上边框的距离 offsetLeft:元素的左边框…
虽然IE9支持了DOM范围,但是IE8及更早版本并不支持DOM范围 所以IE8以下的更早版本的IE提出了与之类似的概念以供大家使用 也就是 文本范围 var range = document.body.createTextRange(); 文本范围是IE专有的特性,了解就好 范围的简单选择 实现范围选择的最简单方式就是使用范围的 findText()方法 该方法会找到第一次出现的给定文本,并将范围环绕该文本 若没有找到文本则返回 false,找到则返回 true 同样以下方的HTML代码为例:…
操作范围中的内容 在创建范围时,内部会为这个范围创建一个文档片段 范围所属的全部节点都会被添加到这个片段中 虽然选取范围可以不是完整的.良好的DOM结构 但是在这个为范围创建的文档片段中,会自己完缺少的闭合标签,以此构建有效的DOM结构来方便我们操作 上述步骤都是内部实现的,因此我们可以不用过多地关注这一方面 首先是 deleteContents() 这个方法会从文档中删除选中范围的内容 以下方的HTML代码为例 <p id = "p1"><b>hello<…
操作样式表 在JS中样式表用一种类型来表示,以便我们在JS对其进行操作 这一类型就是CSSStyleSheet 即CSS样式表类型,包括了之前 style 对象所不包括的外部样式表以及嵌入样式表 其中<link>以HTMLLinkElement 类型表示 而<style> 以HTMLStyleELement类型表示 但是这两类样式表更加通用的类型则是继承自 StyleSheet 类型的 CSSStyleSheet 其中继承自 StyleSheet 类型的有以下属性: disable…
事件 JS与HTML的交互是通过事件实现的 而事件指的就是:文档或浏览器窗口特定的交互瞬间 可以通过侦听器来预定事件,以便在事件发生时执行相应的代码 这种模式也是设计模式中的观察者模式 事件流 有了事件,也就有了事件流的概念 事件流故名思意:也就是事件的流向,所以事件流描述的是从页面中接收事件的顺序 虽然事件流描述的都是事件的流向,但是事件流在当时的两个最大的浏览器厂商的提出中却是两个差不多完全相反的事件流概念 一是IE的冒泡事件流,二是Netscape的捕获事件流 事件冒泡 即事件开始时由最具…
前一段时间由于事情比较多,所以笔记耽搁了一段时间,从这一篇开始我会尽快写完这个系列. 文章中有什么不足之处,还望各位大佬指出. JS中的数据类型 上一篇中我写了有关JS引入的Script标签相关的东西. 那么这一篇,我们可以正式进入JS的世界了,emmm 前面的东西应该比较基础,大佬们不喜勿喷. 首先学习一门语言,最开始不出意外的话应该是先了解这门语言由什么类型的数据组成,毕竟语言都是建立在这些数据类型的基础之上的. 在介绍数据类型之前,我先大概说一下 typeof 操作符,这是JS中判断一个变…
继续记笔记,JavaScript越来越有意思了. 继续... 第三章:JavaScript基础 ECMAScript语法在很大程度上借鉴了C和其它类似于C的语言,比如Java和Perl. 大小写敏感:变量.函数名.操作符都是大小写敏感的,比如“text”和“Text”不同. 标识符: 第一个字符必须是字母.下划线或者美元符号($); 之后的字符可以是字母.下划线.美元符号或者数字. 标识符中的字母可以是ASCII和Unicode字母比如À and Æ,但是不推荐这样使用. 按照惯例,ECMASc…
错误 Javascript与WebGL之间的一个最大区别在于,WebGL的操作一般不会抛出错误 如果希望获取WebGL的错误信息,那么就需要手动调用  gl.getError() 方法 该方法会返回以下错误常量之一: gl.NO_ERROR: 上一次操作没有发生错误 gl.INVALID_ENUM: 应该给WebGL方法传入常量但是传错了参数 gl.INVALID_VALUE: 在需要无符号数的地方传入了负值 gl.INVALID_OPERATION: 在当前状态下不能完成操作 gl.OUT_O…
WebGL上下文 在支持WebGL的浏览器中,WebGL的名字为 "experimental-webgl",这是由于 webgl 的规范仍未制定完成 制定完成后名字就会改为简单的 "webgl" 如果浏览器不支持,那么在获取webgl上下文的时候浏览器会返回 null 所以在使用前需要检测返回值 基本的获取 WebGL 代码如下: let drawing = document.getElementById("drawing"); // 检测浏览器…
类型化视图 类型化视图一般也被认为是一种类型化数组. 因为其元素必须是某种特定的数据类型,类型化视图都继承自 Dataview Int8Array: 表示8位二补整数(即二进制补数) Uint8Array: 8位无符号整数 Int16Array: 16位二补数 Uint16Array: 16位无符号整数 Float32Array: 32位IEEE浮点值 Float64Array: 64位IEEE浮点值 与上面同名的构造函数都支持三个参数: ArrayBuffer 字节偏移量 字节长度 返回一个类…
WebGL webgl 是针对 canvas 的 3D上下文,与其它Web技术不同,WebGL并非是W3C制定的标准,而是由 Khronos Group 制定的. 类型化数组 WebGL所涉及的复杂运算需要提前知道数值的精度,但是标准的 JS 无法支持这一诉求. 因此WebGL引入了类型化数组这一概念,类型化数组也是数组,与一般的数组没有什么区别,只不过这种数组中所有元素的值都被指定为某一特定类型. 类型化数组的核心在于 ArrayBuffer 这一数据类型,每个 ArrayBuffer 对象表…
合成 除了之前介绍的属性之外,还有两个属性会应用到整个2d上下文中; globalAlpha 用于指定所有绘制的透明度 globalComposition 用于表示后绘制的图形怎样与先绘制的图形进行结合 该属性的值是字符串,可能的值如下 source-over(默认)   后绘制的图形位于先绘制的图形的上方 source-in    后绘制的图形与先绘制的图形重叠部分可见,其它部分透明 source-out    后绘制的图形与先绘制的图形不重叠部分可见,先绘制的图形完全透明 source-at…
阴影 2D上下文将会根据以下属性为形状或路径绘制阴影 shadowColor: 用于设置阴影颜色,默认为黑色 shadowOffsetX: 形状或路径X方向的阴影偏移量,默认为0 shadowOffsetY: 形状或路径y轴方向的阴影偏移量,默认为0 shadowBlur: 模糊的像素数,默认为0, 即不模糊 这些属性都可以通过 context 对象来修改,只要在绘制之前为其设置值,就能自动产生阴影 var context = drawing.getContext("2d"); //…
渐变 渐变由 canvasGradient 实例表示 要创建一个渐变对象需要调用 createLinearGradient() 方法 该方法接收四个参数: 起点的x坐标 起点的y坐标 终点的x坐标 终点的y坐标 调用该方法后会创建一个指定大小的实例,并返回一个 CanvasGradient 实例 创建渐变对象后需要指定色标,通过 addColorStop() 该方法接收两个参数: 色标位置 CSS颜色值 如: var gradient = context.createLinearGradient…
绘制矩形 矩形是唯一一种可以直接在2D上下文中绘制的形状. 与矩形有关的方法包括: fillRect() strokeRect() clearRect() 上述方法都接收四个参数: 绘制矩形的 X 坐标 绘制矩形的 Y 坐标 矩形的宽度 矩形的高度 这些参数的单位都是像素 首先,fillRect() 方法在 canvas 中绘制的矩形会填充指定颜色 填充的颜色通过上一篇文章介绍的 fillStyle 指定,如: var drawing = document.getElementById('dra…
文本框脚本 在HTML中文本框有两种实现方式: <input> <textarea> 这两种实现方式虽然在多数情况下表现一致,但是两者之间仍存在许多重要区别 对于<input>来说,如果需要展现一个文本框则需要将 type 特性设置为“text” 通过设置其 size 特性可以指定文本框中能够显示的最大字符数 通过 value 特性则可以设置文本框的初始值 通过设置 maxlength 特性可以设置文本框接收的最大字符数 <input type="tex…
表单字段 表单作为web应用中不可或缺的一部分,当然也是可以使用原生的 DOM 元素来访问的 除了标准的访问方式之外,每个表单都拥有一个 elements 属性,该属性保存着该表单所有 表单元素 的集合,该集合是一个有序列表,包含着所有的表单字段 这些元素在该集合中出现的顺序,与在文档中出现的顺序一致 在该集合中可以使用 name 和 在文档中的顺序 来对其中的元素进行索引 若有多个表单元素拥有相同的 Name,那么将会返回一个 nodelist 集合 以下方的HTML代码片段为例: <form…
事件,指的是网页中某个特定的交互时刻 一般来说事件由浏览器厂商负责提供,一般由用户操作或者其它浏览器功能来触发 但是有一类特殊的事件,那就是由我们开发人员通过JS触发的事件 这些事件和浏览器创建的事件一样,都可以冒泡,并且在其触发时运行事先指定给它的事件处理程序 在测试web程序的过程中这种模拟触发事件是一种极其有用的技术,为此DOM2级规范将其纳入规范 规范化了模拟事件的方式,这种DOM规范规定的模拟事件的技术手段也叫做DOM事件模拟 PS:模拟事件和自定义事件是有区别的,模拟事件指的是我们并…
变动事件 DOM2级的变动事件,能在DOM中的一部分发生变化时给出提示 变动事件是为XML或HTML DOM 设计的,并不特定于某种语言 DOM2级定义了如下变动事件: DOMSubtreeModified:在DOM结构发生变化时触发,即会在下面所有事件触发后触发 DOMNodeInserted:当一个节点作为子节点插入另一个节点中时触发 DOMNodeRemoved:节点从父节点中移除时触发 DOMNodeInsertedIntoDocument:一个节点被直接插入文档或通过子树间接插入文档后…
键盘与文本事件 用户在使用键盘时会触发键盘事件 “DOM2级事件”最初规定了键盘事件,但是最后在定稿时又删除了相应内容 所以键盘事件被放入了DOM3级事件的规范中 总的来说有三个键盘事件: keydown:当用户按下键盘上的任意键时触发,按住不放会重复触发 keypress:用户按下键盘上的字符键时触发,按住不放重复触发(按下ESC键也会触发) keyup:用户释放按键触发 所有元素都支持上述三个事件,但只有用户通过文本文本框输入文本时比较常用 文本事件只有一个就是 textInput 事件 该…
鼠标与滚轮事件 鼠标事件是web开发中最常用的一类事件,毕竟鼠标是最主要的定位设备 DOM3级事件中定义了9个鼠标事件: click:在用户单击主鼠标按钮(一般为鼠标左键)或者按下回车时触发,这一点对确保易访问性十分重要,这意味着 onclick 事件处理程序既可以通过键盘执行也可以通过鼠标执行 dbclick:在用户双击主鼠标按钮时触发(鼠标左键).从技术上说该事件并不是DOM2级规范所支持的,但是由于浏览器对其的广泛实现在DOM3级规范中将其纳入标准 mousedown:用户按下任意鼠标按钮…
UI事件 UI事件是指那些不一定与用户操作有关的事件 这些事件在DOM规范出现之前,都是以各种不同的形式存在于不同的浏览器 而在DOM事件中为了保证向后兼容,现有的UI事件如下: DOMActivate:表示元素已经被用户操作激活,该事件在DOM3规范中被废弃,因此不建议使用 load:当页面完全加载后在window对象上触发,图像加载完毕在 img 标签触发,嵌入内容加载完毕在 object 元素触发 unload:页面完全卸载后在 window 对象触发,框架卸载完成在框架集上触发,嵌入内容…
事件类型 Web浏览器中可能发生的事件有许多种类型 不同类型的事件都有着自己独特的信息 在“DOM3级事件”规范中,规定了以下几类事件: UI事件    当用户与页面元素交互时触发 焦点事件    当元素失去或获得焦点时触发 鼠标事件    当用户通过鼠标在页面上执行操作时触发 滚轮事件    当使用鼠标滚轮或类似设备时触发 文本事件    当在文档中输入文本时触发 键盘事件    当用户通过键盘在页面执行操作时触发 合成事件    当为IME(输入法编辑器)输入字符时触发 变动事件    当底…
事件处理程序 事件处理程序即响应某个事件的函数 事件处理程序以 “on” 开头 如“onclick”,“onload” HTML事件处理程序 某个元素支持的每种事件都可以使用一个与响应的事件处理程序同名的HTML特性来指定 这个特性的值应该是能够执行的script代码 如: <input type="button" value="click me" onclick="alert('clicked')"/> 此外也可以直接调用在文档其它…
动态脚本 大多数情况下,DOM操作都很简洁明了 因为DOM主要就是用来操作页面中的可视节点的 但有些时候我们又希望可以动态的来进行DOM操作 其中的一部分也就是今天我们的内容动态脚本 动态脚本是什么意思呢? 动态脚本指的就是页面中那些本来不存在,但是随着代码的执行插入页面的脚本 例如下面代码: var script = document.createElement("script"); script.type = "text/javascript"; script.…