美文网首页海纳百川
JS基本知识点回顾(Ⅲ)

JS基本知识点回顾(Ⅲ)

作者: 凛冬已至_123 | 来源:发表于2018-06-25 18:04 被阅读0次

本文用于复习JS相关知识点,相当于知识简单的梳理. So, It's not be Detailed introduction

定时器

JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成。
setTimeout()

setTimeout(function (){console.log(2)},1000);

setInterval()
setInterval函数的用法与setTimeout完全一致,区别仅仅在于setInterval指定某个任务每隔一段时间就执行一次,也就是无限次的定时执行。

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

上面代码表示每隔1000毫秒就输出一个2,直到用户点击了停止按钮
clearTimeout(),clearInterval()
setTimeout和setInterval函数,都返回一个表示计数器编号的整数值,将该整数传入clearTimeout和clearInterval函数,就可以取消对应的定时器。

var id1 = setTimeout(f,1000);
var id2 = setInterval(f,1000);

clearTimeout(id1);
clearInterval(id2);

函数节流

function throttle(fn, delay) {
    var timer = null
    return function(){
        clearTimeout(timer)
        timer = setTimeout(function(){ 
            fn(arguments)
        }, delay)
    }
}

function fn(){
    console.log('hello ')
}

var fn2 = throttle(fn, 1000)
fn2()
fn2()
fn2()

DOM

  • document 对象
    每个载入浏览器的HTML文档都会成为document对象。document对象包含了文档的基本信息,我们可以通过JavaScript对HTML页面中的所有元素进行访问、修改。
  • document对象常用属性
    document对象有很多属性来描述文档信息,介绍几个常用的
    document.doctype
    document.title
    document.characterSet
    document.head
    document.body
    document.images

    /*了解
    readyState属性返回当前文档的状态,共有三种可能的值

    1. loading:加载HTML代码阶段,尚未完成解析
    2. interactive:加载外部资源阶段
    3. complete:全部加载完成
    */
    document.readyState

    /*了解
    compatMode 属性返回浏览器处理文档的模式,可能的值为
    1. BackCompat:向后兼容模式,也就是没有添加DOCTYPE
    2. CSS1Compat:严格模式,添加了DOCTYPE
    */
    document.compatMode
  • document.open()、document.close()、document.write()

document.open方法用于新建一个文档,供write方法写入内容。它实际上等于清除当前文档,重新写入内容
document.close方法用于关闭open方法所新建的文档。一旦关闭,write方法就无法写入内容了。
document.write方法用于向当前文档写入内容。只要当前文档还没有用close方法关闭,它所写入的内容就会追加在已有内容的后面。

document.open();
document.write("hello");
document.write("world");
document.close();

除了某些特殊情况,应该尽量避免使用document.write这个方法。

  • Element
    除了document对象,在DOM中最常用的就是Element对象了,Element对象表示HTML元素。

Element 对象可以拥有类型为元素节点、文本节点、注释节点的子节点,DOM提供了一系列的方法可以进行元素的增、删、改、查操作

Element有几个重要属性

1.nodeName:元素标签名,还有个类似的tagName
2.nodeType:元素类型
3.className:类名
4.id:元素id
5.children:子元素列表(HTMLCollection)
6.childNodes:子元素列表(NodeList)
7.firstChild:第一个子元素
8.lastChild:最后一个子元素
9.nextSibling:下一个兄弟元素
10.previousSibling:上一个兄弟元素
11.parentNode、parentElement:父元素

  • 查询元素
    getElementById()
    var elem = document.getElementById("test");
    getElementsByClassName()
    getElementsByClassName方法返回一个类似数组的对象(HTMLCollection类型的对象)
    var elements = document.getElementsByClassName('tab');
    getElementsByTagName()
    返回值是一个HTMLCollection对象
    var paras = document.getElementsByTagName("p");
    常见使用方式
  • 修改样式
document.querySelector('p').style.color = 'red'
document.querySelector('.box').style.backgroundColor = '#ccc'
  • 获取样式getComputedStyle
    使用getComputedStyle获取元素计算后的样式,不要通过 node.style.属性 获取
var node = document.querySelector('p')
var color = window.getComputedStyle(node).color
console.log(color)
  • class操作
var nodeBox = document.querySelector('.box')
console.log( nodeBox.classList )
nodeBox.classList.add('active')   //新增 class
nodeBox.classList.remove('active')  //删除 class
nodeBox.classList.toggle('active')   //新增/删除切换
node.classList.contains('active')   // 判断是否拥有 class

页面宽高

image
element.scrollHeight 元素滚动内容的总长度。如果元素没出现滚动条, scrollHeight等于 clientHeight
document.body.scrollHeight
element.scrollTop 滚动的高度
document.body.scrollTop
window.innerHeight 窗口的高度
window.innerHeigh
HTMLCollection 和 NodeList
节点都是单个对象,有时会需要一种数据结构,能够容纳多个节点。DOM提供两种集合对象,用于实现这种节点的集合:NodeList和HTMLCollection。

NodeList 对象代表一个有顺序的节点列表,HTMLCollection 是一个接口,表示 HTML 元素的集合,它提供了可以遍历列表的方法和属性
HTMLCollection与NodeList基本相似

相同点: 都是类数组对象,节点的变化都会实时反映在集合中

不同点: 少部分方法不一样,比如 NodeList 有 forEach 方法,而 HTMLCollection 没有

