一. 事件类型
(1)事件的定义
指的是文档或者浏览器窗口中发生的一些特定交互瞬间。我们可 以通过侦听器(或者处理程序)来预定事件,以便事件发生的时候执 行相应的代码。(可以理解为接受了指令才会去完成)
(2)事件类型:
事件类型是一个用来说明发生什么类型事件的字符串。像鼠标悬浮, 按下键盘等。我们也可以把事件类型叫做事件名字,用特定的名字来标识所谈论 的特定类型的事件。
(3)事件目标:
事件目标是发生的事件或与之相关的对象。当讲事件时,我们必须 同时指定类型和目标。像 window 上的 load 事件或者链接的 click 事件。在客户 端 js 的应用程序中,Window、Document、和 Element 对象是最常见的事件目标, 但是某些事件也是由其它类型的对象触发的。
(4)事件处理程序或事件监听程序:
我们用户在页面中进行的点击这个动作, 鼠标移动的动作,网页页面加载完成的动作等,都可以称之为事件名称,即: click、mousemove、load 等都是事件的名称。响应某个事件的函数则称为事件 处理程序,或者叫做事件侦听器。
(5)事件对象:
事件对象是与特定事件相关且包含有关该事件详细信息的对象。事 件对象作为参数传递给事件处理程序函数。
所有的事件对象都有用来指定事件类 型的 type 属性和指定事件目标的 target 属性。每个事件类型都为其相关的事件对象定义一组属性。
(6)事件传播:
事件传播是浏览器决定那个对象触发其事件处理程序的过程。
二.事件模型
(1).内联模型:
指的是行间的事件,写入html标签之中,这种写法不能保证内容和结构进行分离,所以不建议使用,要保证页面的简洁性,以及体验度.
(2).脚本模型:
由于内联模型违反了html和js的分离原则,为了解决这个问题,我们可以在JavaScript中处理事件,这种处理方式就是脚本模型.
(3).DOM2模型:
定义了两个方法,用于添加事件和删除事件处理程序的操作:addEventListener()和removerEventListenner().它们都接受3个参数:事件名,函数,冒泡或捕获的布尔值.
三.传统事件
1.鼠标事件:
(1)onclick:用户点击某个对象时调用的事件.
例如:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
window.onload=function(){
var divElement=document.getElementsByClassName('div1')[0];//获取页面的div
//(1)onclick点击事件
//给获取到的div元素注册/添加一个点击事件
//或者可以理解为添加一个监听的处理程序
//然而这种添加事件的方式属于比较传统的方式
divElement.onclick=function(){
divElement.style.background='green';
}
}
</script>
</head>
<body>
<div class="div1" style="border: 1px solid red;width: 200px;height: 200px;" ></div>
</body>
</html>
(2).oncontextmenu:在用户点击鼠标右键打开上下文菜单时触发
(3)ondblclick:用户双击某一对象时调用的事件(鼠标左键)
例如:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
window.onload=function(){
var divElement=document.getElementsByClassName('div1')[0];//获取页面的div
//(3)ondblclick:用户双击某一对象时调用的事件
divElement.ondblclick=function(){
divElement.style.background='blue';
}
}
</script>
</head>
<body>
<div class="div1" style="border: 1px solid red;width: 200px;height: 200px;" ></div>
</body>
</html>
(4)onmousedown:鼠标按钮被按下调用的事件(鼠标左键/右键).
例如:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
window.onload=function(){
var divElement=document.getElementsByClassName('div1')[0];//获取页面的div
//(4)onmousedown:鼠标按钮被按下调用的事件(鼠标左键/右键)
divElement.onmousedown=function(){
divElement.style.borderRadius=20+'px';
}
}
</script>
</head>
<body>
<div class="div1" style="border: 1px solid red;width: 200px;height: 200px;" ></div>
</body>
</html>
(5)onmouseenter:鼠标指针移动到某一对象上(悬浮).
例如:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
window.onload=function(){
var divElement=document.getElementsByClassName('div1')[0];//获取页面的div
//(5)onmouseenter:鼠标指针移动到某一对象上(悬浮)
divElement.onmouseenter=function(){
divElement.style.background='pink';
}
}
</script>
</head>
<body>
<div class="div1" style="border: 1px solid red;width: 200px;height: 200px;" ></div>
</body>
</html>
(6)onmouseleave:鼠标离开对象时.
例如:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
window.onload=function(){
var divElement=document.getElementsByClassName('div1')[0];//获取页面的div
//(6)onmouseleave:鼠标离开对象时.
divElement.onmouseleave=function(){
divElement.style.borderRadius=50+'%';
}
}
</script>
</head>
<body>
<div class="div1" style="border: 1px solid red;width: 200px;height: 200px;" ></div>
</body>
</html>
(7)onmousemove:鼠标被移动时
例如:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
window.onload=function(){
var divElement=document.getElementsByClassName('div1')[0];//获取页面的div
//(7)onmousemove:鼠标被移动时
divElement.onmousemove=function(){
divElement.style.borderRadius=50+'%';
}
}
</script>
</head>
<body>
<div class="div1" style="border: 1px solid red;width: 200px;height: 200px;" ></div>
</body>
</html>
(8)onmouseup:鼠标按键被松开.
例如:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
window.onload=function(){
var divElement=document.getElementsByClassName('div1')[0];//获取页面的div
//(8)onmouseup:鼠标按键被松开.
divElement.onmouseup=function(){
divElement.style.borderRadius=50+'%';
divElement.style.background='aqua';
}
}
</script>
</head>
<body>
<div class="div1" style="border: 1px solid red;width: 200px;height: 200px;" ></div>
</body>
</html>
(9)onmousewheel:鼠标滑轮事件.
例如:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
window.onload=function(){
var divElement=document.getElementsByClassName('div1')[0];//获取页面的div
//(9)onmousewheel:鼠标滑轮事件.
divElement.onmousewheel=function(){
divElement.style.background='yellow';
}
}
</script>
</head>
<body>
<div class="div1" style="border: 1px solid red;width: 200px;height: 200px;" ></div>
</body>
</html>
(10)onmouseover:鼠标移到某个元素之上.
例如:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
window.onload=function(){
var divElement=document.getElementsByClassName('div1')[0];//获取页面的div
//(10)onmouseover:鼠标移到某个元素之上.
divElement.onmouseover=function(){
divElement.style.background='grey';
}
}
</script>
</head>
<body>
<div class="div1" style="border: 1px solid red;width: 200px;height: 200px;" ></div>
</body>
</html>
(11)onmouseout:鼠标从某元素离开.
例如:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
window.onload=function(){
var divElement=document.getElementsByClassName('div1')[0];//获取页面的div
//(11)onmouseout:鼠标从某元素离开.
divElement.onmouseout=function(){
divElement.style.background='grey';
}
}
</script>
</head>
<body>
<div class="div1" style="border: 1px solid red;width: 200px;height: 200px;" ></div>
</body>
</html>
2.键盘事件:
(1)onkeydown:某个键盘按键被按下.
例如:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
window.onload=function(){
//获取页面元素
var text1=document.getElementById('txt1');
var span=document.getElementById('span1');
text1.onkeydown=function(){
//在键盘按下的时候 将信息(填入完整的内容) 写进span标签中
span.innerHTML='填入完整内容'
}
}
</script>
</head>
<body>
<input type="text" id="txt1" />
<span id="span1"></span>
</body>
</html>
(2)onkeypress:某个键盘按键被按下并松开.
例如:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
window.onload=function(){
//获取页面元素
var text1=document.getElementById('txt1');
var span=document.getElementById('span1');
text1.onkeypress=function(){
span.innerHTML='填入完整的内容 按下并松开发生';
}
}
</script>
</head>
<body>
<input type="text" id="txt1" />
<span id="span1"></span>
</body>
</html>
(3)onkeyup:某个键盘按键被松开
例如:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
window.onload=function(){
//获取页面元素
var text1=document.getElementById('txt1');
var span=document.getElementById('span1');
text1.onkeyup=function(){
span.innerHTML='填入完整的内容 松开发生';
}
}
</script>
</head>
<body>
<input type="text" id="txt1" />
<span id="span1"></span>
</body>
</html>
问题来了:我们如何如何获取到键盘的字符?
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
function myform(event){
//keyCode获取按下的键盘按键Unicode值,属性返回onkeypress事件触发的键的值得字符代码,或者onkeyup或onkeydown事件的键的代码.
var code=event.keyCode;
//如果需要将Unicode值转换为字符,可以使用formCharCode()方法
//formCharCode()方法可以接受一个指定的Unicode值,然后返回一个字符串(详解参考菜鸟教程)
var str2=String.fromCharCode(code);
document.getElementById('demo').innerHTML='数字:'+code+'=字符'+str2;
}
</script>
</head>
<body>
<p>请输入键盘按键</p>
<input type="text" size="40" onkeypress="myform(event)"/>
<p id="demo"></p>
</body>
</html>
3.事件对象EVent
(1)什么是事件对象?
在触发DOM上的事件时,会产生一个事件的对象event,这个对象中包含着所有与事件有关的信息.包括导致事件的元素,事件的类型以及其他与特定事件相关的信息.
(2)event对象的兼容性写法
event事件对象不能兼容所有的浏览器,我们一般采用下面这种方式进行兼容
var oEvent=ev || event; 如果参数不是 ev 而是 event 的时候,兼容方式也可以写成下面这种格式。 document.οnclick=function(event){ var oEvent=event || window.event; console.log(oEvent); }
(3)event常用属性有哪些?
oEvent.type:获取绑定事件的类型
oEvent.target:(在IE中用event.srcElement)返回触发事件的元素.
oEvent.currentTarget:(IE低版本中不存在)表示当前所绑定事件的元素
例如:
<script type="text/javascript">
window.onload=function(){
document.onclick=function(ev){
//将事件的对象参数ev 或者event添加给变量oEvent;
var oEvent=ev || event;
//通过设置oEvent.target 或者oEvent.srcElement 返回触发事件的元素
var onCurrent=oEvent.target || oEvent.srcElement;
console.log(onCurrent); //返回结果为:"[object HTMLInputElement]"
//表示当前所绑定事件的元素
console.log(oEvent.currentTarget); //返回结果为:"[object HTMLDocument]"
console.log(oEvent.type); //输出结果为:"click"
}
}
</script>
4.目标事件:
5.表单事件:
例如:
<script type="text/javascript">
window.onload=function(){
//获取form表单,从而添加提交事件
var form=document.getElementById('form1');
form.onsubmit=function(){
//表示通过name获取表单元素的值
var name=document.form1.text1.value;
}
}
</script>
...........
<body>
<form name="form1" action="" id="form1" method="post">
<input type="text" value="" name="text1" />
<br />
<input type="submit" name="submit_01" value="提交"/>
</form>
</body>
例如:提交表单事件:输入两次密码一致时,登陆成功,否则重新输入
<script type="text/javascript">
// 输入两次密码一致时,登陆成功,否则重新输入
function form_submit(){
var pwd1=document.for1.pwd.value;
var pwd2=document.for1.pwd1.value;
if(pwd1!=''|| pwd1!=null && pwd2!='' || pwd2!=null){
if(pwd1==pwd2){
return true; //提交成功
}else if{
alert('密码不一致,请重新输入');
document.for1.pwd.value='';
document.for1.pwd.focus(); //添加焦点
document.for1.pwd1.value='';
return false;
}else{
alert('密码不可以为空.....');
}
}
}
</script>
.......................
<body>
<form action="success.html" name="for1" onsubmit="return form_Submit();" method="post">
会员名:<input type="text" name="username" />
<br />
密码:<input type="password" name="pwd" />
<br />
确认密码:<input type="password" name="pwd1" />
<br />
<input type="submit" />
</form>
</body>
问题来了?:
鼠标离开(失去焦点事件)文本框1的时候,将其文本框值转换为大写/鼠标放进(获得焦点事件)文本框1的时候,将其背景颜色转换为红色.
<script type="text/javascript">
//问题:鼠标离开(失去焦点事件)文本框1的时候,将其文本框值转换为大写
function blur_01(value){
TextUpperCase(value);//在一个函数中调用另一个函数
}
//以下这个函数是用来转换为大写的函数
function TextUpperCase(value){
document.write(value.toUpperCase());
}
//鼠标放进(获得焦点事件)文本框1的时候,将其背景颜色转换为红色
function focus_01(color){
//document.getElementById('fname').style.background=color;
//上句代码的转化(另一种书写格式)
var color1=document.getElementById('fname');
color1.style.background=color;
}
</script>
....................
<body>
<!--blur_01(this.value): this指向的是事件的目标 在这里是第一个input文本框-->
<p>请输入你的英文名字: <input type="text" id="fname" onfocus="focus_01('red');" onblur="blur_01(this.value)"></p>
<p>请输入你的年龄: <input type="text" id="age"></p>
</body>
问题来了:如何判断表单元素不可以为空?
<script type="text/javascript">
function btn_Click(){
var myform=document.getElementById('myform');
for (var i=0;i<myform.length;i++) {
if(myform.elements[i].value==""){
alert(myform.elements[i].title+"不能为空!");
myform.elements[i].focus();
return;
}
else{
document.write('恭喜你中奖了')
}
}
myform.submit();
}
</script>
...........
<body>
<form name="for1" id="myform">
账户:<input type="text" name="username" value="请输入InLett账户" onfocus="focu();" onblur="blu();" />
<span id="span1"></span>
<br />
密码:<input type="password" name="pwd" value="****" />
<br />
<input type="button" name="deng" value="登录" onclick="btn_Click();" />
</form>
</body>
6.动画事件:
7.过渡事件: