DOM-事件基础
- 事件
- 高阶函数
- 环境对象
- 编程思想
- 综合案例
事件
目标:能够给 DOM元素添加事件监听
什么是事件? 事件是在编程时系统内发生的动作或者发生的事情 通俗来说 鼠标点一下 就发了鼠标点击事件 、键盘按一下 就叫键盘按下事件 比如用户在网页上单击一个按钮 什么是事件监听? **、、 通俗来说就是鼠标点击了 你要干什么事情 就是让程序检测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应,也称为 注册事件 语法:
此元素指的就是dom元素
事件监听三要素:
事件源: 那个dom元素被事件触发了,要获取dom元素
事件: 用什么方式触发,比如鼠标单击 click、鼠标经过 mouseover 等
事件调用的函数: 要做什么事
*事件监听
事件初体验代码:
<body>
<button>抽奖</button>
<button class="but">退出抽奖</button>
<div></div>
<script>
//先获取dom元素
let button=document.querySelector('button:nth-child(1)')
//给button绑定点击事件
button.addEventListener('click',function(){
console.log('大哥你终于点我了');
})
let but=document.querySelector('.but')
but.addEventListener('click',function(){
console.log('你也来点我了呀');
})
//获取div的dom元素
let div=document.querySelector('div')
//通过js来设置div的样式属性
div.style.width='50px';
div.style.height='50px';
div.style.backgroundColor='red';
//给div设置鼠标移入事件
div.addEventListener('click',function(){
console.log('小哥哥快进来');
})
</script>
</body>
小案例:
<body>
<button>1000</button>
<script>
//获取button标签的dom元素
let button=document.querySelector('button')
//给button设置点击事件
button.addEventListener('click',function(){
// button.innerText= button.innerText-1
// button.innerText-=1
--button.innerText
})
</script>
</body>
案例
<body>
<div>
<button>X</button>
<img src="../images/第二遍/Sn1.png" alt="">
</div>
<script>
//获取div大盒子标签dom元素
let div=document.querySelector('div')
//获取按钮button标签的dom元素
let button=document.querySelector('button')
button.addEventListener('click',function(){
// 修改div的样式属性 让其小时
div.style.display='none'
})
</script>
</body>
<boy>
<div></div>
<button>点击即可随机点名</button>
<button class="bnt">停止点名</button>
<script>
let aarr=['迅捷斥候-提莫','德玛西亚之力-盖伦','放逐之刃-锐雯','虚空之女-卡莎','雪原双子-努努','曙光女神-蕾欧娜','星籁歌姬-萨勒芬妮','唤潮鲛姬-娜美','无双剑姬-菲奥娜']
let timeId;//定义一个全局变量
//获取div标签的dom元素 并设置里其属性
let div=document.querySelector('div')
div.style.border='2px solid #ccc'
div.style.width='200px'
div.style.padding='20px'
div.style.color='red'
div.style.fontWeight=700
//获取button标签的dom元素
let button=document.querySelector('button')
let bnt=document.querySelector('.bnt')
//给button元素绑定点击事件
button.addEventListener('click',function(){
//1 button.disabled=true
clearInterval(timeId);
//设置随机数 加上定时器 可以重复让随机数这个动作重复
timeId=setInterval(function(){
let index=Math.round(Math.random()*(aarr.length-1))
div.innerText=aarr[index];
},10)
})
//注册清除定时器 点击事件
bnt.addEventListener('click',function(){
//1 button.disabled=false
clearInterval(timeId);
})
//优化
//多从点击开始按钮只会 创建开启多个定时器
//如何解决 点击多次按钮 后面停止定时器
//1.在开启定时器的时候 就禁用按钮 button.disabled=true 在停止按钮添加button.disabled=false
//2. clearInterval(timeId); 在没每次开始定时器时就清除上次的定时器
</script>
</boy>
事件监听版本
- DOM L0 事件源.on事件 = function() { }
- DOM L2
事件源.addEventListener(事件, 事件处理函数) - 发展史: DOM L0 :是 DOM 的发展的第一个版本; L:level DOM L1:DOM级别1 于1998年10月1日成为W3C推荐标准 DOM L2:使用addEventListener注册事件 DOM L3: DOM3级事件模块在DOM2级事件的基础上重新定义了这些事件,也添加了一些新事件类型
事件类型
<style>
div{
text-align: center;
line-height: 30px;
}
</style>
</head>
<body>
<div></div>
<button class="add">+</button>
<button class="minus">-</button>
<script>
let div=document.querySelector('div')
div.style.width='52px'
div.style.height='30px'
div.style.border='solid #cccc '
let add=document.querySelector('.add')
let minus=document.querySelector('.minus')
add.addEventListener('click',function(){
div.innerText++
minus.disabled=false
//1.当商品数量一旦做加之后 就会马上解除禁用减号按钮
})
minus.addEventListener('click',function(){
div.innerText--
if(div.innerText==1){ //1.这里做一个判断 当商品数量为1时 就禁用减号按钮
minus.disabled=true
}
})
</script>
</body>
高阶函数
目标:掌握高阶函数用法,实现函数更多使用形式
高阶函数可以被简单理解为函数的高级应用,JavaScript 中函数可以被当成【值】来对待,基于这个特性实现函数的高级应用。 【值】就是 JavaScript 中的数据,如数值、字符串、布尔、对象等。
函数表达式:
函数表达式和普通函数并无本质上的区别:
普通函数的声明与调用无顺序限制,推荐做法先声明再调用 函数表达式必须要先声明再调用
高阶函数可以被简单理解为函数的高级应用,JavaScript 中函数可以被当成【值】来对待,基于这个特性实现函数的高级应用。 【值】就是 JavaScript 中的数据,如数值、字符串、布尔、对象等。
如果将函数 A 做为参数传递给函数 B 时,我们称函数 A 为回调函数
简单理解: 当一个函数当做参数来传递给另外一个函数的时候,这个函数就是回调函数
常见的使用场景:
- 函数表达式
- 函数也是【数据】
- 把函数赋值给变量
- 回调函数
- 把函数当做另外一个函数的参数传递,这个函数就叫回调函数
- 回调函数本质还是函数,只不过把它当成参数使用
- 使用匿名函数做为回调函数比较常见
环境对象
目标:能够分析判断函数运行在不同环境中 this 所指代的对象
环境对象指的是函数内部特殊的变量 this ,它代表着当前函数运行时所处的环境
作用:弄清楚this的指向,可以让我们代码更简洁
- 函数的调用方式不同,this 指代的对象也不同
- 【谁调用, this 就是谁】 是判断 this 指向的粗略规则
- 直接调用函数,其实相当于是 window.函数,所以 this 指代 window
编程思想
排他思想
当前元素为A状态,其他元素为B状态 使用:
- 干掉所有人 使用for循环
- 复活他自己 通过this或者下标找到自己或者对应的元素
案例1:
需求:点击那个分类,那个分类就变成红色同时其他分类正常
最适合使用排他他思想
<style>
li{
width: 50px;
height: 50px;
border: 1px solid #000;
list-style: none;
float: left;
text-align: center;
line-height: 50px;
}
</style>
</head>
<body>
<ul>
<li>动画片</li>
<li>恐怖片</li>
<li>科幻片</li>
<li>纪录片</li>
</ul>
<script>
//1.获取li标签的元素
let lis=document.querySelectorAll('li')
//2.遍历数组 为其中的每个元素绑定单击事件
for (let i= 0; i< lis.length; i++) {
lis[i].addEventListener('click',function(){
//给被点击的里标签设置颜色
// lis[i].style.backgroundColor='red'
//这里出现的问题 就是你点击其他li 也会变红色 且不会消失
//故每次点击之前来个循环 先刷一遍白色
for (let j = 0; j < lis.length; j++) {
lis[j].style.backgroundColor='#fff'
}
// lis[i].style.backgroundColor='red'
this.style.backgroundColor='red'
})
}
</script>
</body>
效果如下: