BOM基础

BOM

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

window对象常见事件

窗口加载事件
1. onload
  • 当文档内容完全加载完成会触发该事件(包括图像、脚本文件、css文件等)
window.onload = function(){}
window.addEventListener("load",function(){});
2. DOMContentLoaded
  • 仅当DOM加载完成,不包括样式表、图片、flash等等。
  • 如果页面图片很多且庞大,用户访问到onload触发可能需要较长的事件,交互效果不好影响用户体验,此时用该事件比较合适。
调整窗口大小事件
  • 当窗口大小发生变化时触发。
  • 可以利用这个事件完成响应式布局。window.innerWidth:当前屏幕的宽度。
window.onresize = function(){}
window.addEventListener("resize",function(){});
定时器
1. window.setTimeout(调用函数,延迟的毫秒数)
  • 延迟时间可以省略,省略则默认为0。
  • 一个页面可能有很多个定时器,所以通常会给定时器加上标识符(名字)。
let timer1 = setTimeout(fun1,3000);
let timer2 = setTimeout(fun2,2000);
  • 清除/停止setTimeout()定时器,timeoutID:定时器名字
window.chearTimeout(timeoutID);
2. setInterval(回调函数,间隔的毫秒数)
  • 第一次执行setInterval时可能会存在页面空白,可以采用封装函数的方式,先调用一次该函数。
fun();
setInterval(fun,1000);
function fun(){.....};
  • 清除/停止setInterval()定时器,timeoutID:定时器名字
window.chearInterval(timeoutID);

this
  • 一般情况下,this最终指向的是调用它的对象。
  • 全局作用域或者普通函数中的this指向全局对象window(包括定时器)。
  • 方法调用中谁调用,this就指向谁
let f = {
    fun:function(){
        console.log('this');
    }
}
o.fun();  // this指向o
  • 构造函数中this指向构造函数的实例

JS执行机制
  • js最大的特点就是单线程,即所有任务都需要排队。如果JS执行的时间过长,容易导致页面的渲染不连贯,造成阻塞问题。
同步
  • 前一个任务结束后再执行后一个任务,程序的执行顺序与任务的排列顺序是一致的。
  • 同步任务:同步任务都在主线程上执行,形成一个执行栈。
异步
  • 在一个任务执行尚未结束的过程中去处理另一个任务,执行顺序与任务的排列顺序不一定一致。
  • 异步任务:js的异步是通过回调函数实现的,异步任务通常放在任务队列(消息队列)中,不在主线程执行栈,通常有以下三种:
  1. 普通事件,如click\resize等
  2. 资源加载,如load/error等
  3. 定时器,setInteral/setTimeout
执行机制
  • 先执行执行栈中的同步任务。
  • 异步任务放入任务队列。
  • 同步任务执行完毕后,系统按照次序读取任务队列中的异步任务,进入执行栈,开始执行。
  • 主线程不断地重复获得任务、执行任务,这种机制叫做事件循环(even loop)。
(function() {
    setTimeout(() => {
        console.log(0);
    });

    new Promise(resolve => {

        console.log(1);
        
        setTimeout(() => {
            resolve();
            Promise.resolve().then(() => {
                console.log(2);
                setTimeout(() => console.log(3));
                Promise.resolve().then(() => console.log(4));
            });
        });

        Promise.resolve().then(() => console.log(5));

    }).then(() => {

        console.log(6);
        Promise.resolve().then(() => console.log(7));
        setTimeout(() => console.log(8));

    });

    console.log(9);
})();

/* 
1 9 5 0 6 2 7 4 8 3
1.js的执行顺序,先同步后异步
2.异步中任务队列的执行顺序: 先微任务microtask队列,再宏任务macrotask队列
3.调用Promise 中的resolve,reject属于微任务队列,setTimeout属于宏任务队列
*/

location对象
  • window对象提供了一个location属性,用于获取或者设置窗体的url,并且可以用于解析url。该属性返回的是一个对象,所以也称为对象。
location对象属性返回值
location.href 获取或者设置整个url
location.host 返回主机名(域名)
location.port 端口号或空字符串
location.pathname 路径
location.search 参数
location.hash 片段,即#后面的内容,常见于链接、锚点
  • 例子:利用location.search实现不同页面的参数传递。
<!-- login.html页面这个表单的数据提交到index.html页面 -->
<form action="index.html">
	用户名:<input type="text" name="username">
	<input type="submit" value="登录">
</form>
	
 <!--index.html页面-->
let params =lacation.search.substr(1);//截取?后面的参数字符串
let username = params.split('=');  //拿到用户输入的参数名
location对象方法返回值
location.assign() 和href一样,可以跳转页面(重定向页面),记录浏览历史,可以后退页面
location.replace() 替换当前页面,因为不记录离市,所以不能后退页面
location.reload() 重新加载页面,相当于刷新或f5,如果参数为true则强制刷新

  • 包含有关浏览器的信息,最常用的是userAgent,该属性可以返回由客户机发送服务器的user-agent头部的值。

判断用户用哪个终端打开页面,实现跳转。

<!--一般由服务端去实现-->
if((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPa|ios|Android|Mobile|BlackBerry|IEMobile)/i))){
	window.lacation.href = "";   //移动端
}else{
	window.lacation.href = "";   //PC端
}

history对象
history对象方法作用
history.back() 后退功能
history.forward() 前进功能
history.go(参数) 前进后退功能,参数如果是1则前进1个页面,-1则后退1个页面

PC端网页特效
元素偏移量offset
  • 相关属性可以动态的得到该元素的位置(偏移)、大小等
offset系列属性作用
element.offsetParent 返回作为该元素带有定位的父级元素,都没有则返回body
element.offsetTop 返回元素相对带有定位父元素上偏移
element.offsetLeft 返回元素相对带有定位父元素左边框偏移
element.offsetWidth 返回自身包括padding、边框、内容区的宽度,不带单位
element.offsetHeight 返回自身包括padding、边框、内容区的高度,不带单位

用处:获取鼠标在盒子内的位置/根据鼠标的移动放大图片区域


元素可视区client
  • 可以获取元素可视区的相关信息。例如动态的得到该元素的边框大小、元素大小等。
client系列属性作用
element.clientTop 返回元素上边框的大小
element.clientLeft 返回元素左边框的大小
element.clientWidth 返回自身包括padding、内容区的宽度,不包含边框,不带单位
element.clientHeight 返回自身包括padding、内容区的高度,不包含边框,不带单位

元素滚动scroll
  • 可以得到元素的大小、滚动距离等数据。
  • 如果内容超出了盒子,scroll得到的会是内容的大小。
  • 滚动条在滚动时回触发onscroll事件。
scroll系列属性作用
element.scrollTop 返回被卷区的上侧距离,返回数值不带单位
element.scrollLeft 返回被卷区的左侧距离,返回数值不带单位
element.scrollWidth 返回自身实际的宽度,不含边框,不带单位
element.scrollHeight 返回自身实际的高度,不含边框,不带单位
posted @ 2022-07-18 14:14  Arica-ss  阅读(42)  评论(0)    收藏  举报