图书目录

目  录

第1 章 JavaScript 基础 1

视频讲解:16 分钟

1.1 JavaScript 概述 2

1.1.1 什么是JavaScript 2

1.1.2 为什么学习JavaScript 2

1.2 JavaScript 历史和版本 5

1.2.1 JavaScript 早期历史 5

1.2.2 ECMAScript 与JavaScript 的关系 5

1.2.3 ECMAScript 历史 6

1.2.4 ECMAScript 与浏览器的兼容 6

1.3 JavaScript 构成 7

1.3.1 JavaScript 核心 7

1.3.2 文档对象模型 7

1.3.3 浏览器对象模型 9

1.4 初次使用JavaScript 9

1.4.1 编写脚本 9

1.4.2 脚本位置 12

1.4.3 设置延迟执行 13

1.4.4 设置异步响应 13

1.4.5 在XHTML 中使用JavaScript 脚本 13

1.4.6 兼容不支持JavaScript 的浏览器 14

1.4.7 比较嵌入代码与链接脚本 14

1.4.8 使用<noscript>标签 14

1.4.9 脚本的动态加载 14

1.5 JavaScript 解析基础 14

1.6 浏览器与JavaScript 15

1.7 JavaScript 开发工具 15

1.8 JavaScript 发展趋势 15

第2 章 JavaScript 基本语法 16

视频讲解:2 小时1 分钟

2.1 编写第一行代码 17

2.2 变量 18

2.2.1 声明变量 18

2.2.2 赋值变量 19

2.2.3 变量的作用域 19

2.2.4 全局变量 20

2.3 数据类型 21

2.3.1 检测类型 21

2.3.2 数值 22

2.3.3 字符串 24

2.3.4 布尔值 25

2.3.5 Null 和Undefined 26

2.4 运算符 27

2.5 使用算术运算符 29

2.5.1 加法运算 29

2.5.2 减法运算 30

2.5.3 乘法运算 31

2.5.4 除法运算 31

2.5.5 余数运算 31

2.5.6 取反运算 32

2.5.7 递增和递减运算 32

2.6 使用逻辑运算符 33

2.6.1 与运算 33

2.6.2 或运算符 35

2.6.3 非运算符 36

2.6.4 逻辑运算 36

2.7 使用关系运算符 38

2.7.1 大小比较 38

2.7.2 包含检测 39

2.7.3 等值检测 39

2.8 使用赋值运算符 41

2.9 使用对象操作运算符 42

2.10 使用位运算符 42

2.10.1 认识位运算 43

2.10.2 逻辑位运算 43

2.10.3 移位运算 43

2.11 使用其他运算符 43

2.11.1 条件运算符 43

2.11.2 逗号运算符 44

2.11.3 void 运算符 45

2.12 表达式 46

2.13 严格模式 49

2.14 案例实战 51

2.14.1 完善类型检测接口 51

2.14.2 转换为字符串 52

2.14.3 转换为数字 54

2.14.4 转换为数字形式字符串 56

2.14.5 转换为布尔值 57

2.14.6 转换为对象 58

2.14.7 把对象转换为值 58

2.14.8 强制类型转换 59

2.15 强化练习 59

2.15.1 求值 59

2.15.2 简单编程 59

2.15.3 表达式计算 59

2.15.4 表达式编程 59

第3 章 JavaScript 程序结构设计 60

视频讲解:1 小时30 分钟

3.1 语句 61

3.1.1 表达式语句 61

3.1.2 复合语句 61

3.1.3 声明语句 62

3.1.4 空语句 62

3.2 选择结构 63

3.2.1 if 语句 63

3.2.2 设计多选择结构 64

3.2.3 switch 语句 67

3.2.4 default 从句 69

3.2.5 优化选择结构 70

3.3 循环结构 73

3.3.1 while 语句 73

3.3.2 do-while 语句 74

3.3.3 for 语句 75

3.3.4 for-in 语句 76

3.3.5 优化循环结构 79

3.4 跳转结构 81

