js事件类型
JS类型事件:
UI事件 鼠标事件 键盘事件...
UI事件
当用户在页面上的元素进行交互时触发
(1)load
当页面完全加载后再window上面触发
我们想要在页面完全加载完之后做出什么操作就可以这样:
window.onload = function(){
console.log('页面加载完毕');
}
(2)unload
当页面完全写卸载后在window上触发,与load事件正好相对应。只要用户从一个页面切换到另一个页面,就会触发unload事件。
而我们利用这个事件最多的办法是清除引用,以避免内存泄漏。
鼠标事件:
当用户通过鼠标在页面上执行操作时触发
/*点击事件*/
<button id="btn">点击</button> /*html代码*/
<script>
/*双击的时候触发*/
btn.ondblclick = function(){
alert("双击事件")
}
/*单击或者回车触发*/
btn.onclick = function(){
alert('单击事件');
}
/*按下鼠标的时候触发*/
btn.onmousedown = function(){
alert('按下事件');
}
/*释放鼠标按钮是触发*/
btn.onmouseup = function(){
alert('释放事件');
}
</script>
事件触发的顺序是这样的:
- 按下事件
- 释放事件
- 单机事件
- 双击事件
/* 移入移出的事件*/
<div id="div"></div>
<script>
/* 当鼠标在元素内部的时候触发*/
div.onmousemove = function(){
alert('mousemove事件触发');
}
/*在鼠标指针位于一个元素上方,然后用户将其移入另一个元素时触发。 */
div.onmouseout = function(){
alert('mouseout事件触发');
}
/*在鼠标指针位于一个元素外部,然后用户首次移入另一个元素边界内时触发*/
div.onmouseover = function(){
alert('mouseover事件触发');
}
</script>
当我们把鼠标移入到div内部的时候,会触发mouseover事件,当我们从元素内部移出的时候,会触发mouseout事件。
但只要我们在div内部移动鼠标,就会触发mousemove事件。
键盘事件:
当用户通过键盘在页面上执行操作时触发
(1) keydown:当用户按下键盘的任意键时触发
(2) keypress:当用户按下键盘上的字符键时触发
(3) keyup:当用户释放键盘的键时触发
Js事件和jQuery事件绑定联系与区别
关于加载DOM
JS:
js中常使用window.onload方法
加载机制:在页面所有元素(包括图片,引用文件)加载完后执行。
编写个数: 不可以同时写多个,后面的将会覆盖前面的
简写: 没有简写
JQuery:
jquery常使用$(document).ready()
加载机制:页面中所有HTML DOM,CSS DOM结构加载完之后就会执行,其他图片可能没有加载完.
如果想要网页所有内容(包括图片等)加载完毕,再注册事件,使用$(window).load(function);等价于window.onload()
编写个数:可以同时写多个
简写:$(function(){}) 或者 $().ready(function(){}) ) 或者$(window).load(function(){})
关于事件绑定
js事件绑定方式:
- 在DOM元素中直接绑定
- 在JavaScript代码中绑定
- 绑定事件监听函数
在DOM元素中直接绑定
这里的DOM元素,可以理解为HTML标签
命名规则:事件处理程序属性的名字由"on"加上事件名组成,并且属性名区分大小写,所有都是小写,即使事件类型是由多个词组,onclick,onchange,onload.onmouseover,
<!-- 原生代码 -->
<input onclick="alert('hello')" type="button" value="点击我,弹出弹框" />
/*自定义函数*/
<input onclick="myAlert()" type="button" value="点击我,弹出弹框" />
<script type="text/javascript">
function myAlert(){
alert("hello");
}
</script>
缺点:每个事件目标对于某种事件类型最多只有一个事件处理程序
window.οnlοad=function(){ alert("one";}
window.οnlοad=function(){alrt("two");}
/*只有two弹窗可以*/
/*想要两个都实现*/
window.οnlοad=function(){
function(){....}
function(){...}
在JavaScript代码中绑定
在JavaScript代码中(即在 script 标签内)绑定事件可以使JavaScript代码与HTML标签分离,文档结构清晰,便于管理和开发。
/* 语法:*/
elementObject.onXXX=function(){\
// 事件处理代码\
elementObject 为DOM对象,即DOM元素。
onXXX 为事件名称。
}
/* 为 id="demo" 的按钮绑定一个事件,显示它的 type 属性:*/
<input id="demo" type="button" value="点击我,显示 type 属性" />
<script>
document.getElementById("demo").onclick=function(){
alert(this.getAttribute("type")); // this 指当前发生事件的HTML元素,
}
</script>
/*注释*/
getAttribute()方法 : 通过元素节点的属性名称获取属性的值。
绑定事件监听函数
绑定事件的另一种方法是用 addEventListener() 或 attachEvent() 来绑定事件监听函数。
addEventListener()函数语法: elementObject.addEventListener(eventName,handle,useCapture);
| 参数 | 说明 |
|---|---|
| elementObject | DOM对象(即DOM元素)。 |
| eventName | 事件名称。注意,这里的事件名称没有“ on ”,如鼠标单击事件 click ,鼠标双击事件 doubleclick ,鼠标移入事件 mouseover,鼠标移出事件 mouseout 等。 |
| handle | 事件句柄函数,即用来处理事件的函数。 |
| useCapture | Boolean类型,是否使用捕获,一般用false 。这里涉及到JavaScript事件流的概念,后续章节将会详细讲解。 |
attachEvent()函数语法:
elementObject.attachEvent(eventName,handle);
| 参数 | 说明 |
|---|---|
| elementObject | DOM对象(即DOM元素)。 |
| eventName | 事件名称。注意,与addEventListener()不同,这里的事件名称有“ on ”,如鼠标单击事件 onclick ,鼠标双击事件 ondoubleclick ,鼠标移入事件 onmouseover,鼠标移出事件 onmouseout 等。 |
| handle | 事件句柄函数,即用来处理事件的函数。 |
注意:事件句柄函数是指“ 函数名 ”,不能带小括号。 |
addEventListener()是标准的绑定事件监听函数的方法,是W3C所支持的,Chrome、FireFox、Opera、Safari、IE9.0及其以上版本都支持该函数;但是,IE8.0及其以下版本不支持该方法,它使用attachEvent()来绑定事件监听函数。所以,这种绑定事件的方法必须要处理浏览器兼容问题。
下面绑定事件的代码,进行了兼容性处理,能够被所有浏览器支持:
function addEvent(obj,type,handle){
try{ // Chrome、FireFox、Opera、Safari、IE9.0及其以上版本
obj.addEventListener(type,handle,false);
}catch(e){
try{ // IE8.0及其以下版本
obj.attachEvent('on' + type,handle);
}catch(e){ // 早期浏览器
obj['on' + type] = handle;
}
}
}
/*这里使用 try{ ... } catch(e){ ... } 代替 if ... else... 语句,避免浏览器出现错误提示。*/
为一个 id="demo" 的按钮绑定事件,鼠标单击时弹出警告框:
addEvent(document.getElementById("demo"),"click",myAlert);
function myAlert(){
alert("又是一个警告框");
}
JQuery的绑定事件
bind() 、 on() (两者其实类似)
bind()bind()函数用于为每个匹配元素的一个或多个事件绑定事件处理函数。
2、bind(event,data,function) 参数说明
event事件 :是必需要写的。规定添加到元素的一个或多个事件。由空格分隔多个事件。而且必须是有效的事件。
data数据 可选 :作为event.data属性值传递给事件对象的额外数据对象
function 必需 :规定当事件发生时运行的函数。
/*示例*/
<script src="/jquery/jquery.js"></script>
<script >
$(document).ready(function(){
$("button").bind("click",function(){
$("div").slideToggle();
});
});
</script>
on()on() 方法在被选元素及子元素上添加一个或多个事件处理程序。
on(event,childSelector,data,function) 参数说明 event必需: 规定要从被选元素移除的一个或多个事件或命名空间。由空格分隔多个事件值。必须是有效的事件。
childSelector 可选。 规定只能添加到指定的子元素上的事件处理程序(且不是选择器本身,比如已废弃的 delegate() 方法)。
data 可选。规定传递到函数的额外数据。
function 可选。规定当事件发生时运行的函数。
/*案例*/
<script src="http://cdn.static.runoob.com/libs/jquery/1.10.2/jquery.min.js">
</script>
<script>
$(document).ready(function(){
$("p").on("click",function(){
alert("The paragraph was clicked.");
});
});
</script>
事件对象
在触发DOM上的某个事件时候,会产生一个事件事件对象event。
evevt的属性
| 属性 | 说明 |
|---|---|
| timeStamp | 返回事件生成的日期和时间 |
| bubbles | 返回布尔值,指示事件是否是气泡事件类型 |
| button | 返回当事件被触发时,哪个鼠标按钮点击 |
| pageX | 光标相对于该网页的水平位置(ie无) |
| pageY | 光标相对于该网页的垂直位置(ie无) |
| screenX | 光标相对于该屏幕的水平位置 |
| screenY | 光标相对于该屏幕的垂直位置 |
| target | 该事件被传送的对象 |
| type | 事件的类型 |
| clientX | 光标相对于该网页的水平位置(当前区域可见) |
| clientY | 光标相对于该网页的垂直位置 |
事件对象方法
| 方法 | 描述 |
|---|---|
| stopPropagation() | 阻止冒泡 |
| preventDefault() | 阻止默认事件(默认行为),例如:a标签的跳转 |
分享暂时先到这里,有错误之处欢迎指出,非常感谢!!