Javascript-BOM‘和动画

————————————
JavaScript··[API]

「BOM」「动画」
————————————

BOM

DOM

  1. 文档对象模型
  2. DOM将文档当做一个对象来处理
  3. DOM的顶级对象是document
  4. 主要学习的是对页面元素的操作
  5. DOM是W3C标准规范

BOM

  1. 浏览器对象模型
  2. 将浏览器当做一个对象来处理
  3. BOM的顶级对象是window
  4. 学习的是浏览器窗口交互的一些对象
  5. 是浏览器厂家在格子浏览器上定义的规范

BOM的构成

BOM是比DOM更大的盒子对象

window对象:document、location、navigation、screen、history

顶级对象window

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

  1. JS访问浏览器窗口的一个接口
  2. 是一个全局对象,声明的所有的全局变量,全局方法函数最终都是window对象的属性或者方法

注意:理解为全局的变量和方法函数在调用的时候其实是省略了window.操作

Window对象的常见事件

窗口加载事件

window.οnlοad=function(){}

window.addEventListener(“load”,function(){});

onload事件是页面的加载事件,当文档内容(包含图像、脚本文件、css文件等)全部加载完成会触发的事件

文档加载事件
window.addEventListener("DOMContentLoaded",function(){
            console.log(document.querySelector("h1"));
        })

DOMContentLoaded也是一个加载事件,文档加载事件,只需要考虑DOM元素(不包含图片、css、flash等)加载完成,IE9以上

窗口大小改变事件

window.οnresize=function(){}

如果调整窗口大小则时间被触发,这个事件经常被用作处理响应式布局

定时器事件(两种)

setTimeout();

serInterval();

setTimeout()定时炸弹

使用时指定一个时间段,只要时间到了直接执行绑定函数

window.setTimeout(function(){
            alert("hello");
        },3000)

第一个参数:事件所执行的函数;

第二个参数:时间间隔以毫秒为单位

注意:

  1. 绑定函数,回调函数callback,这个函数可以直接写在方法参数所在位置,还可以采取字符串"函数名()",还可以直接写函数名,三种调用方式,不推荐使用字符串方式
  2. 延迟的毫秒数可以省略,默认为0,如果写必须是毫秒
  3. 如果定时器比较多的话,可以给每个定时器一个标识符
停止定时器

window.clearTimeout(second);

方法取消了先前通过调用setTimeout建立的定时器,参数就是要停止的定时器的标识符

serInterval()闹钟定时器

使用时指定一个时间段,然后每隔这个时间段都会调用一次回调函数

        var i=0;
        window.setInterval(function(){
            console.log(i);
            i++;
        },1000);

哪怕是第一次执行回调函数也是在时间到了之后执行的

停止定时器

window.clearInterval(id)

location对象

window对象给我们提供了一个location属性,这个对象主要用于获取或设置窗体的url地址,并且可以用于解析url。

URL

同一资源定位符(Uniform Resource Location)是互联网上的标准资源地址,网络所有的数据都以文件形式保存,每个文件在网络世界中都有一个唯一的URL,它包含的信息指出文件的所在位置及浏览器的处理方式

url语法:

protocol://host[:port]/path/…

http://www.yltedu.com/…

protocol:协议类型,通信协议http、ftp、mailto等

host:主机名称(域名)

port:端口号可选,如果省略使用的是默认的端口,http默认的端口号是 80

path:路径由0个或多个"/"+文件地址等组成,表示主机上的文件地址目录

属性
  1. href:获取或设置一个url
  2. host:返回主机(域名)
  3. port:返回端口号,如果未写返回空字符串
  4. pathname:返回路径
  5. search:返回参数,URL参数是指URL地址中网址之后的?以后
  6. hash:返回片段,URL中#后面的内容
方法
  1. assign():和href一样,可以跳转页面,重定向跳转
  2. replace():替换当前页面,不记录入历史中,所以不能后退页面
  3. reload():重新载入页面,相当于刷新按钮,如果参数为true相当于强制刷新

navigation对象

navigation对象主要是记录有关浏览器的信息,常用的属性userAgent,这个属性可以返回由客户端发送至服务器的user-agent头部的值

history对象

window对象为提供的一个history对象来进行与浏览器的历史记录进行交互,

常见用法
  1. back():实现浏览器后退功能
  2. forward():实现浏览器的前进功能
  3. go(参数):前进后退功能,参数如果是1前进一个页面,如果是-1后退一个页面,如果是N则前进或后退N个页面

元素偏移量offset系列

offset概述

offset相关的属性可以动态的得到元素的位置(偏移)、大小等

  1. 获得元素距离带有定位的父元素的位置
  2. 获得元素自身的大小(高度和宽度)
  3. 注意:返回的数据都是不带单位的数字类型

offset系列属性

  1. offsetParent:返回作为该元素带有定位的父元素,如果父元素无定位返回的是body
  2. offsetTop:返回元素相对于带有定位的父元素的上方的偏移量
  3. offsetLeft:返回元素相对于带有定位的父元素的左方的偏移量
  4. offsetWidth:返回元素自身包括padding、边框、内容区域的宽度
  5. offsetHeight:返回元素自身包括padding、边框、内容区域的宽度
offset和style区别

offset:

  1. 可以得到任意样式表中的样式值

  2. 获得的数值没有单位

  3. offsetWidth包含:padding+border+width

  4. offsetWidth等属性是只读属性,无法设置数据

    读取元素的位置大小等使用offset读取

