web学习---JavaScript---笔记(三)

BOM

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

BOM比DOM更大

在这里插入图片描述

window对象

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

  1. 它是JS访问浏览器窗口的一个接口
  2. 它是一个全局对象。定义在全局作用域中的变量、函数都会变成window对象的属性和方法

原来,JS需要写在元素后面,因为代码是从上而下执行的
现在,有了window可以将JS写在元素前面

使用:window.onload = function(){},其实窗口(页面)加载事件,当文档内容完全加载完成会触发该事件,调用的处理函数

	<body>
		<script type="text/javascript">
			window.onload = function(){
				var btn = document.querySelector('button');
				btn.onclick = function(){
					alert("弹窗");
				}
			}
		</script>
		<button type="button">按钮</button>
	</body>

此时,script标签可以写在任意地方,即使是head标签也可以

注意:window.onload传统注册事件方式只能写一次,如果有多个,会以最后一个为准

而使用window.addEventListener则没有限制个数

	<body>
		<script type="text/javascript">
			window.addEventListener('load', function(){
				var btn = document.querySelector('button');
				btn.onclick = function(){
					alert("弹窗1");
				}
			})
			
			window.addEventListener('load', function(){
				alert("弹窗2");
			})
		</script>
		<button type="button">按钮</button>
	</body>

则可以写多个

			document.addEventListener('DOMContentLoaded', function(){
				alert(33);
			})

该方法在DOM元素加载完就可以执行
而window.load必须等页面所有内容(包括DOM元素、图片、css等)加载完毕才执行,没有上面这个方法快

调整窗口大小事件

当窗口大小发生变化时,就会调用:

window.onresize = function(){};
window.addEventListener("resize", function(){});

定时器

window对象提供了两个定时器:

  • setTimeout()
  • setInterval()

setTimeout()定时器

window.setTimeout(调用函数, [延迟的毫秒数]);
setTimeout(function(){})window可省略;延迟时间也可以省略,省略代表0,立即执行

setInterval()定时器

window.setInterval(调用函数, [延迟的毫秒数]);//每隔一段时间,就去调用一次
setInterval(function(){})window可省略

setTimeout()停止定时器

window.clearTimeout(timeout ID)window可省略,timeout ID就是前面的定时器,赋值给一个变量得来的
window.clearInterval(timeout ID)window可省略,timeout ID就是前面的定时器,赋值给一个变量得来的

JS队列

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

同步任务:都在主线程上执行
异步任务:JS的异步是通过回调函数实现的

一般而言,异步任务有以下三种:

  1. 普通事件,如click、resize等
  2. 资源加载,如load、error等
  3. 定时器
    异步任务相关 回调函数 添加到 任务队列中(任务队列也称为消息队列)

JS执行机制

  1. 先执行 执行栈 中的同步任务
  2. 遇到异步任务放入任务队列中
  3. 执行栈中的所有同步任务执行完毕,系统按次序读取任务队列中的异步任务,然后执行

location对象

window对象提供了location属性,用于获取或设置 窗体的URL,并且可以用于解析URL。
因为这个属性返回的是一个对象,因此也被称为location对象
在这里插入图片描述

navigator 对象

navigator对象包含有关浏览器的信息,最常用的是userAgent,该属性可以返回由客户机发生服务器的user-agent头部的值
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36

history对象

history.back()后退
history.forward()前进
history.go(参数)n前进n个界面,-n后退n个界面


PC端网页特效

元素偏移量offset系列

offset概述

offset其实就是偏移量,使用offset系列相关属性可以 动态的 得到该元素的位置(偏移)、大小等
可以获取:

  • 元素距离带有定位父元素的位置
  • 元素自身的大小(宽高)

注意:返回的数值都不带单位

在这里插入图片描述

offset获取元素大小位置
style更改元素大小位置

例子:获取鼠标点击时,在div里面的坐标

获取鼠标在页面中的坐标(e.pageX, e.pageY)
获取盒子在页面中的坐标(e.offsetLeft, e.offsetRight)

例子:鼠标拖拽元素
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" lang="en">
		<title></title>
		
		<style type="text/css">
			
			.box{
				position: absolute;
				background-color: pink;
				width: 200px;
				height: 200px;
			}
		</style>
		
	</head>
	<body>
		<div class="box"></div>
		<script type="text/javascript">
			var box = document.querySelector('.box');
			
			//在鼠标按下的时候,获取鼠标的x,y
			document.addEventListener('mousedown', function(e){
				
				var mouseX = e.pageX - box.offsetLeft;
				var mouseY = e.pageY - box.offsetTop;
				
				var move = function(e){
					box.style.left = e.pageX - mouseX + 'px'
					box.style.top = e.pageY - mouseY + 'px'
				}
				
				//移动,和移除,都是在点击的情况下执行的
				
				//在鼠标移动的时候,box也移动
				document.addEventListener('mousemove', move);
				
				//在鼠标放开的时候,移除
				//首先,监听鼠标不点击
				document.addEventListener('mouseup', function(){
					//在不点击的时候,移除move监听
					document.removeEventListener('mousemove', move);
				})
			});
		</script>
	</body>
</html>

元素偏移量client系列

通过client系列的相关属性,动态的得到该元素的 边框大小、元素大小
在这里插入图片描述
立即执行函数:
(function() {})()

(function(){}());

带参数:

(function(a, b){
	console.log(a + b);
})(1, 2)

元素偏移量scroll系列

利用该相关属性,可以动态的得到该元素的大小、滚动距离等

在这里插入图片描述
mouseover鼠标经过自身、子盒子都会触发
mouseenter鼠标经过自身会触发,经过子盒子不会触发,其不会冒泡。离开的时候,搭配mouseleave,也不会冒泡

动画函数封装

动画实现原理

核心原理:通过定时器setInterval()不断移动盒子位置


未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值