3.4.1 标签语句 81

3.4.2 break 语句 81

3.4.3 continue 语句 83

3.5 异常处理结构 85

3.5.1 throw 语句 86

3.5.2 try-catch-finally 语句 86

3.6 案例实战 88

3.6.1 把结构语句转换为表达式 88

3.6.2 优化选择运算性能 90

3.6.3 优化循环运算性能 91

3.6.4 设计杨辉三角 93

3.6.5 编程题 95

第4 章 使用数组 97

视频讲解:1 小时43 分钟

4.1 数组基础 98

4.1.1 定义数组 98

4.1.2 定义多维数组 99

4.1.3 读写数组 99

4.1.4 数组长度 100

4.1.5 类数组 101

4.1.6 检测数组 101

4.1.7 遍历数组 102

4.1.8 空位数组 103

4.2 使用Array 104

4.2.1 判断数组 104

4.2.2 增删数组 104

4.2.3 合并数组 106

4.2.4 转换为字符串 107

4.2.5 截取数组 108

4.2.6 排序数组 109

4.2.7 定位元素 111

4.2.8 迭代数组 112

4.2.9 过滤数组 115

4.2.10 验证数组 115

4.2.11 汇总数组 116

4.3 案例实战 118

4.3.1 交换变量值 118

4.3.2 使用关联数组 118

4.3.3 扩展数组 120

4.3.4 初始化数组 121

4.3.5 数组去重 122

4.4 强化练习 124

4.4.1 插入排序 124

4.4.2 二分插入排序 124

4.4.3 选择排序 124

4.4.4 冒泡排序 124

4.4.5 快速排序 124

4.4.6 计数排序 124

第5 章 使用字符串 125

视频讲解:1 小时19 分钟

5.1 字符串基础 126

5.1.1 定义字符串 126

5.1.2 字符串与数组 128

5.1.3 字符串长度 129

5.1.4 字符集 130

5.1.5 Base64 转码 131

5.2 使用String 132

5.2.1 字符串的表示和值 132

5.2.2 连接字符串 133

5.2.3 获取指定位置字符 133

5.2.4 获取字符的位置 134

5.2.5 查找字符串 135

5.2.6 截取字符串 136

5.2.7 替换字符串 138

5.2.8 大小写转换 139

5.2.9 比较字符串 139

5.2.10 转换为数组 140

5.2.11 修剪字符串 141

5.3 案例实战 141

5.3.1 格式化字符串 141

5.3.2 字符编码和解码 142

5.3.3 Unicode 编码和解码 144

5.3.4 字符串智能替换 146

5.3.5 过滤敏感词 148

5.3.6 高级加密解密 148

第6 章 使用正则表达式 151

视频讲解:1 小时20 分钟

6.1 新建正则表达式 152

6.1.1 构造正则表达式 152

6.1.2 正则表达式直接量 153

6.2 匹配规则基础 154

6.2.1 字面量字符和元字符 154

6.2.2 转义字符 155

6.2.3 特殊字符 156

6.2.4 字符类 157

6.2.5 预定义模式 159

6.2.6 重复类 160

6.2.7 量词字符 160

6.2.8 贪婪模式 160

6.2.9 修饰字符 161

6.2.10 模式分组 162

6.2.11 分组引用 163

6.2.12 非引用组 164

6.2.13 声明边界 165

6.3 使用RegExp 165

6.3.1 RegExp 对象属性 165

6.3.2 test() 166

6.3.3 exec() 167

6.3.4 RegExp 静态属性 169

6.4 案例实战 171

6.4.1 匹配十六进制颜色值 171

6.4.2 匹配时间 172

6.4.3 匹配日期 173

6.4.4 匹配成对标签 173

6.4.5 匹配物理路径 174

6.4.6 货币数字的千位分隔符表示 175

6.4.7 验证密码 176

第7 章 使用函数 178

视频讲解:2 小时5 分钟

7.1 函数基础 179

7.1.1 声明函数 179

7.1.2 定义函数表达式 180