style:

  1. 只能得到行内样式表的样式值

  2. style.width获得的是带有单位的字符串

  3. style.width获得不包含padding和border的值

  4. style.width是可读可写属性,可以取值也可以设置值

    给元素设置或更改值,使用style设置

元素可视区client系列

client概述

client是客户端。使用client系列的相关属性用来获取元素可视区的相关信息,通过client系列属性可以动态的获得该元素的边框大小、元素大小

  1. clientTop:获取元素的上边框的大小
  2. clientLeft:获取元素的左边框的大小
  3. clientWidth:返回自身的padding,内容区宽度,不含边框,返回数据不带单位
  4. clientHeight:返回自身的padding,内容区高度,不含边框,返回数据不带单位

元素滚动scroll系列

scroll概述

是控制页面滚动,使用scroll系列属性可以动态的获取该元素的大小,滚动距离等

scrollTop:返回被卷到上侧的距离

scrollLeft:返回被卷到左侧的距离

scrollWidth:返回自身的实际宽度,不含边框

scrollHeight:返回自身的实际高度,不含边框

页面被卷去的部分

如果浏览器的高或者宽不足以显示整个页面时,会自动出现滚动条,当滚动条向下滚动时,页面上部会被逐渐隐藏,隐藏的页面高度就是卷上去的部分,称为页面被卷去的头部,滚动条在滚动的时候会触发onscroll事件

scroll兼容性解决方案

页面被卷上去的属性有兼容性问题,pageYOffset属性在IE9之后才有的

        function Scroll(){
            this.left=(window.pageXOffset||document.body.scrollLeft||document.documentElement.scrollLeft||0);
            this.top=(window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop||0);
        }

三个系列总结

offsetWidth:返回自身的包括padding、border、内容宽度,返回数值不带单位

clientWidth:返回自身的包括padding、内容宽度,不包括边框

scrollWidth:返回自身实际的宽度,不包含边框,实际宽度包括被卷走的

三大系列注意点

  1. offset系列经常用于获得元素的位置
  2. client系列经常用于获取元素的大小
  3. scroll系列经常用于获取滚动距离

mouseenter和mouseover区别

mouseenter:鼠标经过自身盒子触发【不会导致冒泡】
mouseover:鼠标经过元素自身会触发,经过子盒子也会触发【会导致冒泡】

JS的执行机制

        console.log(1);
        setTimeout(function(){
            console.log(3);
        },1000);
        console.log(2);
		//结果为 1,2,3
        
        console.log(1);
        setTimeout(function(){
            console.log(3);
        },0);
        console.log(2);
		//结果为 1,2,3
JS是单线程

JS语言的最大特点之一就是单线程,单线程的核心概念是指:同一个时间只能做一件事。原因是因为JS脚本语言的初衷所导致(JS是为了实现处理页面中的用户交互),以及操作DOM。

在DOM操作中已经充分展示了单线程特征:创建一个元素,创建成功之后才可以将它添加到某个节点中。

单线程:排队,所有的任务工作都需要进行先排队,前一个任务完成了之后才会执行下一个任务,如果前一个任务所需的事件很长,后一个任务就不得不一直等待。

单线程导致的问题是,如果一个JS执行的时间过长,这样就会导致页面的渲染不连贯。

同步任务和异步任务

单线程导致的问题就是延时任务之后的任务要等待,如果延时任务耗时比较长,后面的任务就会一直等待

解决这个问题的方案:利用计算机CPU的多核特征进行解决,HTML5提出Web Worker标准,允许JS创建出多个线程,但是创建出来的所有子线程全部受制于主线程,这样实现了同步和异步的任务

同步

前一个任务结束后在执行后一个任务,程序执行的顺序和任务的排列顺序是一致的。同步的做法例如:一边吃饭吃完饭才能睡觉

异步

在做一件事的时候,因为这个任务花费时间比较长,在做这件事的时候,还可以去做另一件事,比如一边吃饭一边听音乐

本质区别:这条流水线上的各个流程的执行顺序不同

JS中的所有任务分两种:同步任务和异步任务

同步任务指的是:主线程上的任务排队执行

异步任务指的是:不进入主线程,而是进入一个"任务队列"的任务,当主线程中的任务执行完,才会从任务队列中取出异步任务放入主线程执行

同步任务

将所有的任务在主线程中拍好队然后形成一个执行队列,一个一个执行处理

异步任务

JS中的异步任务是通过回调函数实现的

回调函数callback:当一个任务执行完成之后回过头来调用的这个函数

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

  1. 普通事件,click、resize事件等
  2. 资源加载,如load,error等
  3. 定时器,setTimeout,setInterval等

异步任务相关的回调函数添加到任务列表中(消息队列)

JS执行机制(事件循环)
  1. 先执行主线程(执行栈)中的同步任务
  2. 异步任务(回调函数)放入到任务队列中
  3. 一旦执行栈中的所有同步任务执行完毕,系统就会自动按照次序读取任务队列中的异步任务,通过这种方式被读取的异步任务结束等待过程,进入到执行栈中,开始执行

在这里插入图片描述

动画核心

通过一定的时间段不断处理元素的一些属性的值,实现元素的动态效果

JS中提供的动画核心是通过定时器setInterval,不断的改变盒子的一些属性

实现动画

  1. 必须要有时间控制setInterval
  2. 随着时间进行改变元素的样式属性或者属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值