事件(东西太多只写要点)

  • 事件流
    事件流描述的是从页面中接收事件的顺序,比如有两个嵌套的div,点击了内层的div,这时候是内层的div先触发click事件还是外层先触发?目前主要有三种模型

1.事件冒泡:事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的元素

2.事件捕获:不太具体的节点更早接收事件,而最具体的元素最后接收事件,和事件冒泡相反

3.DOM事件流:DOM2级事件规定事件流包括三个阶段,事件捕获阶段,处于目标阶段,事件冒泡阶段,首先发生的是事件捕获,为截取事件提供机会,然后是实际目标接收事件,最后是冒泡阶段

Opera、Firefox、Chrome、Safari都支持DOM事件流,IE不支持事件流,只支持事件冒泡


image
  • DOM2事件处理程序
    DOM2级事件定义了两个方法用于处理指定和删除事件处理程序的操作:

  • addEventListener

  • removeEventListener
    通过addEventListener添加的事件处理程序只能通过removeEventListener移除

image.png
  • 要阻止事件的默认行为,可以使用preventDefault()方法,前提是cancelable值为true,比如我们可以阻止链接导航这一默认行为
document.querySelector('#btn').onclick = function (e) {
    e.preventDefault();
}
  • stopPropagation()方法可以停止事件在DOM层次的传播,即取消进一步的事件捕获或冒泡。我们可以在button的事件处理程序中调用stopPropagation()从而避免注册在body上的事件发生
var handler = function (e) {
    alert(e.type);
    e.stopPropagation();
}

事件代理
看代码

  <div class="container">
    <div class="box">box1</div>
    <div class="box">box2</div>
    <div class="box">box3</div>
  </div>
  <button id="add">add</button>

<script>
function $(selector){
  return document.querySelector(selector)
}
function $$(selector){
  return document.querySelectorAll(selector)
}

// $$('.box').forEach(function(node){
//   node.onclick = function(){
//     console.log(this.innerText)
//   }
// })
//重点
$('.container').onclick = function(e){
  console.log(this)  
  console.log(e.target)
  if(e.target.classList.contains('box')){
    console.log(e.target.innerText)
  }
}

var i = 4
$('#add').onclick = function(){
  var box = document.createElement('div')
  box.classList.add('box')
  box.innerText = 'box' + (i++)
  $('.container').appendChild(box)
}

自定义事件

var EventCenter = {
  on: function(type, handler){
    document.addEventListener(type, handler)
  },
  fire: function(type, data){
    return document.dispatchEvent(new CustomEvent(type, {
      detail: data
    }))
  }
}

EventCenter.on('hello', function(e){
  console.log(e.detail)
})

EventCenter.fire('hello', '你好')

动画

使用 setTimeout 实现(不推荐)

<div id="ball"></div>
<script>
  var offsetX = 500  //要水平移动的距离
  var moveOffset = 0  //当前已经移动的距离
  var step = 5   //每次移动的距离

  function move(){
    if(moveOffset < offsetX){
      ball.style.left = parseInt(getComputedStyle(ball).left) + step + 'px'
      moveOffset += step
      setTimeout(move, 5)
    }
  }
  move()

</script>

requestAnimationFrame

  <div id="ball"></div>
  <script>
    var offsetX = 500  //要水平移动的距离
    var moveOffset = 0  //当前已经移动的距离
    var step = 5   //每次移动的距离

    function move(){
      if(moveOffset < offsetX){
        ball.style.left = parseInt(getComputedStyle(ball).left) + step + 'px'
        moveOffset += step
        requestAnimationFrame(move)
      }
    }
    move()

相关文章

  • JS基本知识点回顾(Ⅱ)

    本文用于复习JS相关知识点,相当于知识简单的梳理. So, It's not be Detailed intro...

  • JS基本知识点回顾(Ⅲ)

    本文用于复习JS相关知识点,相当于知识简单的梳理. So, It's not be Detailed intro...

  • JS基本知识点回顾(Ⅰ)

    本文用于复习JS相关知识点,相当于知识简单的梳理. So, It's not be Detailed intro...

  • JS基本知识点回顾(Ⅳ)

    本文用于复习JS相关知识点,相当于知识简单的梳理. So, It's not be Detailed intro...

  • js的浅拷贝与深拷贝

    js的浅拷贝与深拷贝 涉及知识点: js中的数据类型(基本类型,引用类型) js中的存储数据的堆栈相关知识点; 下...

  • 比较实用的几点高考建议

    一,临近高考如何复习 回顾梳理基本的知识点, 掌握课本的基本原理和基本规律, 看似都懂其实又有很多知识点需要复习,...

  • 4/07day28_js基础

    day28_js基础 回顾 JS基础语法 JS运算符 JS流程控制语句 条件语句 JS的条件语句和Java语法基本...

  • 复习-重难点

    整体回顾前端知识点-记录不清楚的点--需回顾多次的 js基础 (以下为原理代码未看透的) #继承 #模拟实现 ca...

  • web前端实用案例-图片无限懒加载开发

    效果知识点:for循环语句,DOM概念,元素获取,动态布局,基本算法,节点操作,JQ与JS的关系与区别,JS的重要...

  • XDL_NO.4 使用Node.js 搭建一个静态网站

    使用Node.js 搭建一个静态网站 回顾上节的知识点 Linux 常用命令vim编辑器中的常用操作node.js...

网友评论

    本文标题:JS基本知识点回顾(Ⅲ)

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