7.1.3 构造函数 181

7.1.4 定义嵌套函数 182

7.1.5 比较函数的定义方法 182

7.1.6 函数的返回值 182

7.1.7 函数的参数 183

7.1.8 调用函数 184

7.1.9 函数作用域 186

7.1.10 函数的标识符 187

7.2 使用arguments 188

7.2.1 认识arguments 对象 188

7.2.2 使用callee 190

7.2.3 应用arguments 190

7.3 使用Function 192

7.3.1 name 属性 192

7.3.2 length 属性 192

7.3.3 toString() 193

7.3.4 call()和apply() 193

7.3.5 bind() 197

7.4 案例实战 199

7.4.1 函数调用模式 199

7.4.2 使用闭包 201

7.4.3 使用this 202

7.4.4 函数引用和函数调用 204

7.4.5 链式调用 204

7.4.6 使用函数实现历史记录 205

7.4.7 扩展Function 类型 206

7.4.8 代码的模块模式 207

7.4.9 惰性实例化 208

7.4.10 分支函数 209

7.4.11 惰性载入函数 210

7.4.12 函数节流 211

第8 章 函数式编程 213

8.1 函数式编程概述 214

8.1.1 范畴论 214

8.1.2 一等公民的函数 215

8.1.3 纯函数 215

8.1.4 命令式和声明式 218

8.1.5 PointFree 风格 218

8.2 函数式基本运算 219

8.2.1 函数合成 219

8.2.2 compose 实现 221

8.2.3 函数柯里化 222

8.2.4 curry 实现 224

8.2.5 curry 变体 225

8.3 函子 228

8.3.1 认识函子 228

8.3.2 定义容器 229

8.3.3 定义函子 230

8.3.4 Either 函子 232

8.3.5 Applicative 函子 234

8.4 高阶函数 236

8.4.1 回调函数 236

8.4.2 返回函数 237

8.5 递归函数 239

8.5.1 定义递归函数 240

8.5.2 尾递归 241

8.5.3 栈缓存 242

8.6 案例实战 244

8.6.1 过滤运算 244

8.6.2 分组运算 247

8.6.3 映射运算 249

8.7 使用Promise 对象 252

第9 章 使用对象 253

视频讲解:32 分钟

9.1 创建对象 254

9.1.1 使用new 运算符 254

9.1.2 对象直接量 255

9.1.3 使用create()方法 257

9.2 对象的基本操作 258

9.2.1 引用对象 258

9.2.2 复制对象 258

9.2.3 克隆对象 259

9.2.4 销毁对象 260

9.3 读写属性 260

9.3.1 定义属性 260

9.3.2 访问属性 263

9.3.3 赋值属性 265

9.3.4 删除属性 266

9.3.5 对象方法 266

9.4 使用Object 对象 268

9.4.1 Object 函数 268

9.4.2 Object 构造函数 268

9.4.3 使用Object 静态方法 268

9.4.4 使用Object 实例方法 268

9.5 使用包装对象 268

9.5.1 包装对象的实例方法 269

9.5.2 原始类型的自动转换 269

9.5.3 自定义方法 269

9.5.4 Boolean 对象 269

9.6 使用属性描述对象 269

9.6.1 认识属性描述对象 269

9.6.2 Object.getOwnPropertyDescriptor() 270

9.6.3 Object.defineProperty()和Object.defineProperties() 270

9.6.4 元属性 270

9.6.5 Object.getOwnPropertyNames() 270

9.6.6 Object.prototype.propertyIsEnumerable() 270

9.6.7 存取器 270

9.6.8 对象的拷贝 270

9.6.9 控制对象状态 270

9.7 使用Math 对象 270

9.7.1 Math 属性 271

9.7.2 Math 方法 271

9.8 使用Date 对象 271

9.8.1 创建Date 对象 271

9.8.2 日期运算 271

9.8.3 Date 静态方法 271

9.8.4 Date 实例方法 271

9.9 使用JSON 对象 271

9.9.1 JSON.stringify() 272

