鼠标类事件
单击 双击
移入:mouseover mouseenter
移出:mouseout mouseleave
例题: 移入大盒子
var box = document.querySelector('.box')
var small = document.querySelector('.small')
box.onmouseenter = function() {
// console.log('移入大盒子了');
// }
移出大盒子
box.onmouseleave = function() {
// console.log('移出大盒子了');
// }
移入小盒子
small.onmouseenter = function() {
// console.log('移入小盒子了');
// }
移出小盒子
// small.onmouseleave = function() {
// console.log('移出小盒子了');
// }
移入大盒子
// box.onmouseover = function() {
// console.log('移入大盒子了');
// }
移出大盒子
// box.onmouseout = function() {
// console.log('移出大盒子了');
// }
移入小盒子
// small.onmouseover = function() {
// console.log('移入小盒子了');
// }
移出小盒子
// small.onmouseout = function() {
// console.log('移出小盒子了');
// }
mouseover和mouseout在触发子标签事件的时候,也会触发父标签事件
鼠标按下:mousedown
// 鼠标弹起:mouseup
// box.onmousedown = function() {
// console.log('按下了');
// }
// box.onmouseup = function() {
// console.log('弹起了');
// }
// 鼠标移动:mousemove
// box.onmousemove = function() {
// console.log('移动了');
// }
// 鼠标右击:contextmenu
// box.oncontextmenu = function() {
// console.log('右击');
// }
// 鼠标滚轮滚动:mousewheel
box.onmousewheel = function() {
console.log('滚动了');
}
键盘事件
keydown:键盘按下 - 按住不松开一直触发
// keyup:键盘弹起 - 弹起的一瞬间,触发一次 ************
// keypress:敲击键盘,其实就是keydown - 按住不松开就一直触发
// window.onkeypress = function() {
// console.log(6666);
document.onkeydown = function(){
console.log('龙哥好')
}
表单事件
获取焦点:focus
失去焦点:blur
表单提交:submit
改变:change
文本框内容变化:input
document.querySelector('input').oninput = function() {
document.querySelector('p').innerText = this.value
}
事件流 / 事件流:事件从开始触发 到 执行结束 中间经历的完整的过程 // 事件流有3个过程:
捕获阶段:由外向内开始找目标元素的过程
目标阶段:找到了目标元素,去执行他的事件函数
冒泡阶段:从目标元素开始,由内向外离开目标元素过程 --- 祖宗标签的同类型事件会在自己事件的冒泡阶段执行
var small = document.querySelector('.small')
var middle = document.querySelector('.middle')
var big = document.querySelector('.big')
small.onclick = function() {
console.log('小');
}
middle.onclick = function() {
console.log('中');
}
big.onclick = function() {
console.log('大');
}
事件侦听器
事件侦听器:另外一种事件的绑定方式
// 以前绑定事件的方式,无法实现 让祖宗标签的同类型事件在捕获阶段执行
// 事件侦听器:可以让祖宗标签的同类型事件在捕获阶段执行
// 语法:
/*
标签.addEventListener(事件类型, 执行的函数)
可以有第三个参数 - 布尔值,自己的事件是否在后代标签的捕获阶段执行,默认false
标签.addEventListener(事件类型, 执行的函数, 布尔值)
事件解绑:将事件删除
为什么解绑?某些特殊情况下,不需要某个事件了。例如,我们按下鼠标拖拽div,当松开鼠标后,不需要拖拽了,就需要在松开鼠标的时候,将移动事件删掉
document.querySelector('button').onclick = function() {
// // 将div的点击事件解绑
// box.onclick = null
// }
如何解绑?
// 根据绑定方式不同,解绑的方式也不同
// 以前的绑定方式 - 标签.on类型 = 函数 在解绑的时候,需要给事件赋值null
// 使用事件侦听器绑定的 - 需要使用另外一个方法进行解绑
// 解绑的语法: 标签.removeEventListener(事件类型, 绑定的那个函数)
box.addEventListener('click', fn)
// function fn() {
// console.log('盒子的点击事件');
// }
注意:解绑的事件类型一定要跟绑定的事件类型相同;解绑的函数一定要跟绑定的函数是同一个
document.querySelector('button').onclick = function() {
// // 解绑div的点击事件
// box.removeEventListener('click', fn)
// }
box.addEventListener('click', function() {
// console.log('盒子的点击事件');
// })
如果使用事件侦听器绑定事件,使用匿名函数的话,就无法解绑了
// document.querySelector('button').onclick = function() {
// // 解绑div的点击事件
// box.removeEventListener('click', function() {
// console.log('盒子的点击事件');
// })
// }
事件对象
事件对象:是一个记录了当前事件更加具体的所有信息的对象
// document.onclick = function() {
// console.log('点击了文档');
// }
在事件中,每个事件都有一个属于自己的对象,用于记录这个事件的详细信息
获取事件对象
事件函数的参数1 - 就是事件对象 在事件函数中,通过 window.event获取
// document.onclick = function(e) {
// console.log(e);
// }
// document.onclick = function() {
// console.log(window.event);
// }
获取鼠标位置
var box = document.querySelector('.box')
box.onclick = function(e) {
// console.log('盒子的点击事件');
// 通过事件对象获取当前鼠标点击的位置
console.log(e);
// clientX clientY 是鼠标相对于当前浏览器可视窗口的坐标
// offsetX offsetY 是鼠标相对于当前标签的坐标
// pageX pageY 是鼠标相对于当前文档的坐标
}
拖拽 = 按下事件配合移动事件 var box = document.querySelector('.box') box.onmousedown = function(e) {
var x1 = e.offsetX
var y1 = e.offsetY
嵌套一个鼠标移动事件 document.onmousemove = function(e) { // 让div重新计算left和top
// 移动过程中,需要获取鼠标在浏览器中坐标
var x = e.clientX
var y = e.clientY
// div的left = 鼠标位置 - div宽度 / 2
// var divLeft = x - box.offsetWidth / 2
// var divTop = y - box.offsetHeight/ 2
var divLeft = x - x1
var divTop = y - y1
获取键盘按键码 document.onkeyup = function(e) { // console.log(e); // 获取按键码 - e.keyCode // console.log(e.keyCode); /* 规律: 字母的按键码 是 对应的大写字母的阿斯克码 数字的按键码 是 对应的数字的阿斯克码
回车键:13
空格:32
左上右下:37 38 39 40
*/
// 有些按键不是单独的使用的,是组合其他键一起使用的,例如:alt shift ctrl
// 事件对象中提供了几个属性:altKey shiftKey ctrlKey 他们的值是布尔值,表示是否按住了对应的键
// console.log(e.ctrlKey);
// 判断是否按住了ctrl+c
var code = e.keyCode // 大写的阿斯克码
var word = String.fromCharCode(code)
word = word.toLowerCase()
console.log(word);
console.log(e.ctrlKey);
if (e.ctrlKey && word === 'c') {
console.log('按住了ctrl+c');
} else {
console.log('没有按住');
}
} 阻止默认行为
有些标签,不用给他绑定事件,默认就能有一定的行为,例如a标签
document.querySelector('a').onclick = function(e) {
// // 阻止默认行为 - e.preventDefault()
// e.preventDefault()
// console.log(111);
// }
默认选中文字 阻止
// document.onselectstart = function(e) {
// e.preventDefault()
// }
阻止右击事件
document.oncontextmenu = function(e) {
// e.preventDefault()
console.log('右击了文档');
// 阻止默认行为,还可在事件函数的末尾 - return false
// return false
}