JavaScript权威指南笔记(下)- 客户端javascript

web浏览器中的javascript

在html中嵌入javascript

在script标签里面如果有<、&,会被当成xml标记,需要使用如下写法:

window对象

浏览器定位与导航

载入新的文档

  • location.assign()
  • location.replace()
  • location.reload() 刷新

浏览历史

  • history.back()
  • history.forward()
  • history.go()

浏览器和屏幕信息

navigator:{
   appName:,
   appVersion:,
   userAgent:,
   platform:,
   *onLine:,
   *geolocation:,
   *javaEnabled:,
   *cookieEnable:,
}
// 星号为未标准化

错误处理

window.onerror

打开和关闭窗口

  • window.open()
  • window.open().opener
  • window.close()

窗体之间的关系

  • 外部获取iframe内容,iframe.contentWindow
  • iframe内部获取iframe,window.frameElement
  • window.frames引用自身包含的窗口或窗体的子窗体

脚本化文档

选取文档元素

  • getElementById
  • getElementByName
  • getElementByTagName
  • getElementByClassName
  • querySelectorAll 接受css选择器
  • querySelector 返回第一个匹配的元素

文档结构和遍历

作为节点树的文档

  • parentNode
  • childNodes
  • firstChild,lastChild
  • nextSibling,previoursSibling
  • nodeType
  • nodeValue
  • nodeName

作为元素树的文档

  • firstElementChild,lastElementChild
  • nextElementChild,previoursElementChild
  • childElementCount

获取和设置非标准HTML属性

  • getAttribute()
  • setAttribute()
  • hasAttribute()
  • removeAttribute()

操作来自其他命名空间中属性的xml文档,可以使用如下方法,第一参数为标识命名空间的uri,第二个为属性的本地名字

  • getAttributeNS()
  • setAttributeNS()
  • hasAttributeNS()
  • removeAttributeNS()

作为html的元素内容

  • insertAdjacentHTML() 在指定元素相邻位置插入标记,第一个参数为位置(beforebegin、afterbegin、beforeend,afterend),第二个参数为插入的标记

作为纯文本的元素内容

  • node.textContent 读取或者获取文本内容,ie使用innerText

创建、插入和删除节点

创建节点

  • createElement 创建Element节点
  • createTextNode 创建文本节点
  • cloneNode 复制节点
  • importNode

插入节点

  • Node.appendChild
  • Node.insertBefore

删除和替换节点

  • removeChild
  • replaceChild

文档和元素的几何形状和滚动

????????

html表单

表单和元素的属性

  • type
  • form
  • name
  • value

方法:

  • reset()
  • submit()

表单和元素的事件处理程序

不会被reset()和submit()触发,仅被按钮触发

  • onsubmit
  • onreset

可以通过在事件中返回false来阻止默认事件执行

其他文档属性

  • cookie
  • domain
  • lastModified
  • location
  • referrer
  • title
  • URL
  • document.writr()方法

查询选取的文本

window.getSelection()

可编辑内容

  • 元素属性contenteditable
  • Document的designMode属性为on,整个文档可以编辑

执行元素编辑命令,execCommand()

脚本化CSS

CSS概览

层叠

CSS中的C代表层叠,有低到高顺序为:

  • web浏览器的默认样式
  • 文档的样式表
  • 每个html元素的style属性

事件处理

异步事件驱动编程模型

18.脚本化HTTP

Ajax:Asynchronous JavaScript and XML

实现Ajax和Comet方式:

  • img标签的src
  • iframe的src(跨域)
  • scritp(即JSONP,不跨域)
  • XMLHttpRequest对象

使用XMLHttpRequest

var request= new XMLHttpRequest();

http请求组成:

  • http请求方法或动作
  • 正在请求的url
  • 一个可选的请求头集合
  • 一个可选的请求主体

服务器返回的http响应组成:

  • 一个由数字和文字组成的状态码,标识请求成功或者失败
  • 一个响应头集合
  • 响应主体

指定请求

  • 调用open方法

第一个参数指定HTTP方法或者动作,第二个参数指定请求的URL

var request= new XMLHttpRequest();
var request.open('GET','data.csv');
  • 添加头部
var request.setRequestHeader('Conten-Type','text/plain') //设置头部

以下头部不能自己设置:

  • 发送请求
request.send(null);
// send参数为请求主体

取得响应

  • status和statusText以数字和文本形式返回HTTP状态码
  • getResponseHeader()和getAllResponseHeaders()查询响应头
  • responseText中获取文本形式的响应主体,responseXML中获取Document形式的响应主体
  • readyState属性标识响应状态:

  • readystatechange绑定事件处理程序,readyState改变均会触发此事件,也可以使用addEventListener

同步响应

open的第三个参数传false,将使用同步响应,此时不需要事件处理程序

响应编码

request.overrideMimeType("text/plain;charset=utf-8")

HTTP进度事件

  • 调用send时触发loadstart()
  • 加载服务器响应时,触发progress
  • 超时触发timeout()
  • 中止触发abort()
  • 错误触发error()

progress常用属性:

  • loaded:目前传输的字节数
  • total:整体字节长度

中止请求和超时

  • abort()

跨域HTTP请求

  • CORS:跨域资源共享

借助

绘制线段和填充多边形

c.beginPath() //开始一条新路径
c.moveTo(100,100) //从(100,100)开始定义一条新的子路径
c.lineTo(200,200) //从(100,100)到(200,200)绘制一条线段
c.fill() // 填充区域
c.stroke() // 勾勒线段
c.closePath()  // 关闭路径,即将终点和起点连接起来
非零绕数原则