9.9.2 JSON.parse() 272

9.9.3 比较JSON 与XML 272

9.9.4 优化JSON 数据 272

9.10 使用console 对象 272

9.10.1 浏览器实现 272

9.10.2 console 对象的方法 272

9.10.3 命令行API 272

9.10.4 debugger 语句 272

第10 章 面向对象编程 273

视频讲解:33 分钟

10.1 面向对象基础 274

10.1.1 对象 274

10.1.2 构造函数 274

10.1.3 使用new 运算符 275

10.1.4 new 运行原理 275

10.1.5 使用new.target 276

10.2 使用this 277

10.2.1 this 调用对象 277

10.2.2 this 应用场景 277

10.2.3 注意事项 277

10.2.4 绑定this 277

10.3 使用prototype 277

10.3.1 定义原型 278

10.3.2 原型属性和本地属性 279

10.3.3 应用原型 280

10.3.4 原型链 283

10.3.5 原型继承 284

10.3.6 扩展原型方法 285

10.3.7 Object.getPrototypeOf() 286

10.3.8 Object.setPrototypeOf() 286

10.3.9 Object.create() 286

10.3.10 Object.prototype.isPrototypeOf() 286

10.3.11 Object.prototype.__proto__ 287

10.3.12 获取原型对象方法的比较 287

10.4 继承 287

10.4.1 Object.getOwnPropertyNames() 287

10.4.2 Object.prototype.hasOwnProperty() 287

10.4.3 in 运算符和for-in 循环 287

10.4.4 对象的拷贝 288

10.5 面向对象编程模式 289

10.5.1 构造函数的继承 289

10.5.2 多重继承 290

10.5.3 模块 291

10.6 案例实战 294

10.6.1 设计工厂模式 294

10.6.2 设计类继承 294

10.6.3 设计构造原型模式 294

10.6.4 设计动态原型模式 294

10.6.5 设计实例继承 295

10.6.6 惰性实例化 295

10.6.7 安全构造对象 295

第11 章 BOM 操作 296

视频讲解:1 小时55 分钟

11.1 window 对象 297

11.1.1 window 对象属性 297

11.1.2 window 对象方法 298

11.1.3 window 对象事件 301

11.1.4 访问浏览器对象 302

11.1.5 全局作用域 302

11.1.6 使用人机互动方法 302

11.1.7 打开和关闭窗口 303

11.1.8 使用框架集 303

11.1.9 控制窗口位置 303

11.1.10 控制窗口大小 303

11.2 navigator 对象 303

11.2.1 navigator 对象属性 303

11.2.2 浏览器检测方法 305

11.2.3 检测浏览器类型和版本号 305

11.2.4 检测客户操作系统 305

11.2.5 检测插件 305

11.3 location 对象 306

11.4 history 对象 307

11.4.1 实现无刷新浏览 308

11.4.2 设计导航页面 311

11.4.3 设计无刷新网站 312

11.4.4 设计无刷新灯箱广告 312

11.4.5 设计可后退画板 313

11.5 screen 对象 313

11.6 document 对象 314

11.6.1 document 对象属性 315

11.6.2 document 对象方法 316

11.7 案例实战 317

11.7.1 使用远程脚本 317

11.7.2 设计远程交互 319

11.7.3 使用浮动框架 322

11.7.4 封装用户代理检测 324

第12 章 DOM 操作 325

视频讲解:1 小时47 分钟

12.1 DOM 版本概述 326

12.2 节点 326

12.2.1 节点类型 326

12.2.2 节点名称和值 326

12.2.3 节点树 327

12.2.4 访问节点 327

12.2.5 操作节点 330

12.3 文档 331

12.3.1 访问文档节点和子节点 331

12.3.2 访问文档信息 332

12.3.3 访问文档元素 332

12.3.4 访问文档集合 333

12.3.5 使用HTML5Document 333

12.4 元素 334

12.4.1 访问元素 334

12.4.2 遍历元素 335

12.4.3 创建元素 335

12.4.4 复制节点 336

