DOM- 事件高级
DOM- 事件高级1.事件对象1.1 获取事件对象1.2 事件对象常用属性clientX/clientY、offsetX/offsetY与pageX/pageY的区别clientX/clientY:指在可视窗口的距离左上角的位置offsetX/offsetY:指在一个元素/盒子里的距离其左上角的位置pageX/pageY:指整个页面大小的距离左上角多少的位置案例源代码<!DOCTYPE ht
·
DOM- 事件高级
1.事件对象
1.1 获取事件对象
1.2 事件对象常用属性
clientX/clientY、offsetX/offsetY与pageX/pageY的区别
- clientX/clientY:指在可视窗口的距离左上角的位置
- offsetX/offsetY:指在一个元素/盒子里的距离其左上角的位置
- pageX/pageY:指整个页面大小的距离左上角多少的位置
案例
源代码
<!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>Document</title>
<style>
img {
position: absolute;
left: 0;
top: 0;
}
</style>
</head>
<body>
<img src="./images/tianshi.gif" alt="">
<script>
let img = document.querySelector('img')
document.addEventListener('mousemove', function(e) {
img.style.left = e.pageX - 40 + 'px'
img.style.top = e.pageY - 50 + 'px'
})
</script>
</body>
</html>
2.事件流
2.1 事件流和两个阶段说明
2.2 事件捕获和事件冒泡
2.3 阻止事件流动
3.事件委托
案例
源代码
<!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>Document</title>
</head>
<body>
<ul>
<li>第1个小li</li>
<li>第2个小li</li>
<li>第3个小li</li>
<li>第4个小li</li>
<li>第5个小li</li>
</ul>
<script>
let ul = document.querySelector('ul')
ul.addEventListener('click', function(e) {
e.target.style.color = 'red'
})
</script>
</body>
</html>
4.综合案例
源代码
<!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>Document</title>
<link rel="stylesheet" href="css/user.css">
</head>
<body>
<h1>新增学员</h1>
<div class="info">
姓名:<input type="text" class="uname">
年龄:<input type="text" class="age">
性别: <select name="gender" id="" class="gender">
<option value="男">男</option>
<option value="女">女</option>
</select>
薪资:<input type="text" class="salary">
就业城市:<select name="city" id="" class="city">
<option value="北京">北京</option>
<option value="上海">上海</option>
<option value="广州">广州</option>
<option value="深圳">深圳</option>
<option value="曹县">曹县</option>
</select>
<button class="add">录入</button>
</div>
<h1>就业榜</h1>
<table>
<thead>
<tr>
<th>学号</th>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
<th>薪资</th>
<th>就业城市</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<!-- <tr>
<td>1001</td>
<td>欧阳霸天</td>
<td>19</td>
<td>男</td>
<td>15000</td>
<td>上海</td>
<td>
<a href="javascript:">删除</a>
</td>
</tr> -->
</tbody>
</table>
<script>
// 1. 准备好数据后端的数据
let arr = [
{ stuId: 1001, uname: '欧阳霸天', age: 19, gender: '男', salary: '20000', city: '上海' },
{ stuId: 1002, uname: '令狐霸天', age: 29, gender: '男', salary: '30000', city: '北京' },
{ stuId: 1003, uname: '诸葛霸天', age: 39, gender: '男', salary: '2000', city: '北京' },
]
let tbody = document.querySelector('tbody')
let add = document.querySelector('.add')
let uname = document.querySelector('.uname')
let age = document.querySelector('.age')
let gender = document.querySelector('.gender')
let salary = document.querySelector('.salary')
let city = document.querySelector('.city')
//渲染页面函数
function render() {
//先删除之前的
tbody.innerHTML = ''
//再渲染新的页面
for(let i = 0; i < arr.length; i++) {
//创建tr
let tr = document.createElement('tr')
//填入内容
tr.innerHTML = `
<td>${arr[i].stuId}</td>
<td>${arr[i].uname}</td>
<td>${arr[i].age}</td>
<td>${arr[i].gender}</td>
<td>${arr[i].salary}</td>
<td>${arr[i].city}</td>
<td>
<a href="javascript:" id = "${i}">删除</a>
</td>
`
//添加到tbody
tbody.appendChild(tr)
}
}
render()
//添加数据
add.addEventListener('click', function() {
arr.push({
stuId: arr[arr.length - 1].stuId + 1,
uname: uname.value,
age: age.value,
gender: gender.value,
salary: salary.value,
city: city.value
})
render()
uname.value = age.value = salary.value = ''
gender.value = '男'
city.value = '北京'
})
//删除内容
tbody.addEventListener('click', function(e) {
if(e.target.tagName === 'A') {
arr.splice(e.target.id, 1)
}
render()
})
</script>
</body>
</html>
第四阶段over
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献1条内容
所有评论(0)