JS DOM 事件类型
1. 鼠标事件
- 鼠标点击:click
- 鼠标经过:mouseenter
- 鼠标离开:mouseleave
案例1 全选 反选
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>全选文本框</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
table {
border-collapse: collapse;
border-spacing: 0;
border: 1px solid #c0c0c0;
width: 500px;
text-align: center;
}
th {
background-color: #09c;
border: 1px solid #09c;
font: bold 16px "微软雅黑";
color: #fff;
height: 24px;
}
td {
border: 1px solid #d0d0d0;
color: #404060;
padding: 10px;
}
/* .allCheck {
width: 80px;
} */
</style>
</head>
<body>
<table border="solid">
<tr>
<th><input type="checkbox" id="allCheck" /> <span>全选</span></th>
<th>商品</th>
<th>商家</th>
<th>价格</th>
</tr>
<tr>
<td><input type="checkbox" class="ck" /></td>
<td>小米净水器</td>
<td>小米</td>
<td>¥1999</td>
</tr>
<tr>
<td><input type="checkbox" class="ck" /></td>
<td>小米净水器</td>
<td>小米</td>
<td>¥1999</td>
</tr>
<tr>
<td><input type="checkbox" class="ck" /></td>
<td>小米净水器</td>
<td>小米</td>
<td>¥1999</td>
</tr>
<script>
// 获取元素
let all = document.querySelector("#allCheck");
let cks = document.querySelectorAll(".ck");
let span = document.querySelector("span");
console.log(all);
console.log(cks);
all.addEventListener("click", function () {
for (let i = 0; i < cks.length; i++) {
cks[i].checked = all.checked;
}
all.checked === true
? (span.innerHTML = "取消")
: (span.innerHTML = "全选");
});
// 小按钮的做法
for (let i = 0; i < cks.length; i++) {
cks[i].addEventListener("click", function () {
for (let j = 0; j <cks.length; j++) {
if (cks[j].checked === false) {
// 赋值号是=,不是===
all.checked = false;
span.innerHTML = "全选"
return;
}
}
console.log(all.checked);
all.checked = true;
console.log(all.checked);
span.innerHTML = "取消"
}
);
}
</script>
</table>
</body>
</html>
案例2 购物车数量加减操作
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>购物车数量加减操作</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
div {
display: block;
}
.box {
display: flex;
justify-content: space-between;
width: 150px;
height: 100px;
border: 1px solid #c0c0c0;
}
.num {
flex: 1;
text-align: center;
line-height: 100px;
}
.right {
width: 50px;
}
button {
width: 50px;
height: 50px;
}
</style>
</head>
<body>
<div class="box">
<input class="num" value=0 readonly></input>
<div class="right">
<button class="plus">+</button>
<button class="minus">-</button>
</div>
</div>
<script>
// 获取元素
let num = document.querySelector('.num')
let plus = document.querySelector('.plus')
let minus = document.querySelector('.minus')
plus.addEventListener('click', function () {
num.value++
if (num.value <= 1) {
minus.disabled = true
} else {
minus.disabled = false
}
})
minus.addEventListener('click', function () {
num.value--
if (num.value <= 1) {
minus.disabled = true
}
})
</script>
</body>
</html>
2. 表单焦点
1.获得焦点 :focus
2. 失去焦点:blur
案例:搜索框,获得焦点,显示下拉菜单;失去焦点,隐藏下拉菜单。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>搜索框</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
ul {
list-style: none;
}
.mi {
position: relative;
width: 223px;
margin: 100px auto;
}
.mi input {
width: 223px;
height: 48px;
padding: 0 10px;
font-size: 14px;
line-height: 48px;
border: 1px solid #e0e0e0;
outline: none;
transition: all .5s;
}
.mi .search {
border: 1px solid #ff6700;
}
.result-list {
display: none;
position: absolute;
left: 0;
top: 48px;
width: 223px;
border: 1px solid #ff6700;
border-top: 0;
background: #fff;
}
.result-list a {
display: block;
padding: 6px 15px;
font-size: 12px;
color: #424242;
text-decoration: none;
}
.result-list a:hover {
background-color: #eee;
}
</style>
</head>
<body>
<div class="mi">
<input type="search" placeholder="小米笔记本" />
<ul class="result-list">
<li><a href="#">全部商品</a></li>
<li><a href="#">小米11</a></li>
<li><a href="#">小米10S</a></li>
<li><a href="#">小米笔记本</a></li>
<li><a href="#">小米手机</a></li>
<li><a href="#">黑鲨4</a></li>
<li><a href="#">空调</a></li>
</ul>
</div>
<script>
// 获取对象
let search = document.querySelector("input");
let list = document.querySelector(".result-list");
// 获得焦点
search.addEventListener("focus", function () {
search.classList.add("search");
list.style.display = "block";
});
// 失去焦点
search.addEventListener("blur", function () {
search.classList.remove("search");
list.style.display = "none";
});
// 鼠标经过
search.addEventListener("mouseenter", function () {
search.classList.add("search");
list.style.display = "block";
});
// 鼠标离开
search.addEventListener("mouseleave", function () {
search.classList.remove("search");
list.style.display = "none";
});
</script>
</body>
</html>
3. 键盘事件
- 键盘按下:keydown
- 键盘抬起:keyup
4. 文本事件
- 用户输入:input
案例 :自动计算用户输入的文本字数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>计算用户输入的数字</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
div .bottom {
position: relative;
width: 200px;
}
textarea {
width: 200px;
height: 100px;
border: 1px solid #000;
border-radius: 5px;
text-align: left;
}
button {
position: absolute;
width: 50px;
right: 0;
margin: 10px 0;
background-color: skyblue;
}
span {
position: absolute;
right: 60px;
margin: 10px 0;
}
.count{
position:absolute;
right: 100px;
color: red;
margin: 10px 0;
}
</style>
</head>
<body>
<div>
<!-- 使用textarea 而不是input -->
<textarea wrap="hard" maxlength="200"></textarea>
<div class="bottom">
<i class="count">0</i>
<span>/200</span>
<button>发布</button>
</div>
</div>
<script>
let input=document.querySelector('textarea')
let i=document.querySelector('.count')
input.addEventListener('input',function(){
// 获得文本域里的用户输入字符长度
i.innerHTML=input.value.length
})
</script>
</body>
</html>