12.4.5 插入节点 336

12.4.6 删除节点 337

12.4.7 替换节点 337

12.4.8 获取焦点元素 338

12.4.9 检测包含节点 339

12.5 文本 339

12.5.1 访问文本节点 339

12.5.2 创建文本节点 340

12.5.3 操作文本节点 341

12.5.4 读取HTML 字符串 341

12.5.5 插入HTML 字符串 342

12.5.6 替换HTML 字符串 342

12.5.7 插入文本 343

12.6 文档片段 343

12.7 属性 344

12.7.1 访问属性节点 344

12.7.2 读取属性值 345

12.7.3 设置属性值 345

12.7.4 删除属性 346

12.7.5 使用类选择器 347

12.7.6 自定义属性 348

12.8 CSS 选择器 348

12.9 范围 350

12.9.1 创建范围 350

12.9.2 选择范围 350

12.9.3 设置范围 350

12.9.4 操作范围内容 350

12.9.5 插入范围内容 350

12.9.6 折叠范围 350

12.9.7 比较范围 351

12.9.8 复制和清除范围 351

12.10 案例实战 351

12.10.1 异步加载远程数据 351

12.10.2 使用script 设计异步交互 351

12.10.3 使用JSONP 异步通信 351

12.10.4 访问DOM 集合 352

12.10.5 编辑选择文本 352

第13 章 事件操作 353

视频讲解:46 分钟

13.1 事件基础 354

13.1.1 JavaScript 事件发展历史 354

13.1.2 事件模型 354

13.1.3 事件传播 354

13.1.4 事件类型 355

13.1.5 绑定事件 355

13.1.6 事件监听函数 356

13.1.7 注册事件 358

13.1.8 销毁事件 360

13.1.9 event 对象 362

13.1.10 事件委托 364

13.2 自定义事件 366

13.2.1 设计弹出对话框 366

13.2.2 设计遮罩层 367

13.2.3 自定义事件 369

13.2.4 设计事件触发模型 370

13.2.5 应用事件模型 371

13.3 鼠标事件 375

13.3.1 click 和dblclick 375

13.3.2 mouseup、mousedown 和mousemove 375

13.3.3 mouseover 和mouseenter 375

13.3.4 mouseout 和mouseleave 375

13.3.5 contextmenu 375

13.4 MouseEvent 对象 375

13.4.1 altKey、ctrlKey、metaKey 和

shiftKey 375

13.4.2 button 和buttons 376

13.4.3 clientX、clientY、movementX、movementY、screenX 和screenY 376

13.4.4 relatedTarget 376

13.4.5 小结 376

13.5 wheel 事件 376

13.6 键盘事件 376

13.6.1 altKey、ctrlKey、metaKey 和shiftKey 376

13.6.2 key 和charCode 376

13.6.3 小结 376

13.7 进度事件 377

13.8 拖曳事件 377

13.8.1 事件种类 377

13.8.2 DataTransfer 对象概述 377

13.8.3 DataTransfer 对象的属性 377

13.8.4 DataTransfer 对象的方法 377

13.9 触摸事件 377

13.9.1 Touch 对象 377

13.9.2 TouchList 对象 378

13.9.3 TouchEvent 对象 378

13.9.4 触摸事件的种类 378

13.10 表单事件 378

13.10.1 input 378

13.10.2 select 378

13.10.3 change 378

13.10.4 submit 378

13.10.5 reset 378

13.11 文档事件 378

13.11.1 beforeunload、unload、load、error、pageshow 和pagehide 378

13.11.2 DOMContentLoaded 和readystatechange 379

13.11.3 scroll 379

13.11.4 resize 379

13.11.5 hashchange 和popstate 379

13.11.6 cut、copy 和paste 379

13.11.7 focus、blur、focusin 和focusout 379

第14 章 CSS 操作 380

视频讲解:41 分钟

14.1 CSS 脚本基础 381

14.1.1 访问行内样式 381

14.1.2 使用style 382

14.1.3 使用styleSheets 385