图形属性


  • save()将当前图形状态压入用于保存状态的栈上
  • restore() 从栈中弹出并恢复最近一次保存的状态

画布的尺寸和坐标

  • 尺寸:canvas元素的width和height属性和画布对象的宽度高度决定画布的尺寸
  • 坐标:画布左上角为原点

坐标系转换

当前变换矩阵:定义画布的当前坐标系

绘制和填充曲线

矩形

  • fillRect()
  • stokeRect()
  • clearRect()
  • rect()

颜色、透明度、渐变以及图案

  • strokeStyle、fillStyle
  • globalAlpha
  • 利用createPattern()方法填充图案
var image = document.getElementById('myimage')
c.fillStyle=c.createPattern(image,'repeat')
// 第一个参数指定填充的图案,可以是img元素(包括通过Image构造函数创建)、canvas元素、video元素;第二个参数定义平铺方式
  • 利用CanvasGradient对象创建渐变

线段绘制相关的属性

  • lineWidth:默认为1,任意正数,小于1的小数时绘制半透明
  • lineCap:封顶
  • lineJoin

文本

fillText()/strokeText():

  • 第一个参数为文本内容
  • 第二个和第三个参数分别为绘制X、Y坐标
  • textAlign/textBaseline

  • 第四个参数指定显示宽度,如果文本溢出则会缩放画布或者采用更窄更小的字体
  • 在绘制前可以通过measureText()度量文本宽度

裁剪

clip()

阴影

  • shadowColor:颜色
  • shadowOffsetX、shadowOffsetY偏移量
  • shadowBlur模糊度

图片

drawImage():

  • 第一个参数为图片源,可以是img元素(包括通过Image构造函数创建)、canvas元素、video元素
  • 第二个和第三个参数分别为绘制X、Y坐标
  • 如果传递5个参数,剩余两个指定宽高
  • 如果传递9个参数,2~5参数指定源矩形区域,6~9指定目标矩形区域

toDataURL(),画布元素自身的方法,提取成一张图片,同源限制

  • 第一个参数指定MIME类型,默认png

合成


像素操作

命中检测

  • isPointInPath() 指定点是否在路径上
  • getImageData() 检测指定点是否已绘制

HTML5 API

地理位置

navigator.geolocation

navigator.geolocation.getCurrentPosition() // 获取当前位置,异步
navigator.geolocation.wathcPosition() // 获取并监听当前位置,改变触发回调,异步
navigator.geolocation.clearWatch() //停止监听 

历史记录管理

  • location.hash、hashchange
  • history.pushState()、popstate、history.replaceState()

跨域消息传递

postMessage(data数据,url目标窗口源),触发目标窗口window.onmessage,事件对象属性:

  • data:内容
  • source:消息来源window
  • origin:消息来源url

Web Worker

Worker对象

let worke= new Worker('./worker.js') // 创建worker实例
// 如果地址是绝对地址,那么受同源策略限制
worke.postMessage(data) // 将数据传递(结构性复制)给worker

// 在worker对象中接受消息
worke.onmessage=function(e){
    let data=e.data
}
// 捕捉错误
worke.onerror=function(e){
    console.log(e.filename)
    console.log(e.lineno)
}
// 也可以使用addEventListener和removeEventListener代替以上方法

worke.terminate() // 使用完关闭进程

worker作用域

创建的worker在一个全新的运行环境中,即WorkerGlobalScope全局对象,该对象有如下属性和方法:

  • onmessage=fn(e) 接受外部传来的数据
  • postMessage(data) 发送消息出去
  • close() 关闭当前worker
  • importScript(url1,url2...) 加载库代码 同步
  • self 自身引用
  • 计时器相关
  • location
  • navigator
  • 常用的事件目标方法,addEventLisitener、removeEventListener
  • onerror

类型化数组和ArrayBuffer

类数组对象,和常规数组区别:

  • 类型化数组元素均为数字,在创建时就决定了数组中数字的类型和大小(单位:位)
  • 类型化数组有固定长度
  • 在创建类型化数组时,数组中元素总是默认为0

一共有8种:

方法:

  • set() 将一个常规或者类型化数组复制到另外一个类型化数组中
let bytes=new Uint8Array(1024)
let pattern=new Uint8Array([0,1,2,3])
bytes.set(pattern)
bytes.set(pattern,4) // 4为偏移量
bytes.set([0,1,2,3],8)
  • subarray(start,end) 返回部分内容

DataView定义了8个set和get方法

Blob

是对大数据块的不透明引用或者句柄。表示二进制大对象

let blob= new BlobBuilder()
blob.append("data")
blob.size //字节大小
blob.type // MIME类型
blob.slice(0,1024,'text/plain')

读取blob

利用FileReader对象

文件系统API

let fs = requestFileSystemSync(PERSISTENT,1024*1024)
requestFileSystemSync(TEMPORARY,// 有效期
    50*1024*1024,// 大小:50MB
    function(fs){//fs为该文件系统对象 
    
    },function(err){

    
})

客户端数据库

  • webSQL 弃用
  • indexedDB 对象数据库
let indexedDB=window.indexedDB
let request=indexedDB.open('dbName')
request.onerror=function(err){}
request.onsuccess=function(){
    let db=request.result
}

web套接字

let socket=new WebSocket(url) // ws://或者wss://协议
socket.onopen=function(e){}
socket.onclose=function(e){}
socket.onerror=function(e){}
socket.onmessage=function(e){}
socket.send('hello')
socket.close()

你可能感兴趣的:(javascript)