0
点赞
收藏
分享

微信扫一扫

JavaScript学习10

玉新行者 2022-03-31 阅读 48

BOM

BOM是浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是window

BOM由一系列对象构成,每个对象都提供了很多方法和属性

BOM缺乏标准

window对象是浏览器的顶级对象,它具有双重角色

首先它是JS访问浏览器窗口的一个接口,并且它也是一个全局对象,定义在全局作用域中的变量、函数都会变成window对象的变量和函数

window对象常见对象

窗口加载事件

window.onload是窗口加载事件,当文档内容完全加载完成才会触发该事件

有了window.onload就可以把JS代码写到页面元素上方。不过使用传统事件注册方法时,window.load只能使用一次,如果有一个,会以最后一个window.onload为准。要用多次,则用事件监听方式

document.addEventListener('DOMContentLoaded',function(){})是仅当DOM加载完成(不包括样式表、图片、flash等)后触发事件

其好处是当页面图片较多时,改善用户体验,不过注意,需要浏览器IE9以上

调整窗口大小事件

window.onresize是调整浏览器窗口大小加载事件,当触发时会调用处理函数

常用这个事件完成响应式布局。

window.innerWidth表示当前屏幕宽度

定时器

setTimeout()

setTimeout(调用函数,[延迟的毫秒数])

setTimeout()用于设置一个定时器,该定时器在定时器到期之后执行调用函数,延迟时间单位是毫秒,可以省略,默认为0,这个调用函数可以直接写函数,也可以写函数名

页面中可能有很多定时器,可以给不同定时器设定不同的标识符

setTimeout()也是回调函数,需要等待时间,时间到了才执行的被称为回调函数

例子:五秒之后自动消失的图片

	<body>
		<script>
			window.onload=function(){
				var pic=document.querySelector('img');
				setTimeout(function(){
					pic.style.display='none';
				},5000);
			}
		</script>
		<img src="img/t1.jpg" />
	</body>

可以使用window.clearTimeout(定时器标识符)停止计时器

setInterval()

setInterval(调用函数,[间隔的毫秒数])

重复调用一个函数,每隔一段时间就调用一次回调函数,,间隔时间单位是毫秒,可以省略,默认为0,调用函数可以直接写函数,也可以写函数名,页面中可能有很多定时器,可以给不同定时器设定不同的标识符

注意,第一次执行时也有间隔毫秒数,因此刚刚刷新页面会有空白,所以可以采用封装函数的方式,然后先调用一次函数,防止刷新时间页面有空白

实例:倒计时

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			div{
				width: 230px;
				margin: 100px auto;
			}
			span{
				width: 40px;
				height: 40px;
				background-color: #000000;
				display: inline-block;
				color: white;
				text-align: center;
				line-height: 40px;
			}
		</style>
	</head>
	<body>
		<div>
			<span class='day'>0</span>天
			<span class='hour'>1</span>:
			<span class='minute'>2</span>:
			<span class='s'>3</span>
		</div>
		<script type="text/javascript">
			var d=document.querySelector('.day');
			var h=document.querySelector('.hour');
			var m=document.querySelector('.minute');
			var s=document.querySelector('.s');
			var date2=new Date('2022-3-31 12:0:0');
			time();
			setInterval(time,1000);
			function time(){
				var date1=new Date();
				var t1=date1.getTime();
				var t2=date2.getTime();
				var t=(t2-t1)/1000;
				var day=parseInt(t/60/60/24);
				var hour=parseInt(t/60/60%24);
				var m1=parseInt(t/60%60);
				var s1=parseInt(t%60);
				h.innerHTML=hour;
				d.innerHTML=day;
				m.innerHTML=m1;
				s.innerHTML=s1;
			}
			
		</script>
	</body>
</html>

可以用window.clearInterval(计时器名字)清除该计时器

this

一般情况下this指向调用它的对象。在全局作用域或普通函数中,this指向全局对象window,注意定时器中的this指向window。

方法调用中this指向调用的对象

构造函数中this指向构造函数的实例

JS执行队列

JS是单线程语言,同一时间只能做一件事

为了解决因此出现的一些效率问题,HTML5提出了Web Worker标准,允许JavaScript脚本创建多个线程。于是JS中出现了同步和异步

同步是前一个任务结束之后再执行下一个任务

异步是在做一件事时同时做另一件事

同步任务

同步任务都在主线程上执行,形成一个执行栈

异步任务

JS的异步是通过回调函数实现的,有三种类型:普通事件(click、resize)、资源加载(load、error)、定时器(setTimeout、setInterval)

异步任务放在任务队列中

JS执行机制

先执行执行栈中的同步任务

异步任务放入任务队列中

所有同步任务执行完之后,到任务队列中依次读取异步任务,结束其等待状态,让其进入执行栈,执行

由于主线程不断重复获得任务、执行任务、再获取任务、再执行,这种机制被称为事件循环

location对象

window对象提供了一个location属性以用于获取和设置窗体的URL,并且可以用于解析URL。因为这个属性返回的是一个对象,所以也可以将其称之为location对象

 可以通过修改location.href将网页设置为另一个路径的网页

 location.assign()可以实现后退页面

navigator对象

navigator对象包含有关浏览器的信息,它有很多属性,最常用的是userAgent,该属性可以返回由客户机发送给服务器的user-agent头部的值,其中包含浏览器的相关信息

history对象

history对象与浏览器历史记录进行交互,该对象中包含用户(在浏览器窗口中)访问过的URL

 history对象一般很少用,但会在一些OA办公系统中看到

举报

相关推荐

0 条评论