14.1.4 使用selectorText 388

14.1.5 修改样式 389

14.1.6 添加样式 390

14.1.7 访问渲染样式 391

14.1.8 访问媒体查询 394

14.1.9 CSS 事件 395

14.2 CSS 尺寸 397

14.2.1 访问CSS 宽度和高度 397

14.2.2 把值转换为整数 397

14.2.3 使用offsetWidth 和offsetHeight 397

14.2.4 元素尺寸 397

14.2.5 视图尺寸 398

14.2.6 窗口尺寸 398

14.3 CSS 位置 398

14.3.1 窗口位置 398

14.3.2 相对位置 398

14.3.3 定位位置 398

14.3.4 设置偏移位置 398

14.3.5 设置相对位置 398

14.3.6 鼠标指针绝对位置 398

14.3.7 鼠标指针相对位置 398

14.3.8 滚动条位置 398

14.3.9 设置滚动条位置 399

14.4 CSS 显示 399

14.4.1 设置显隐效果 399

14.4.2 设置渐隐、渐显效果 399

14.5 CSS 动画 399

14.5.1 使用定时器 399

14.5.2 滑动 399

14.5.3 渐显 399

14.5.4 使用requestAnimationFrame 399

第15 章 JavaScript 通信 400

视频讲解:1 小时21 分钟

15.1 XMLHttpRequest1.0 基础 401

15.1.1 定义XMLHttpRequest 对象 401

15.1.2 建立XMLHttpRequest 连接 402

15.1.3 发送GET 请求 403

15.1.4 发送POST 请求 403

15.1.5 转换串行化字符串 405

15.1.6 跟踪状态 406

15.1.7 中止请求 407

15.1.8 获取XML 数据 407

15.1.9 获取HTML 文本 408

15.1.10 获取JavaScript 脚本 409

15.1.11 获取JSON 数据 409

15.1.12 获取纯文本 410

15.1.13 获取头部信息 411

15.2 XMLHttpRequest2.0 基础 411

15.2.1 请求时限 412

15.2.2 FormData 数据对象 412

15.2.3 上传文件 412

15.2.4 跨域访问 413

15.2.5 响应不同类型数据 413

15.2.6 接收二进制数据 413

15.2.7 监测数据传输进度 414

15.3 案例实战 414

15.3.1 接收ArrayBuffer 对象 415

15.3.2 接收Blob 对象 415

15.3.3 发送字符串 415

15.3.4 发送表单数据 415

15.3.5 发送二进制文件 415

15.3.6 发送Blob 对象 416

15.3.7 跨域请求 416

15.3.8 设计文件上传进度条 416

15.4 跨文档消息传递 416

15.4.1 postMessage 基础 416

15.4.2 案例:设计简单的跨域通话 418

15.4.3 案例:设计跨域动态对话 418

15.4.4 案例:设计通道通信 418

15.5 WebSockets 通信 418

15.5.1 WebSocket 基础 418

15.5.2 使用WebSocketsAPI 420

15.5.3 在PHP 中建立socket 423

15.5.4 WebSocketsAPI 开发框架 424

15.5.5 案例:设计简单的“呼-应”通信 425

15.5.6 案例:发送JSON 对象 425

15.5.7 案例:使用Workerman 框架通信 426

15.5.8 案例:推送信息 426

第16 章 JavaScript 数据存储 427

视频讲解:1 小时40 分钟

16.1 HTTPCookie 428

16.1.1 写入cookie 信息 428

16.1.2 读取cookie 信息 430

16.1.3 修改和删除cookie 信息 431

16.1.4 附加cookie 信息 431

16.1.5 Http-Only Cookie 432

16.1.6 封装cookie 操作 433

16.1.7 案例实战 433

16.2 WebStorage 434

16.2.1 使用WebStorage 434

16.2.2 案例:设计登录页 436

16.2.3 案例:流量统计 436

16.3 WebSQLDatabase 437

16.3.1 使用WebSQLDatabase 437

