事件对象
什么是事件对象
- 也是一个对象,对象中有事件触发时的相关信息
- 例如:鼠标点击事件中,事件对象就存放了鼠标点在了哪个位置等信息
使用场景是什么
- 可以判断用户按下哪个键,比如按下回车可以发布留言
- 可以判断鼠标点击了哪个元素,从而做出相应的操作
获取事件对象
-
语法
- 在事件绑定的回调函数的第一个参数就是事件对象
Element.addEventListener('click', function(e){ //e就是事件对象 //可以使用e.方法名/属性名来使用事件对象 })
- 举个🌰
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <button type="button">点击</button> <input type="text" name="" id=""> <script> const input = document.querySelector('input') input.addEventListener('keyup',function(e){ //使用key属性获取用户按的是哪个键 if(e.key === 'Enter') //判断用户按下的是不是回车键 { console.log('回车键按下'); } }) </script> </body> </html>
- 效果
-
部分常用属性
-
type
- 获取当前事件类型
-
clientX/clientY
-
获取光标相对于浏览器可见窗口左上角的位置
console.log(e.clientX);
-
-
offsetX/offsetY
-
获取光标相对于当前 DOM 元素左上角的位置
console.log(e.offsetX);
-
-
key
- 用户按下的键盘键的值
console.log(e.key)
-
案例
实现按下回车发送消息
<!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>
.wrapper {
min-width: 400px;
max-width: 800px;
display: flex;
justify-content: flex-end;
}
.avatar {
width: 48px;
height: 48px;
border-radius: 50%;
overflow: hidden;
background: url(./images/avatar.jpg) no-repeat center / cover;
margin-right: 20px;
}
.wrapper textarea {
outline: none;
border-color: transparent;
resize: none;
background: #f5f5f5;
border-radius: 4px;
flex: 1;
padding: 10px;
transition: all 0.5s;
height: 30px;
}
.wrapper textarea:focus {
border-color: #e4e4e4;
background: #fff;
height: 50px;
}
.wrapper button {
background: #00aeec;
color: #fff;
border: none;
border-radius: 4px;
margin-left: 10px;
width: 70px;
cursor: pointer;
}
.wrapper .total {
margin-right: 80px;
color: #999;
margin-top: 5px;
opacity: 0;
transition: all 0.5s;
}
.list {
min-width: 400px;
max-width: 800px;
display: flex;
}
.list .item {
width: 100%;
display: flex;
}
.list .item .info {
flex: 1;
border-bottom: 1px dashed #e4e4e4;
padding-bottom: 10px;
}
.list .item p {
margin: 0;
}
.list .item .name {
color: #FB7299;
font-size: 14px;
font-weight: bold;
}
.list .item .text {
color: #333;
padding: 10px 0;
}
.list .item .time {
color: #999;
font-size: 12px;
}
</style>
</head>
<body>
<div class="wrapper">
<i class="avatar"></i>
<textarea id="tx" placeholder="发一条友善的评论" rows="2" maxlength="200"></textarea>
<button>发布</button>
</div>
<div class="wrapper">
<span class="total">0/200字</span>
</div>
<div class="list">
<div class="item" style="display: none;">
<i class="avatar"></i>
<div class="info">
<p class="name">清风徐来</p>
<p class="text">大家都辛苦啦,感谢各位大大的努力,能圆满完成真是太好了[笑哭][支持]</p>
<p class="time">2022-10-10 20:29:21</p>
</div>
</div>
</div>
<script>
const tx = document.querySelector('#tx')
const total = document.querySelector('.total')
const item = document.querySelector('.item')
const text = document.querySelector('.text')
//当文本域获得焦点,将 total 显示出来
tx.addEventListener('focus', function(){
total.style.opacity = 1
})
//失去焦点,就将 total 隐藏
tx.addEventListener('blur', function(){
total.style.opacity = 0
})
//检测用户输入
tx.addEventListener('input', function(){
total.innerHTML=`${tx.value.length}/200字`
})
//绑定键盘事件
tx.addEventListener('keyup',function(e){
if(e.key==='Enter')
{
if(tx.value.trim()!=='') //判断输入是否为空
{
item.style.display = 'block'
text.innerHTML=tx.value
}
tx.value='' // 清空文本域
total.innerHTML='0/200字' //恢复字符数量
}
})
</script>
</body>
</html>
效果
以后就尝试把笔记上传到自己的博客上,不逼一下自己,这些东西容易忘