美文网首页
第一周总结

第一周总结

作者: 啊谢aaa | 来源:发表于2021-10-10 20:46 被阅读0次

    定时-间歇

    作用:每隔一段时间,需要自动执行一段代码。
    开启定时器setTimeout(函数,间隔时间),开启定时器后,每隔一段时间,就会执行这个函数,这个函数可以是匿名函数,也可以是具名函数,如果是具名函数,调用时不需要加括号。
    关闭定时器clearTimeout(timerId)

    定时器返回的是一个id数字,关闭定时器时,接受的是同一个id值。如果程序里面有定时器,一定是所有的代码执行完之后,才去执行定时器里面的内容。

    DOM

    给DOM添加事件监听

    事件监听的三要素

    1. 事件元素:需要获取的DOM
    2. 事件:以什么方式触发,比如点击(click)
    3. 事件要触发的函数:表示做什么事情

    给DOM绑定事件有两种形式
    第一种,DOM0版本,on,语法是:事件源.on事件=function(){}
    第二种,DOM2版本,addEventListener,语法:事件源.addEventListener(事件,事件处理函数)

    例子

    // 获取元素 
    let btn=document.querySelector('button');
    // 事件监听
    btn.addEventListener('click',function(){
        alert('我被点击了')
    })
    

    事件类型

    鼠标事件

    1. click
    2. mouseover——鼠标悬停
    3. mouseout——鼠标移出
    4. mouseenter——鼠标进入
    5. mouseleave——鼠标移出

    焦点事件

    1. focus——获得焦点
    2. blur——失去焦点

    键盘事件

    1. keydown——键盘按下
      2.keyup——键盘抬起

    文本事件

    1. input——用户输入

    回调函数

    把一个函数当做参数传给另一个参数,前者就是回调函数,后者被称为主函数。
    例如
    例子一:定时器

    function  fn(){
            console.log('我是回调函数')
    }
    setInterval(fn,1000)
    // setInterval是主函数,fn是回调函数
    

    例子二:

    box.addEventListener('click',function(){
          console.log('我是回调函数')
    })
    

    关于this

    this是函数内部特殊的变量,代表着当前函数所处的环境。
    this的指向:谁调用,this就指向谁。

    DOM节点的操作

    查找节点

    父节点
    语法:子节点.parentNode或者子节点.parentElement
    返回值是最近一级父节点,如果没有就返回null

    子节点
    语法:父元素.children
    返回值是一个伪数组,包含所有符合条件元素的节点。

    兄弟节点
    语法:

    // 上一个兄弟
    元素对象.nextElementSibling
    // 下一个兄弟
    元素对象.previousElementSibling
    

    新增节点

    创建节点

    一般的情况是,先在内存中创建一个节点,然后插入到目标节点中。创建的节点一般是双标签。
    语法:document.createElement('标签名')

    追加节点

    插入到某元素的父元素的最后一个子元素的位置
    语法:父元素.appendChild(要插入的元素)

    插入到父元素中某个子元素的前面
    语法:父元素.insertBefore(要插入的元素,在哪个子元素前面)

    克隆元素
    语法:元素.cloneNode(布尔值)
    输出结果:

    1. 默认接收的值为false;
    2. 如果为true,则代表克隆时,会包含后代一起克隆,这种情况为深克隆,不光复制标签的结构,也会复制内容;
    3. 如果为false,则代表克隆时,不包含后代节点,只有它自己。这种情况为浅拷贝,只会复制标签的结构,不会克隆标签内部的内容。

    删除节点

    语法:

    // 1
    父元素.removeChild(要删除的元素)
    // 2
    元素.remove()
    

    注意:

    1. 只能是父子关系的元素,才能用第一种删除;
    2. 删除节点和隐藏节点(display:none)是有区别的,前者表示从HTML中删除节点,后者处理后的节点还是存在的;

    时间对象

    获取时间

    获取当前时间
    语法:let date=new Date()
    获取指定时间
    语法:let date=new Date('1949-10-1')
    获取时间对象的方法

    1. 年份——getFullYear()
    2. 月份——getMouth()
    3. 月份中的某一天——getDate()
    4. 星期——getDay()
    5. 小时——getHours()
    6. 分钟——getMinutes()
    7. 秒——getSeconds()

    时间戳

    什么是时间戳?
    是指1970年01月01日00时00分00秒(格林威治时间)起至现在的毫秒数,它是一种特殊的计量时间的方式。

    获取时间戳的方式?
    方式一:getTime
    语法:

    // 实例化
    let date=new Date()
    // 获取时间戳
    console.log(date.getTime())
    

    方式二:简写new Date()
    语法:

    console.log(+new Date())
    

    方式三:使用Date.now()
    语法:

    console.log(Date.now())
    

    注意:

    1. 方式一和方式二可以返回指定时间的时间戳;
    2. 第三种方式只能得到当前的时间戳;

    如果将时间戳转换成正常的时间?
    通过时间戳获取当前的时间:
    new Date(时间戳)

    通过计算得到具体的事件戳:

    1. 通过时间戳得到的是毫秒,需要转化为秒,再计算;
    2. 转换公式如下:
    d=parseInt(总秒数/60/60/24) //  计算天数
    h=parseInt(总秒数/60/60%24)  //  计算小时
    m=parseInt(总秒数/60%60)  //  计算分数
    s=parseInt(总秒数%60)  //  计算秒数
    

    重绘和回流

    首先介绍浏览器是如何进行页面渲染的?(步骤)

    1. 解析(Parser)HTML,生成DOM树(DOM Tree);
    2. 同时解析(Parser) CSS,生成样式规则 (Style Rules);
    3. 根据DOM树和样式规则,生成渲染树(Render Tree);
    4. 进行布局 Layout(回流/重排):根据生成的渲染树,得到节点的几何信息(位置,大小),影响了元素的布局;
    5. 进行绘制 Painting(重绘): 根据计算和获取的信息进行整个页面的绘制,不会改变元素的位置和大小;
    6. Display: 展示在页面上;

    回流:当 Render Tree 中部分或者全部元素的尺寸、结构、布局等发生改变时,浏览器就会重新渲染部分或全部文档的过程称为 回流。

    重绘:由于节点(元素)的样式的改变并不影响它在文档流中的位置和文档布局时(比如:color、background-color、outline等), 称为重绘。
    重绘不一定会引起回流,而回流一定会引起重绘。什么操作会引起回流?

    1. 页面的首次刷新;
    2. 浏览器的窗口大小发生改变;
    3. 元素的大小或位置发生改变;
    4. 改变字体的大小;
    5. 内容的变化(如:input框的输入,图片的大小);
    6. 激活css伪类 (如::hover);
    7. 脚本操作DOM(添加或者删除可见的DOM元素);

    本质:影响到布局,就会有回流。

    事件对象

    这个对象包含相关事件触发的相关信息,在事件绑定的回调函数的第一个参数就是事件对象,它记录了触发对象的信息,命名为e,或者event、ev。
    拿到它的方法很简单:

    元素.addEventListener('click',function(e){
           console.log(e)
    })
    

    事件对象的属性

    1. type——获取当前的事件类型
    2. clientX/clientY——获取光标对于浏览器可视窗口左上角的位置
    3. offsetX/offsetY——获取光标对于当前的DOM元素左上角的位置
    4. pageX/pageY——距离body左上角的位置
    5. key——用户按下的键盘的值,按键的字面意思

    事件流

    事件流包括事件捕获和事件冒泡,事件捕获是从祖先到自己,事件冒泡是从自己到祖先。

    触发捕获和冒泡的语法

    DOM元素.addEventListener(事件类型,事件处理函数,是否触发捕获机制)
    

    阻止事件冒泡

    事件对象.stopPropagation()
    

    鼠标经过事件和事件冒泡的关系

    • mouseover和mouseout有冒泡效果
    • mouseenter和mouseleave没有冒泡效果

    元素的默认行为和阻止默认行为

    默认行为,比如,a链接的默认行为是跳转。阻止元素默认行为的语法:e.preventDeafult()

    事件注册的两种方式(以click事件为例)

    第一种,DOM0,on
    on事件只能绑定一个对应的事件,后面会覆盖。解绑的方式很简单,元素对象.onclick=null。

    第二种,addEventListener
    addEventListener可以绑定同一个对应的事件,后面不会被覆盖。解绑时,使用removeEventListener,此时需要注意调用具名函数,不能调用匿名函数。

    // 解绑的语法:事件类型、函数调用,否是捕获
    removeEventListener('click',myClick)
    
    // 例子
    function myClick(){
      alert('你好')
    }
    addEventListener('click',myClick)
    removeEventListener('click',myClick)
    

    事件委托

    原理是,事件类型、函数调用,否是捕获。怎么实现的?事件对象.target触发真正的元素。
    节点的三要素:

    1. nodeName:大写的标签名
    2. nodeValue:元素是null
    3. nodeType:元素是1

    滚动事件

    事件名:scroll
    给整个页面添加滚动事件:window.onscroll=function(){}

    获取页面的滚动距离

    注意,滚动距离不加单位

    window对象

    方法:距离页面左上角滚动的距离

    1. window.pageXOffset
    2. window.pageYOffset

    上面的方法只能获取,不能修改

    元素对象

    获取方法:距离相关元素左上角滚动的距离

    1. 元素.scrollLeft
    2. 元素.scrollTop

    获取html元素的方法:document.documentElement

    加载事件

    load事件

    作用是,监听页面内容是否加载完毕,完毕之后,才会执行。
    语法:这个事件是window对象的

    window.onload=function(){
    xxx
    }
    

    图片资源、其他链接资源,必须等到html标签关闭之后才会加载。

    DOMContentLoaded事件

    这个事件是加给document的,当初始的 HTML 文档被完全加载和解析完成之后,DOMContentLoaded 事件被触发,而无需等待样式表、图像等完全加载。加载结构完成之后,执行。
    语法:

    document.addEventListener('DOMContentLoaded',function()){}
    

    元素的大小和位置

    scroll家族

    获取滚动元素的宽和高

    • scrollWidth
    • scrollHeight

    获取元素的滚动距离

    • scrollLeft
    • scrollTop

    offset家族

    获取元素自身的宽高,包含元素自身设置的宽高、padding、border

    • offsetWidth
    • offsetHeight

    获取最近的有定位的父元素(定位父级元素)的位置

    • offsetLeft
    • offsetTop

    相关文章

      网友评论

          本文标题:第一周总结

          本文链接:https://www.haomeiwen.com/subject/znaholtx.html