DOM&BOM
1.滚轮事件
onmousewheel(onwheel)鼠标滚动的事件,会在滚轮滚动时触发
判断鼠标滚轮滚动的方向
event.wheelDelta 可以获取鼠标滚轮滚动的方向
向上滚120 向下滚-120
wheelDelta这个值我们不看大小只看正负
wheelDelta这个属性火狐中不支持
在火狐中使用event.detail来获取滚动的方向
向上滚-3 向下滚3
当滚轮滚动时,如果浏览器有滚动条,该滚动条会随之滚动
这是浏览器的默认行为,如果不希望发生,则可以取消默认行为
return false
使用addEventlistener()方法绑定响应函数,取消默认行为不能使用return false
需要使用event来取消默认行为 event.preventDefault();
但是IE不支持event.preventDefault(); 如果调用会报错
2.键盘事件
键盘事件
onkeydown 按键被按下
对于onkeydown来说,如果一直按住某个键不松手,事件会一直触发
当onkeydown连续触发时,第一次和第二次之间间隔稍微长一点
这种设计是为了防止误操作的发生
onkeyup 按键被松开
键盘事件一般都会绑定给一些可以获取焦点的对象或者是document
可以通过keyCode来获取按键的编码,通过它可以判断哪个按键被按下
除了keyCode,事件对象中还提供了几个属性
altKey
ctrlKey
shiftKey
这三个用来判断alt ctrl 和 shift是否被按下
如果按下则返回true,否则返回false
3.BOM
BOM
浏览器对象模型
BOM可以使我们通过JS来操作浏览器
在BOM中为我们提供了一组对象,用来完成对浏览器的操作
BOM对象:
window
代表的是整个浏览器的窗口,同时window也是网页中的全局对象
navigator
代表的当前浏览器的信息,通过该对象可以来识别不同的浏览器
location
代表当前浏览器的地址栏信息,通过location可以获取地址栏信息,或者操作浏览器跳转页面
history
代表浏览器的历史记录,可以通过对象来操作浏览器的历史记录
由于隐私原因,该对象不能获取到具体的历史记录,只能操作浏览器向前或向后翻页
而且该操作只在当次访问时有效
screen
代表用户的屏幕信息,通过该对象可以获取到用户的显示器的相关信息
这些BOM对象在浏览器中都是作为window对象的属性保存的,
可以通过window对象来使用,也可以直接使用
navigator
代表的当前浏览器的信息,通过该对象可以来识别不同的浏览器
由于历史原因,Navigator对象中的大部分属性都已经不能帮助我们识别浏览器了
一般我们只会使用userAgent来判断浏览器的信息
userAgent是一个字符串,这个字符串中包含有用来描述浏览器信息的内容
不同的浏览器有不同的userAgent
如果通过userAgent不能判断,还可以通过一些浏览器中特有的对象,来判断浏览器的信息
比如:ActiveXObject
if("ActiveXObject" in window){
}
History
对象可以用来操作浏览器向前或向后翻页
length属性
可以获取当前访问的连接数量
back()方法
可以用来回退到上一个页面,作用和浏览器的回退按钮一样
forward()方法
可以用来跳转到下一个页面,作用和浏览器的前进按钮一样
go()方法
可以用来跳转到指定页面,它需要一个整数作为参数
1表示向前跳转一个页面,-1表示向后跳转一个页面
Location
该对象中封装了浏览器的地址栏信息
如果直接打印location,则可以获取到地址栏的信息(当前页面的完整路径)
如果直接将location属性修改为一个完整的路径或相对路径
则我们页面会自动跳转到该页面,并且会生成相应的历史记录
方法:
assign()
用来跳转到其他页面,作用和直接修改location一样
reload()
用于重新加载当前页面,作用和刷新按钮一样
如果在方法中传递一个true作为参数,则会强制情况缓存刷新页面
relpace()
可以使用一个新的页面替换当前页面,调用完毕也会跳转页面
不会生成历史记录
4.定时调用
setInterval()
定时调用:可以将一个函数每隔一段时间执行一次
参数:
1.回调函数,该函数会每隔一段时间被调用一次
2.每次调用间隔的时间,单位是毫秒
返回值:
返回一个Number类型的数据
这个数字用来作为定时器的唯一标识
clearInterval()可以用来关闭一个定时器
方法中需要一个定时器的标识作为参数,这样将关闭标识对应的定时器
clearInterval()可以接收任意参数
如果参数是一个有效的定时器的标识,则停止对应的定时器
如果参数不是一个有效的标识,则什么也不做
我们每点击一次按钮,就会开启一个定时器
点击多次就会开启多个定时器,这就导致图片的切换速度过快
并且我们只能关闭最后一次开启的定时器
所以在开启定时器之前,需要将当前元素上的其他定时器关闭
5.延时调用
setTimeout()
延时调用:一个函数不马上执行,而是隔一段时间以后再执行,而且只会执行一次
延时调用和定时调用的区别,定时调用会执行多次,而延时调用只会执行一次
延时调用和定时调用实际上是可以互相代替的,在开发中可以根据自己的需要去选择
使用clearTimeout()来关闭延时调用
6.类的操作
通过style属性来修改元素的样式,每修改一个样式,浏览器就需要重新渲染一次页面,这样的执行的性能是比较差的,而且这种形式当我们要修改多个样式时也不太方便。
我们可以通过修改元素的class属性来间接修改样式,这样一来我们只需要修改一次即可同时修改多个样式浏览器只需要重新渲染一次页面,性能比较好。
这种方式可以使表现和行为进一步的分离
function addClass(obj , cn) {
//检查obj中是否含有cn
if(hasClass(obj, cn)){
}else{
obj.className += " "+cn
};
};
/*
判断一个元素中是否含有指定的class属性值
如果有则返回true,没有则返回false
*/
function hasClass(obj , cn) {
var reg = new RegExp("\\b"+cn+"\\b");
return reg.test(obj.className)
}
/*
删除一个元素中指定的class属性
*/
function removeClass(obj , cn) {
//创建一个正则表达式
var reg = new RegExp("\\b"+cn+"\\b");
obj.className = obj.className.replace(reg,"");
}
/*
toggleClass可以用来切换一个类
如果元素中具有该类,则删除
如果元素中没有该类,则添加
*/
function toggleClass(obj , cn) {
//判断obj中是否含有cn
if(hasClass(obj , cn)){
removeClass(obj , cn);
}else{
addClass(obj , cn);
};
};
7.JSON
JSON
JS中的对象只有JS自己认识,其他语言都不认识
JSON就是一个特殊格式的字符串,这个字符串可以被任意的语言所识别
并且可以转换为任意语言的对象,JSON在开发中主要用来数据的交互
JSON (JavaScript Object Notation JS对象表示法)
JSON和JS对象的格式一样,只不过JSON字符串中的属性名必须加双引号
其他的和JS语法一致
JSON分类:
1.对象{}
2.数组[]
JSON中允许的值
1.字符串
2.数值
3.布尔值
4.null
5.对象
6.数组
将JSON字符串转换为JS中的对象
在JS中,为我们提供了一个工具类,JSON
这个对象可以帮助我们将一个JSON转换为JS对象,也可以将一个JS对象转换为JSON
JSON --> JS对象
JSON.parse()
可以将JSON字符串转换为JS对象
它需要一个JSON字符串作为参数,会将该字符串转换为JS对象并返回
JS对象 --> JSON
JSON.stringify()
可以将一个JS对象转换为JSON字符串
需要将一个js对象作为参数,会返回一个JSON字符串