javascript事件操作
这里使用一个图片切换的方法来举例说明,如何通过代码操作事件。
1 通过html属性处理事件
<img id='avatar1' src="http://7u2gej.com1.z0.glb.clouddn.com/123.png" onmouseover="changeImg(this,event)" onmouseleave="changeImg(this,event)" width="100px" height="100px">
<script>
var myImage = [
"http://7u2gej.com1.z0.glb.clouddn.com/123.png",
"http://7u2gej.com1.z0.glb.clouddn.com/blog%28hui2%29.png"
]
function changeImg(that, e) {
if (e.type == "mouseleave") {
that.src = myImage[0]
} else {
that.src = myImage[1]
}
}
</script>
使用Event对象的target属性代替this
<img id='avatar1' src="http://7u2gej.com1.z0.glb.clouddn.com/123.png" onmouseover="changeImg(event)"
onmouseleave="changeImg(event)" width="100px" height="100px">
<script>
var myImage = [
"http://7u2gej.com1.z0.glb.clouddn.com/123.png",
"http://7u2gej.com1.z0.glb.clouddn.com/blog%28hui2%29.png"
]
function changeImg(e) {
var el = e.target
if (e.type == "mouseleave") {
el.src = myImage[0]
} else {
el.src = myImage[1]
}
}
</script>
缺点:
- html与js混很容易混在一起,比较难维护修改
- 不修改html就不能修改事件处理程序
- 只能为html代码中出现的元素简历事件处理程序,不能动态创建元素
2 通过对象属性处理事件
对象属性处理事件,可以很好的弥补上面两种方法的缺点。
<img id='avatar' src="http://7u2gej.com1.z0.glb.clouddn.com/123.png" width="100px" height="100px">
<script>
var myImage = [
"http://7u2gej.com1.z0.glb.clouddn.com/123.png",
"http://7u2gej.com1.z0.glb.clouddn.com/blog%28hui2%29.png"
]
function changeImg(e) {
var el = e.target
if (e.type == "mouseleave") {
el.src = myImage[0]
} else {
el.src = myImage[1]
}
}
//执行事件处理程序时,浏览器会自动给处理函数传递Event对象。
document.getElementById("avatar").onmouseover = changeImg;
document.getElementById("avatar").onmouseleave= changeImg;
</script>
3 标准事件模型
3.1 标准方式
通过代码连接到事件的标准方式。并且实际项目中一般都使用这种方法:
<script>
var myImage = [
"http://7u2gej.com1.z0.glb.clouddn.com/123.png",
"http://7u2gej.com1.z0.glb.clouddn.com/blog%28hui2%29.png"
]
var img = document.getElementById("avatar")
function chgImgMouseover(e) {
var el = e.target
el.src = myImage[1]
}
function chgImgMouseleave(e) {
var el = e.target
el.src = myImage[0]
}
//不直接使用每个元素的onmouseover/onmouseleave对象,而是通过addEventListener()注册mouseover/mouseleave事件处理程序
//添加一个事件监听器用来监听mouseover事件
img.addEventListener("mouseover", chgImgMouseover)
img.addEventListener("mouseleave", chgImgMouseleave)
</script>
img.removeEventListener("mouseover",chgImgMouseover) //删除监听mouseover事件的监听器
img.removeEventListener("mouseleave", chgImgMouseleave)
标准事件模型的优点是,可以为一个元素的一个事件注册多个事件监听器,在需要用不同、不相关的函数监听元素上同一个事件时,比较有用。
针对同一个所监听的事件也可以调用多个函数,如下:
//这些函数是按顺序执行的
img.addEventListener("click", funOne)
img.addEventListener("click", funTwo)
img.addEventListener("click", funThree)
img.addEventListener("click", funFour)
3.2 使用匿名函数
<script>
var myImage = [
"http://7u2gej.com1.z0.glb.clouddn.com/123.png",
"http://7u2gej.com1.z0.glb.clouddn.com/blog%28hui2%29.png"
]
var img = document.getElementById("avatar")
img.addEventListener("click", function (e) {
var el = e.target
el.src = myImage[1]
e.preventDefault() //取消事件的默认动作
})
</script>
javascript事件操作的更多相关文章
- 前端JavaScript(2) --常用内置对象,函数,伪数组 arguments,关于DOM的事件操作,DOM介绍
昨日内容回顾 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ...
- 前端(十二)—— JavaScript基础操作:if语句、for循环、while循环、for...in、for...of、异常处理、函数、事件、JS选择器、JS操作页面样式
JavaScript基础操作 一.分支结构 1.if语句 if 基础语法 if (条件表达式) { 代码块; } // 当条件表达式结果为true,会执行代码块:反之不执行 // 条件表达式可以为普通 ...
- Jquery的事件操作和文档操作
对于熟悉前端开发的小伙伴,相信对于Jquery一定不陌生,相对于JavaScript的繁琐,Jquery更加的简洁,当然简洁不意味着简单,我们可以使用Jquery完成我们想要实现全部功能,这里为小白们 ...
- 【移动端兼容问题研究】javascript事件机制详解(涉及移动兼容)
前言 这篇博客有点长,如果你是高手请您读一读,能对其中的一些误点提出来,以免我误人子弟,并且帮助我提高 如果你是javascript菜鸟,建议您好好读一读,真的理解下来会有不一样的收获 在下才疏学浅, ...
- JavaScript事件详解-jQuery的事件实现(三)
正文 本文所涉及到的jQuery版本是3.1.1,可以在压缩包中找到event模块.该篇算是阅读笔记,jQuery代码太长.... Dean Edward的addEvent.js 相对于zepto的e ...
- JavaScript事件详解-Zepto的事件实现(二)【新增fastclick阅读笔记】
正文 作者打字速度实在不咋地,源码部分就用图片代替了,都是截图,本文讲解的Zepto版本是1.2.0,在该版本中的event模块与1.1.6基本一致.此文的fastclick理解上在看过博客园各个大神 ...
- 关于编写性能高效的javascript事件的技术
如何能做出高效的web前端程序是我每次做前端开发都会不自觉去考虑的问题.几年前雅虎里牛逼的前端工程师们出了一本关于提升web前端性能的书籍,轰动了整个web开发技术界,让神秘的web前端优化问题成为了 ...
- 总结JavaScript事件机制
JavaScript事件模型 在各种浏览器中存在三种事件模型: 原始事件模型 , DOM2事件模型 , IE事件模型. 其中原始的事件模型被所有浏览器所支持,而DOM2中所定义的事件模型目前被除了IE ...
- 【转】关于编写性能高效的javascript事件的技术
原文转自:http://blog.jobbole.com/80170/ 如何能做出高效的web前端程序是我每次做前端开发都会不自觉去考虑的问题.几年前雅虎里牛逼的前端工程师们出了一本关于提升web前端 ...
随机推荐
- 【blade利刃出鞘】一起进入移动端webapp开发吧
前言 在移动浪潮袭来的时候,小钗有幸进入框架组做webapp框架开发,过程中遇到了移动端的各种坑,也产生了各种激情,就我们公司的发展历程来说 第一阶段:使用传统方式开发移动站点,少量引入HTML5元素 ...
- css3 transition属性
最近打算学习css3知识,觉得css3写出来的效果好炫好酷,之前一直想要学习来着.可能之前的决心,毅力,耐心不够,所以想要重整起来,放下浮躁的心态,一步一个脚印,踏踏实实的来学习. 首先学习的是css ...
- iOS 汉字的拼音
获取汉字的拼音 #import <Foundation/Foundation.h> @interface NSString (Utils) /** * 汉字的拼音 * * @return ...
- xcode8 storyboard 控件显示错位
升级xcode8 后选择device 为6s 出现上面的情况,控件显示异常.使用Update Frame 显示正常.不能选择Update Constraints 如果误选 commend + Z ...
- 转载文章——Hadoop学习
转载地址:http://www.iteye.com/blogs/subjects/zy19982004?page=2 一.Hadoop社区版和发行版 社区版:我们把Apache社区一直开发的Hadoo ...
- C#接口的显示和隐式实现
早上骑车上班走到半路发现手机忘带了,这年代兜里没装一分现金,吃饭都要刷手机,上班时间无聊了不能玩手机更是大问题,所以果断掉头拿手机.取完手机刚出门看这天阴沉沉的貌似要下雨,没雨衣,骑车又不能打伞,上次 ...
- 由用友NC刷新功能得到启示
在做NC刷新界面数据的功能,就是 点刷新按钮然后刷新当前 list 中的数据,犯了一个错误. 我之前的做法是记录每次查询数据的sql条件语句,然后在点刷新的时候去调用这个条件语句,哈哈,错误就在这个逻 ...
- ajax 允许跨域html头设置
"Access-Control-Allow-Origin"= "*" "Access-Control-Allow-Headers"= &qu ...
- android socket 线程连接openwrt与arduino单片机串口双向通信
package zcd.netanything; import java.io.BufferedReader; import java.io.InputStreamReader; import jav ...
- windows中,端口查看&关闭进程及Kill使用
测试过程中遇到的问题,杂记一: 1.netstat -ano | findstr "8001" 查看端口8001被哪个进程占用:由下图可以看出,被进程为3736的占用 2.查 ...