-
什么是事件
事件就是文档或浏览器窗口中发生的一些特定的交互瞬间,是可以被 JavaScript 侦测到的行为
-
事件特性
-
事件捕获阶段:就是事件从window开始一层一层向目标传递的阶段
-
目标阶段:当事件到达事件发生现场的阶段
-
事件冒泡阶段:和事件捕获阶段相反,事件从目标到window传递的阶段
事件冒泡:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>事件冒泡</title>
</head>
<body>
<div>
<p>点我</p>
</div>
</body>
</html>
点击p元素时传播方向:p-> div-> body-> html-> document
事件捕获:
还是上面的案例,当点击P元素时,事件的传播方向就变成了这样 document-> html->body-> div->p
-
事件类型
-
所有的事件处理函数都由两个部分组成,on+事件名称
-
html事件: 涉及与 BOM 交互的通用浏览器事件。
-
表单事件: 在元素获得和失去焦点时触发。
-
鼠标事件: 使用鼠标在页面上执行某些操作时触发。
-
键盘事件: 使用键盘在页面上执行某些操作时触发。
-
html事件
-
load: 当页面完全加载后在window上面触发,或当框架集加载完毕后在框架集上触发;
-
unload: 当页面完全卸载后在window上面触发,或当框架集卸载后在框架集上触发;
-
select: 当用户选择文本框(input或textarea)中的一个或多个字符触发;
-
change: 当文本框(input或textarea)内容改变且失去焦点后触发;
-
focus: 当页面或者元素获得焦点时在window及相关元素上面触发;
-
submit: 当用户点击提交按钮在
<form>元素上触发; -
reset: 当用户点击重置按钮在
<form>元素上触发; -
resize: 当窗口或框架的大小变化时在window或框架上触发;
-
scroll: 当用户滚动带滚动条的元素时触发;
widow.onload = function(){
console.log('页面加载完毕');
}
widow.onresize = function(){
console.log('页面大小改变');
}
-
表单事件:
- blur: 当元素失去焦点时触发。事件不冒泡。
- focus: 当元素获得焦点时触发。事件不冒泡。
- focusin: 当元素获得焦点时触发。是
focus的冒泡版事件。 - focusout: 当元素失去焦点时触发。是
blur的通用版。
<input type="text" id="text">
<script>
text.onfocus = function(){
console.log('获取焦点')
}
text.onblur = function(){
console.log('失去焦点')
}
</script>
-
鼠标事件:
- click: 单击鼠标按钮时触发;
- dblclick:当用户双击主鼠标按钮时触发;
- mousedown: 当用户按下鼠标还未弹起时触发;
- mouseup: 当用户释放鼠标按钮时触发;
- mouseover: 当鼠标移到某个元素上方时触发;
- mouseout: 当鼠标移出某个元素上方时触发;
- mousemove:当鼠标指针在元素上移动时触发;
- mouseenter: 在鼠标光标从元素外部首次移动至元素范围内触发,不参与冒泡;
- mouseleave:用户把鼠标从悬停的元素上移出时触发。不是冒泡事件,也不会在经过后代元素时触发
<button id="btn">鼠标点击</button>
<script>
btn.ondblclick = function(){
console.log('双击事件')
}
text.onclick = function(){
console.log('单击事件')
}
</script>
<div id="div1"></div>
<script>
div1.onmousemove = function(){
console.log('onmousemove事件触发')
}
div1.onmouseout = function(){
console.log('onmouseout事件触发')
}
div1.onmousemover = function(){
console.log('onmousemover事件触发')
}
</script>
-
键盘事件
- keydown: 按下键盘时触发。
- keypress: 按下键盘上某个键并产生字符时触发。
- keyup: 释放键盘上按键时触发。
事件对象
DOM发生事件时会将相关信息收集并存储在event对象中。该对象会包含一些事件的元素、类型等基本信息。
在浏览器中,event对象是传给事件处理程序的唯一参数。在添加事件处理程序时可以使用事件对象:
<input id="btn" type="button" value="DOM Event Object" onclick="alert(event.type)">
<script>
var btn = document.getElementById("btn");
btn.onclick = function(event) {
alert(event.type);
};
btn.addEventListener("click", (event) => {
alert(event.type);
}, false);
</script>
- bubbles (布尔值) — 表示事件是否冒泡
- cancelable (布尔值) — 表示事件是否可以被取消
- currentTarget(元素) — 前事件处理程序所在的元素
- defaultPrevented (布尔值) — 这个状态变量表明当前事件对象的 preventDefault 方法是否被调用过
- eventPhase (整数) — 表示事件流正被处理到了哪个阶段:1代表捕获阶段,2代表到达目标,3代表冒泡阶段。
- preventDefault(函数) — 用于取消事件的默认行为。只有cancelable为true才可以调用这个方法
- stopImmediatePropagation (函数) — 用于取消后续事件捕获或事件冒泡,并阻止调用任何后续事件处理程序 |
- stopPropagation (函数) — 阻止捕获和冒泡阶段中当前事件的进一步传播
- target (元素) — 事件目标
- type (字符串) — 被触发的事件类型
- isTrusted (布尔值) — true表示事件是由浏览器发起的。false表示事件是由脚本创建、修改、通过EventTarget.dispatchEvent()派发
-
js事件和jquery事件的区别
加载DOM:
- js中常使用window.onload方法
- jquery常使用$(document).ready()
- js的window.onload这个方法是在网页中所有的元素(包括元素的所有关联文件)完全加载到浏览器后才执行
- jqeury的$(document).ready()只要DOM完全就绪时就可以操作了.
| window.onload() | $(document).ready() | |
|---|---|---|
| 执行时机 | 在页面所有元素(包括图片,引用文件)加载完后执行。 | 页面中所有HTML DOM,CSS DOM结构加载完之后就会执行,其他图片可能没有加载完.如果想要网页所有内容(包括图片等)加载完毕,再注册事件,使用$(window).load(function);等价于window.onload() |
| 编写个数 | 不能同时写多个,后面的将会覆盖前面的。ex:window.οnlοad=function(){ alert("A"); }window.οnlοad=function(){ alert("B"); }结果会执行“B”如果想要顺序执行alert("A")和alert("B")需写成window.οnlοad=function(){alert("A");alert("B");} | 可以同时写多个 |
| 简写 | 无 | (document).ready(function(){ //to do;});可写成(document).ready(function() //todo;);可写成().ready(function(){ //()不带参数默认是document //to do;});或(function(){ //to do;}); |
-
操作属性的区别
JS里面用来操作属性的方法:
-
div.setAttribute("","");——设置属性、修改属性
-
div.removeAttribute("");——移除属性,引号里面写一个属性名
-
div.getAttribute();——获取属性
JQUERY里面用来操作属性的方法:
-
添加属性:div.attr("test","aa");——给这个attr方法加入参数,属性名叫做test,属性的值是aa。
-
移除属性:div.removeAttr("test");——移除test这条属性。
-
获取属性:div.attr("test");——在attr方法里面直接写入一个属性的名就可以了。
-
操作样式的区别
JS里面操作样式的关键字是style。
例:
div.style.backgroundColor= "red";
把这个div的背景色设置成为了红色。
jquery里面操作样式的关键字是css。
例:
div.css("background-color","yellow");
把这个div的背景色变为黄色,在这里CSS里面所有的样式和css样式表里面的样式是一模一样的没有任何变化。
注意:
JS操作样式的方法只能获取内联样式,不能取内嵌的和外部的。
jquery操作样式的方法可以是内联的也可以是内嵌的。