自学JavaScript第五天

120 阅读5分钟

JavaScript DOM篇

1.BOM

1、什么是BOM

  1. 浏览器对象模型 浏览器滚动条 前进后退 窗口大小 通过window.什么什么的 这些都是BOM
  2. 他是一个全局对象。定义在全局作用的变量、函数 都变成window对象的属性和方法

2、窗口加载事件

  1. 有了window.onload=function(){ 代码} 就可以把代码放在任意一个地方 是因为window.onload 是等布局和css 图片全部加载完才执行window.onload

  2. window.onload只能声明一个

  3. 通过window.addEventListener('load',function(){})可以声明无数个

  4. window.addEventListener('DOMContentLoaded',function () {})这个比前面几个快 因为他只要DOM布局加载完毕 不需要等图片这些加载完毕 就可以直接加载

  5. window.onresize 窗口改变就会触发

     //全局加载完才生效
    window.addEventListener('load',function () {
            var box = document.querySelector('.box')
          //当窗口改变就会触发 resize       
          window.addEventListener('resize',function () {
                    console.log(window.innerWidth)
                    if (window.innerWidth <= 800){
                        box.style.display = "none";
                    }
                    if (window.innerWidth >= 800){
                        box.style.display = "block";
                    }
                })
            })
    

3.定时器(重要)

1. setTimeout

	// 第一种
        setTimeout(function() {
          console.log('时间到了')
        },3000)
        // 第二种 因为页面中不只是只有一个定时器 可以给定时器赋值
        var time = setTimeout(f1,2000)
        function f1() {
            console.log("f1执行了")
        }
        //关闭定时器 指定的名字
		clearTimeout(time)

回调函数 就是需要回头调用这个函数 所以叫回调函数

2.setInterval

// 1. setTimeout 延时时间到了,就去调用这个回调函数,只调用一次就结束了这个定时器 // 2. setInterval 每隔这个延时时间,就去调用这个回调函数,会调用很多次,重复调用这 个函数

2.this指向

1.在全局调用指向全局

2.在方法调用谁就指向谁

3.在构造函数中this指向构造函数的实例

//第一种
console.log(this)//window

function fn1(){
	console.log(this)
}
fn1()//window

//定时器也是指向window
setInterval(function () {console.log(this)},1000)

//第二种指向调用者 a
var a={
        usern:function() {
            console.log(this)
        }
      }
console.log(a.usern)

//第三种 指向实例
function Fun(){
    console.log(this)
}
var fun = new Fun()

3.js执行机制(重点)

3.1同步和异步(重点)

同步:只有前一个执行完才会执行下一个任务 如果上一个要执行十分钟 后面全部都要等(只能执行一个任务)

异步:一件事情需要等很久的时候,你可以去做其他的事情(能一起执行多个任务)

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

异步任务: 异步任务都放在任务队列

js的异步是通过回调函数进行实现的

一般说 异步有以下三种类型

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

3.2 js运行机制总结:

首先页面加载,会把所有的同步任务放到主线程(执行栈)中,把所有的异步放到异步api去触发,等触发完毕就会放到异步队列中,等主线程(执行栈)中执行完全部,然后去异步队列中查看是否有异步任务,如果有就拿到主线程去执行,然后又去异步队列查看是否有异步任务,一直循环此动作,改事件叫做事件循环

4.location对象

获取地址栏的属性

location对象属性 返回值 location.href 获取或者设置整个URL location. host 返回主机(域名) location.port 返回端口号如果未写返回空字符串 location.pathname 返回路径 location. search 返回参数 location. hash 返回片段#后面内容常见于链接锚点 重点记住: href 和search

//对象方法
location.assign() //跟href一样,可以跳转页面 可以后退
location.replace()//替换当前页面 不记录历史 没得后退
location.reload() // 重新加载页面 就是刷新页面

5.history对象

back() 可以后退

forward() 前进功能

go(参数)前进后退功能 参数是整数就前进 负数就后退

var btn = document.querySelector("button");
        btn.addEventListener("click", function() {
            //前进
            //history.forward();
            //前进
            history.go(1)
           //后退
            // history.go(-1)
        })

5.1 offset

element.offsetParent
//返回作为该元素带有定位的父级元素如果父级都没有定位则返回body
element.offsetTop
//返回元素相对带有定位父元素上方的偏移
element.offsetLeft
//返回元素相对带有定位父元素左边框的偏移
element.offsetWidth
//返回自身包括padding、边框、内容区的宽度,返回数值不带单位
element.offsetHeight
//返回自身包括padding、边框、内容区的高度,返回数值不带单位

获取大小用offset,更改样式用style

6.1client

获取元素的宽高等等 不包括padding、边框、内容区的宽度

用法查看mdn

7.1立即执行函数

立即执行不需要调用

写法

//写法1
(function(a,b){})(1,2)
//写法2
(function(){}())

8.fiexible 屏幕适配

屏幕适配 了解 但是有用

9.scroll 滚动条系列

属性及其作用

element.scrollTop //距离顶部 返回值不带参数
element.scrollLeft //距离右侧 返回值不带参数
element.scrollWidth //实际高度 不含边框 返回值不带参数
element.scrollHeigh //实际宽度 不含边框 返回值不带参数

scroll //滚动事件


//页面被卷去的头部
window.pageYOffset
window.pageXOffset

//一般用法
scrollTop-pageYoffset

三大获取数值的总结

  1. offset 系列经常用于获取的元素位置 offsetleft offsettop
  2. client 经常用于获取元素大小 clientWidth clientHeight
  3. scroll 经常用于获取滚动距离 scrollTop scrollLeft
  4. 注意页面滚动的距离通过window.pagexOffset 获得

10.动画

动画基于定时器

动画属性一定要加定位

缓动效果公式 (目标-现在的位置)/10