BOM
Browser Object Model 浏览器对象模型, 提供与浏览器窗口进行交互的方法
它使 JavaScript 有能力与浏览器进行“对话”。 BOM 最主要的对象就是 window 对象
全局变量和全局方法都是 window 的属性和方法, 实际使用的时候书写可以忽略 " window. "
var a = 100;console.log(a,window.a) function foo(){ console.log(a) }foo()window.foo()
window 对象
核心的窗口对象, 随着网页打开自动创建
常用的方法
window.innerHeight //浏览器窗口的内部高度window.innerWidth // 浏览器窗口的内部宽度 window.open() // 打开新窗口 详情见下面window.close() // 关闭当前窗口 无参数window.opener // 返回对创建该窗口的 Window 对象的引用 (可读可写)window.alter() // 警告框, 无返回值 只用于提示信息 只有确认按钮window.prompt() // 输入框, 带返回值的弹窗, 可输入, 提供两个按钮 确认取消 window.confirm() // 确认框, 返回布尔值, 提供两个按钮 确认取消
open 详解
window.open(URL,name,features,replace)
参数
- URL: 可选,新开页面的 URL
- name: 可选,声明窗口名称
- features: 可选,制定窗口特性
常用 replac 参数
- height=100 窗口高度;
- width=400 窗口宽度;
- top=0 窗口距离屏幕上方的象素值;
- left=0 窗口距离屏幕左侧的象素值;
- replace 可选,布尔值,规定浏览历史搜否替换覆盖 window.opener
ps
对一个通过 window.open 打开的窗口,通过 window.opener 调用父窗口的方法.
可直接通过 window.opener.foo({
{ yangtuo }} 在子页面通过参数的将数据传递给父页面调用父页面的参数 .从而可以实现子页面和父页面之间的数据传递.
常用属性
history
功能 保存当前窗口访问过的 URL .
属性
length 当前窗口访问过的数量 ( 只要 URL 不同都会被记录 不是访问次数, 要注意区分 ).
方法
back() 返回前一个 URL ( 后退按钮 ).
forward() 前进到下一个 URL ( 前进按钮 ).
go(n) 参数可取正负值, 值代表几个 URL , 正 - 前进, 负 - 后退 .
location
功能 保存或操作地址栏的URL
方法
reload( false / true ) 重载页面, 设置为 false 从缓存中加载页面, 为 true 表示强制从服务器重载
定时器方法
间隔调用 ( 周期性定时器 )
每隔一段时间就执行一次代码
var timeID = setInterval(function,interval)
参数
function 需要执行的操作
interval 指定时间间隔 单位 ms
返回值 返回定时器 ID 彼此区分
关闭间歇调用定时器
clearInterval(timeID)
超时调用 ( 一次性定时器 )
等待一段时间后执行一次代码
var timeID = setTimeout(function,timeout)
用法参数返回值同上
关闭超时调用计时器
clearTimeout(timeID)
定时器关闭处理
超时调用的内存占用较少.这里的关闭方法只是提供了一个关闭途径
但是间歇调用的不间断调用是会对内存造成影响因此需要考虑何时关闭
定时器实例
Title
var i = 5; var timerID = setInterval(function () { if (i == 1) { clearInterval(timerID) } console.log(i); i-- },1000)
var res = confirm("是否关闭当前窗口");if (res) { setTimeout(function () { window.close() }, 3000);}
DOM 对象
Document Object Model,提供操作文档(html元素)的方法,核心为document对象
节点概念
将文档中所有的内容(标签,文本,标签属性,注释)封装成节点对象
分类
- 元素节点
- 属性节点
- 文本节点
- 注释节点
- 文档节点 -> document
节点查找
查找到多个节点的时候会以列表的形式返回
可以用索引的方式取出内部元素, 当然也可以切片
直接查找
document.getElementById("") // 根据ID获取一个标签document.getElementsByClassName("") // 根据class属性获取document.getElementsByTagName("") // 根据标签名获取标签合集 document.getElementsByName("") // 根据 表单控件的 name 属性值获取
间接查找(无括号)
通过一个已知节点, 基于位置或者亲属关系来间接查找
A.parentElement //找父节点标签元素A.children // 找所有子标签A.firstElementChild // 第一个子标签元素A.lastElementChild // 最后一个子标签元素A.nextElementSibling // 下一个兄弟标签元素A.previousElementSibling // 上一个兄弟标签元素
节点创建 / 删除 / 替换
创建节点
创建后是不存在的, 必须要找位置安置
document.createElement("B"); // 创建一个 B 标签
添加节点
添加节点必须基于父节点来操作
A.appendChild(B) // 在 A 的里面作为 A 的最后一个子节点添加 BA.insertBefore(B,C) // 在 A 里面的 子标签C 前面添加 B
删除节点
节点的删除只能有父节点来操作
A.document.removeChild(B) // 从 A 标签里面移除 B 标签
替换节点
节点的替换同样只能由父节点来操作
A.replaceChild(B, C) // 从 A 标签中将 C 标签替换成 B 标签
节点属性创建 / 删除
创建属性
自带的属性可以直接设置和取值
A.B = "C" // 为 A 创建 B 属性,值为 C
自定义属性
A.setAttribute("B", "C"); // A 节点添加 B 属性, B 属性值为 CA.getAttribute("B"); // 获取 A 标签的 B 属性值
删除属性
自定义,默认都可
A.removeAttribute("B") // 移除 A 节点的 B 属性
节点内容
innerText
A.innerText = "B" // 给 A 节点设置显示内容为 B
ps:
如果 A 有子标签.设置 A 内容后.会清除子标签只剩下一个文本 B
取值的时候只能取到子标签的内容
innerHtml
A.innerHtml = "p
" // 给 A 节点设置显示内容为 B
ps:
主要用于快速添加简单的标签
取值的时候可以取到子标签本身不仅仅是内容
value
只适用于 input, select, textarea
A.value // 获取A的值
节点样式操作
A.className // 获取所有样式类名(字符串)A.classList.remove("c1") // 删除指定类A.classList.add("c1") // 添加类A.classList.contains("c1") // 存在返回true,否则返回falseA.classList.toggle("c1") // 存在就删除,否则添加
A.style.backgroundColor="red" // 将 A 的背景颜色设置成红色
JS操作CSS属性的规律
1.对于没有中横线的CSS属性一般直接使用style.属性名即可。如:
- obj.style.margin
- obj.style.width
- obj.style.left
- obj.style.position
2.对含有中横线的CSS属性,将中横线后面的第一个字母换成大写即可(小驼峰)。如:
- obj.style.marginTop
- obj.style.borderLeftWidth
- obj.style.zIndex
- obj.style.fontFamily
3. 属性值中的单位不可省略. 比如 px
节点空间关系
parentsNode
获取父节点, 父元素
childNodes
获取子节点, 包含文本节点和元素节点
children
获取子节点数组, 只包含元素节点, 不包含文本节点
nextSibling
获取下一个兄弟节点
previousSibling
获取上一个兄弟节点
事件
事件类型
鼠标事件
onclick // 单击ondblclick // 双击onmousemove // 鼠标移动onmouseout // 鼠标移出onmouseover // 鼠标移入
键盘事件
onkeydown // 某个键盘按键被按下 ( 只要是按键都触发 )onkeypress // 某个键盘按键被按下 ( 今举行字符按键 )onkeyup // 某个键盘按键被松开
元素或者文档加载完毕
onload // 一张页面或一幅图像完成加载。
表单控件的按钮监听
oninput // 监听输入框的输入状态 ( 实时监听 )onchange // 监听表单控件的值发生变化onfocus // 监听文本框焦点状态onblur // 监听文本框失去焦点状态onsubmit // 监听提交状态
onselect // 在文本框中的文本被选中时发生
// onsubmit 事件由form 监听 , 点击提交按钮自动触发,// 检测表单数据是否可以发生, 允许给出返回值为 布尔值// true 表示可以提交, false 表示不可发送form.onsubmit = function () { if(uname.value.length == 0) { // 阻止提交 return false; } else { return true; }}
所有事件的实例
Title 标题
文本啦文本
事件绑定方式
内敛方式
点我
注意
this是实参,表示触发事件的当前元素。
函数定义过程中的ths为形参。
外部引入
点我
标准事件监听
btn.addEventListener("click",function(){},false)
参数
省略 on 前缀的事件名称
事件发生后执行函数
设置事件传递机制 默认 false
事件传递
事件由多个元素同时监听
事件发生后的传递顺序
默认冒泡传递, 从里向外逐一触发
设置为 true 表示捕获, 从外向内触发执行
window.onload
绑定事件的时候,要等到文档加载完毕
对于不存在的元素无法绑定事件
window.onload事件在文件加载过程结束时触发
位于DOM中的所有对象都被读取完毕时才会触发
注意
.onload()函数存在覆盖现象
事件对象
事件对象伴随事件触发自动创建,存储所有与当前事件相关的信息。
作为参数自动传入事件处理函数中,只需要接收后进行相关操作
div.onclick = function (evt){ };
相关属性
1. 鼠标事件对象
- offsetX
- offsetY
2. 键盘事件对象
- key : 获取按键名称,区分字母的大小写
- which:获取按键编码。
- onkeydown事件中,功能按键对应有键盘编码,字符按键一律返回大写字母的ASC码
- onkeypress事件中,区分大小写字母的ASC码
3. target/srcElement
事件对象的属性,用来获取事件的触发对象
window.onload = function (){ var div = $("div"); div.onclick = function (event){ //鼠标在元素坐标系中的位置 console.log(event.offsetX,event.offsetY); //鼠标在页面坐标系中的位置 console.log(event.clientX,event.clientY); //鼠标在屏幕坐标系中的位置 console.log(event.screenX,event.screenY); console.log(event.target); }; onkeydown = function (e){ //console.log(e); console.log("onkeydown: ",e.key,e.which); console.log(event.target); }; onkeypress = function (e){ console.log("onkeypress: ",e.key,e.which); }};