事件
1. 事件监听
- 什么是事件?
事件是编程时系统内发生的动作或者发生的事情
比如用户在网页上点击一个按钮
- 什么是事件监听
就是让程序检测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应,也成为注册事件
- 语法
元素.addEventListener('事件',//要执行的函数function(){})
- 事件监听
例如:
//1. 获取元素
let btn = document.querySelector('button')
//2. 事件监听
btn.addEventListener('click',function(){
alert('被点击了')
})
//注意:
//1. 事件类型要加引号
//2. 函数是点击之后再去执行,每次点击都会执行一次
- 事件监听三要素
事件源 那个dom元素被事件触发了,要获取dom元素
事件 用什么方式触发,比如鼠标单击 click、鼠标经过 mouseover 等
事件处理处理程序 要做什么事
- 事件类型
鼠标事件
鼠标触发
click 鼠标点击
mouseenter 鼠标经过
mouseleave 鼠标离开
焦点事件
表单获得光标
focus 获得焦点
blue 失去焦点
键盘事件
键盘触发
Keydown 键盘按下触发
Keyup 键盘抬起触发
文本事件
表单输入触发
input 用户输入事件
高阶函数
1.函数表达式
let counter = function(x,y){
return x+y
}
//调用函数
let result = counter(5,10)
console.log(result)
- 普通函数的声明与调用无顺序限制,推荐做法先声明再调用
- 函数表达式必须要先声明再调用
高阶函数 可以被简单理解为函数的高级应用,JavaScript 中函数可以被当成【值】来对待,基于这个特性实现函数的高级应用。
【值】就是 JavaScript 中的数据,如数值、字符串、布尔、对象等。
回调函数
如果将函数 A 做为参数传递给函数 B 时,我们称函数 A 为回调函数
简单理解: 当一个函数当做参数来传递给另外一个函数的时候,这个函数就是回调函数
- 常见使用场景
funciton fn(){
console.log('我是回调函数')
}
//fn传递给了setInterval ,fn就是回调函数
setInterval(fn,1000)
环境变量
环境对象指的是函数内部特殊的变量 this ,它代表着当前函数运行时所处的环境
作用:弄清楚this的指向,可以让我们代码更简洁
- 函数的调用方式不同,this 指代的对象也不同
- 谁调用, this 就是谁】 是判断 this 指向的粗略规则
- 直接调用函数,其实相当于是 window.函数,所以 this 指代 window
案例
tab切换
需求:点击不同的选项卡,底部可以显示 不同的内容
分析:
①:点击当前选项卡,当前添加类,其余的兄弟移除类, 排他思想
②:下面模块盒子全部隐藏,当前的模块显示
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8" />
<title></title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
ul {
list-style: none;
}
.wrapper {
width: 1000px;
height: 475px;
margin: 0 auto;
margin-top: 100px;
}
.tab {
border: 1px solid #ddd;
border-bottom: 0;
height: 36px;
width: 320px;
}
.tab li {
position: relative;
float: left;
width: 80px;
height: 34px;
line-height: 34px;
text-align: center;
cursor: pointer;
border-top: 4px solid #fff;
}
.tab span {
position: absolute;
right: 0;
top: 10px;
background: #ddd;
width: 1px;
height: 14px;
overflow: hidden;
}
.products {
width: 1002px;
border: 1px solid #ddd;
height: 476px;
}
.products .main {
float: left;
display: none;
}
.products .main.active {
display: block;
}
.tab li.active {
border-color: red;
border-bottom: 0;
}
</style>
</head>
<body>
<div class="wrapper">
<ul class="tab">
<li class="tab-item active">国际大牌<span>◆</span></li>
<li class="tab-item">国妆名牌<span>◆</span></li>
<li class="tab-item">清洁用品<span>◆</span></li>
<li class="tab-item">男士精品</li>
</ul>
<div class="products">
<div class="main active">
<a href="###"><img src="imgs/guojidapai.jpg" alt="" /></a>
</div>
<div class="main">
<a href="###"><img src="imgs/guozhuangmingpin.jpg" alt="" /></a>
</div>
<div class="main">
<a href="###"><img src="imgs/qingjieyongpin.jpg" alt="" /></a>
</div>
<div class="main">
<a href="###"><img src="imgs/nanshijingpin.jpg" alt="" /></a>
</div>
</div>
</div>
<script>
let lis = document.querySelectorAll('.tab > li ')
let mains = document.querySelectorAll('.products > .main')
for (let i = 0; i < lis.length; i++) {
lis[i].addEventListener('click', function () {
//1.导航项处理
//先清除 当前有active样式的li元素
document.querySelector('.tab > li.active').classList.remove('active')
//为当前点击的元素添加active
this.classList.add('active')
//2.内容面板处理
//清除当前有active样式的div
document.querySelector('.products > div.main').classList.remove('active')
//让当前与导航项对应索引位置的内容面板 添加active样式
mains[i].classList.add('active')
})
}
</script>
</body>
</html>
随机点名案例
分析:
①:点击的是按钮
②:随机抽取一个名字
③: 当名字抽取完毕,则利用 disabled 设置为 true
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>05-随机点名-进阶版</title>
<style>
p {
margin: 0 auto;
margin-top: 100px;
font-size: 30px;
width: 400px;
height: 200px;
border: 2px solid red;
text-align: center;
line-height: 200px;
}
div {
width: 400px;
margin: 0 auto;
display: flex;
justify-content: space-between;
background: url();
}
button {
margin-top: 20px;
width: 100px;
height: 40px;
}
</style>
</head>
<body>
<p>这里显示中奖幸运儿</p>
<div>
<button class="start">开始随机点名</button>
<button class="end">结束随机点名</button>
</div>
<script>
let p = document.querySelector('p')
let start = document.querySelector('button:nth-of-type(1)')
let end = document.querySelector('button:nth-of-type(2)')
// console.log(start);
let names = [
`曹辰俊`,
`邓天诚`,
`曾文旭`,
`曾梓瑞`,
`陈雅欣`,
]
console.log(names)
let timeId, index
//开始按钮
start.addEventListener('click', function () {
start.disabled = true
clearInterval(timeId)
timeId = setInterval(function () {
//定义随机数
index = parseInt(Math.random() * names.length)
//赋值
p.innerText = names[index]
}, 10)
})
//结束按钮
end.addEventListener('click', function () {
start.disabled = false
clearInterval(timeId)
})
</script>
</body>
</html>
\