JavaScript 学习笔记 day15 2021-4-25

JavaScript 学习笔记 day15 2021-4-25

5.8 三种动态创建元素区别

区别

1.document.write 是直接将内容写入页面的内容流,但是文档流执行完毕,则它会导致页面全部重绘

2.innerHTML 是将内容写入某个DOM节点,不会导致页面全部重绘

3.innerHTML创建过个元素效率更高(不要拼接字符串,采取数组形式拼接),结构稍微复杂

4.createElement()创建多个元素效率稍低一点点,但是结构更清晰

6.DOM重点核心

创建

1.document.write

2.innerHTML

3.createElement

1.appendChild

2.insertBefore

1.removeChild

1.修改元素属性:src、href、title等

2.修改普通元素内容:innerHTML、innerText

3.修改表单元素:value、type、disabled

4.修改元素样式:style、className

1.DOM提供的API方法

2.H5提供的新方法

3.利用节点操作获取元素:父(parentNode)子(children)兄(previousElementSibling、nextElementSibling)

注册事件

方法监听注册方式
  • w3c 标准 推荐方法
  • addEventListener()它是一个方法

eventTarget.addEventListener(type,listener[,useCapture])

type:事件类型字符串,比如click,mouseover

listener:事件处理函数,事件发生时,会调用该监听函数

useCapture:可选参数

删除事件

2.1删除事件的方式

1.传统注册方式

eventTarget.onclick = null

2.方法监听注册方式

1.eventTarget.removeEventListener(type,listener[,useCapture])

var divs = document.querySelectorAll('div')
divs[0].onclick = function () {
  alert(11)
  //1.传统方式删除事件
  divs[0].onclick = null
}
  //2.removeEventListener
divs[1].addEventListener('click', fn)//里面的fn 不需要调用加小括号

function fn() {
  alert(22)
  divs[1].removeEventListener('click',fn)
}
3.DOM事件流

DOM事件流分为3个阶段:

1.捕获阶段

2.当前目标阶段

3.冒泡阶段

//dom 事件流 三个阶段
//1.js代码中只能执行捕获或者冒泡其中的一个阶段
//2.onclick 和 attachEvent(ie)只能得到冒泡阶段
//3.捕获阶段 如果addEventListener 第三个参数时 true 那么则处于捕获阶段
// var son = document.querySelector('.son')
// son.addEventListener('click', function () {
//   alert('son')
// },true)
// var son = document.querySelector('.son')
// var father = document.querySelector('.father')
// son.addEventListener('click', function () {
//   alert('son')
// }, true)
// father.addEventListener('click', function () {
//   alert('father')
// }, true)
//4.冒泡阶段 son->father->body->html->document
var son = document.querySelector('.son')
var father = document.querySelector('.father')
son.addEventListener('click', function () {
  alert('son')
})
father.addEventListener('click', function () {
  alert('father')
})
document.addEventListener('click',function () {
  alert('document')
})
常见事件对象的属性和方法
//1.e.target 返回的是触发事件的对象(元素) this 返回的是绑定事件的对象
//区别:e.target 点击了那个元素,就返回那个元素 this 那个元素绑定了这个点击事件,那么就返回谁
var div = document.querySelector('div')
div.addEventListener('click', function (e) {
  console.log(e.target)
})
var ul = document.querySelector('ul')
ul.addEventListener('click', function (e) {
  //我们给ul绑定了事件 那么this就指向ul
  console.log(this);
  //e.target 指向我们点击的那个对象 谁触发了这个事件 我们点击的是li e.target指向的就是li
  console.log(e.target)
})
常见事件对象的属性和方法
//1.返回事件类型
var div = document.querySelector('div')
div.addEventListener('click',fn)
div.addEventListener('mouseover',fn)
div.addEventListener('mouseout',fn)
function fn(e) {
  console.log(e.type)
}
//2.组织默认行为(事件) 让链接不跳转 或者让提交按钮不提交
var a = document.querySelector('a')
a.addEventListener('click',function (e) {
  e.preventDefault() //dom标准写法
})

5.阻止冒泡的两种方式

常见事件对象的属性和方法
阻止冒泡 dom推荐的标准 stopPropagation()

var son = document.querySelector('.son')
var father = document.querySelector('.father')

son.addEventListener('click', function (e) {
  alert('son')
  e.stopPropagation()
})
father.addEventListener('click', function () {
  alert('father')
})
document.addEventListener('click', function () {
  alert('document')
})

6.事件委托

不是每个子节点单独设置事件监听器,而是事件监听器设置在其父节点上,然后利用冒泡原理影响设置每个子节点

  //事件委托的核心原理:给父节点添加侦听器,利用事件冒泡影响每一个子节点
var ul = document.querySelector('ul')
ul.addEventListener('click',function (e) {
  // alert('知否知否,点我应有弹框在手!')
  e.target.style.backgroundColor = 'pink'
})

7.常用的鼠标事件

//1.context 我们可以禁用右键菜单
document.addEventListener('contextmenu', function (e) {
  e.preventDefault()
})
//2. 禁止选中文字 selectstart
document.addEventListener('selectstart',function (e) {
  e.preventDefault()
})
鼠标事件对象
//鼠标事件对象 MouseEvent
document.addEventListener('click', function (e) {
  //1.client 鼠标在可视区域的x和y
  console.log(e.clientX)
  console.log(e.clientY)
  //2.page鼠标在页面文档的x和y坐标
  console.log(e.pageX);
  console.log(e.pageY);

  //3.screen鼠标在电脑屏幕的x和y坐标
  console.log(e.screenX)
  console.log(e.screenY)
})
常用的键盘事件
//1.keyup按键弹起的时候触发// document.onkeyup = function () {//   alert('我弹起了')// }document.addEventListener('keyup',function () {  alert('我弹起了')})//2.keydown按键按下的时候触发document.addEventListener('keydown',function () {  alert('我按下了down')})//3.keypress按键按下的时候触发 但是它不识别功能键 比如ctrl shift等document.addEventListener('keypress',function () {  alert('我按下了press')})

1. BOM概述

1.1 什么是BOM

BOM(Browser Object Model)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是window

DOM

  • 文档对象模型
  • DOM就是把【文档】当做一个【对象】来看待
  • DOM的顶级对象是document
  • DOM主要学习的是操作页面元素
  • DOM是W3C标准规范

BOM

  • 浏览器对象模型
  • 把【浏览器】当作一个【对象】来看待
  • BOM的顶级对象是window
  • BOM学习的是浏览器窗口交互的一些对象
  • BOM是浏览器厂商在各自浏览器上定义的,兼容性较差

2.window对象的常见事件

2.1 窗口加载事件

window.onload是窗口(页面)加载时间,当文档内容完全加载完成会触发该事件(包括图像、脚本文件、CSS文件等),就调用的处理函数

load 等页面内容全部加载完毕,包含页面dom元素 图片 flash css 等等
DOMContentLoaded 是DOM加载完毕,不包含图片 flash css 等就可以执行 加载速度比load更快一些

3.定时器

3.2 setTimeout()定时器
  //1.setTimeout  //语法规范:window.setTimeout(调用函数,延时事件)  //1.window在调用的时候可以省略  //2.这个延时时间单位是毫秒,但是可以省略,省略默认为0  //3.这个调用函数可以直接写函数 还可以写 函数名  //4.页面中可能有很多的定时器,我们经常给定时器加标识符  setTimeout(function () {      },2000)  function callback() {    console.log('boom')  }var timer1 =  setTimeout(callback,3000)var timer2 =  setTimeout(callback,5000)
//1.setInterval//语法规范:window.setInterval(调用函数,延时时间)setInterval(function () {  console.log('continue')},1000)//2.setTimeoout 延时时间到了,就去调用这个回调函数,只调用一次,就结束了这个定时器//3.setInterval 重复调用
3.6 this指向问题
  //this指向问题 一般情况下this的最终指向的是哪个调用它的对象  console.log(this)  //1.全局作用域或者普通函数中this指向全局对象window(注意定时器里面的this指向window)  function fn() {    console.log(this)  }  fn()  setTimeout(function () {    console.log(this)  }, 1000)  //2.方法调用中谁调用this指向谁var o = {    sayHi:function () {      console.log(this)    }}o.sayHi()  var btn = document.querySelector('button')  btn.onclick = function () {    console.log(this)  }  btn.addEventListener('click',function () {    console.log(this)  })  //3.构造函数中this指向构造函数的实例  function Fun() {    console.log(this)  }  var fun = new Fun() 

4.执行机制

4.3 同步和异步

由于主线程不断地重复获得任务、执行任务、再获得任务、再执行,所以这种机制被称为时间循环(event loop)

5.location对象

5.1 什么是location对象

window对象给我们提供了一个location属性用于获取设置窗体的url,并且可以用于解析URL,因为这个属性返回的是一个对象,所以我们将这个属性也称为location对象

location.href 获取或者设置 整个URL

location.host 返回主机(域名)

location.port 返回端口号 如果未写返回空字符串

location.pathname 返回路径

location.search 返回参数

location.hash 返回片段

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值