16.3.2 案例:设计登录页 442

16.3.3 案例:设计留言板 442

16.4 indexedDB 442

16.4.1 建立连接 442

16.4.2 更新版本 444

16.4.3 新建仓库 446

16.4.4 新建索引 447

16.4.5 使用事务 449

16.4.6 保存数据 450

16.4.7 访问数据 451

16.4.8 访问键值 451

16.4.9 访问属性 451

16.5 案例:设计录入表单 451

第17 章 JavaScript 图形设计 452

视频讲解:2 小时15 分钟

17.1 使用canvas 453

17.2 绘制图形 455

17.2.1 矩形 455

17.2.2 路径 456

17.2.3 直线 457

17.2.4 圆弧 458

17.2.5 二次方曲线 460

17.2.6 三次方曲线 461

17.3 定义样式和颜色 462

17.3.1 颜色 462

17.3.2 不透明度 463

17.3.3 实线 464

17.3.4 虚线 465

17.3.5 线性渐变 465

17.3.6 径向渐变 467

17.3.7 图案 467

17.3.8 阴影 468

17.3.9 填充规则 469

17.4 图形变形 470

17.4.1 保存和恢复状态 470

17.4.2 清除画布 471

17.4.3 移动坐标 472

17.4.4 旋转坐标 473

17.4.5 缩放图形 474

17.4.6 变换图形 475

17.5 图形合成 476

17.5.1 合成 476

17.5.2 裁切 477

17.6 绘制文本 477

17.6.1 填充文字 477

17.6.2 轮廓文字 478

17.6.3 文本样式 478

17.6.4 测量宽度 479

17.7 使用图像 479

17.7.1 导入图像 479

17.7.2 缩放图像 481

17.7.3 裁切图像 482

17.7.4 平铺图像 482

17.8 像素操作 483

17.8.1 认识ImageData 对象 483

17.8.2 创建图像数据 483

17.8.3 将图像数据写入画布 483

17.8.4 在画布中复制图像数据 484

17.8.5 保存图片 484

17.9 Path2D 对象 485

17.9.1 Canvas2DAPI 新功能 486

17.9.2 使用Path2D 对象 486

17.10 案例实战 486

17.10.1 设计基本动画 486

17.10.2 颜色选择器 486

17.10.3 给图像去色 486

17.10.4 缩放图像和反锯齿处理 486

17.10.5 设计运动动画 487

17.10.6 设计地球和月球公转动画 487

第18 章 JavaScript 文件操作 488

视频讲解:1 小时24 分钟

18.1 FileList 489

18.2 Blob 490

18.2.1 访问Blob 490

18.2.2 创建Blob 491

18.2.3 截取Blob 493

18.2.4 保存Blob 494

18.3 FileReader 495

18.3.1 读取文件 495

18.3.2 事件监测 497

18.4 ArrayBuffer 和ArrayBufferView 498

18.4.1 使用ArrayBuffer 499

18.4.2 使用ArrayBufferView 499

18.4.3 使用DataView 500

18.5 FileSystemAPI 503

18.5.1 认识FileSystem API 503

18.5.2 访问FileSystem 503

18.5.3 申请配额 505

18.5.4 新建文件 508

18.5.5 写入数据 510

18.5.6 添加数据 510

18.5.7 读取数据 510

18.5.8 复制文件 511

18.5.9 删除文件 511

18.5.10 创建目录 511

18.5.11 读取目录 512

18.5.12 删除目录 512

18.5.13 复制目录 512

18.5.14 重命名目录 512

18.5.15 使用filesystem:URL 513

18.6 案例:设计资源管理器 513

第19 章 案例实战 514

19.1 设计折叠面板 515

19.2 设计计算器 515

19.3 设计日历 515

19.4 设计验证插件 515

19.5 设计俄罗斯方块 515

附录 517

附录A ECMAScript 6 517

附录B 使用SVG 517

附录C CORS 通信 517

附录D 同源策略 518

附录E Mutation Observer API 518

附录F JavaScript 编程风格 518