锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)


Posted in Javascript onMarch 24, 2010

一、事件

1 加载DOM

$(document).ready(function(){//...}) 
DOM加载完毕后执行,在可重复使用上区别于window.onload=function(){//...} 
$(window).load(function(){//...}) 
window内所有对象加载完毕后执行,几等同window.onload=function(){//...}。也可针对selector使用此方法

另:$(document).ready(function(){//...})的简写方式:$(function(){//...})或$().ready(function(){//...})

2 事件绑定

$("selector").bind() 
为元素绑定事件,格式:bind(type[,data],fn),可多次调用 
type事件类型包括:blur, focus, load, resize, scroll, unload, click, dbclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error或者自定义事件 
简写方法:$("selector").bind(type,function(){//...})等价于$("selector").type(function(){//...}) 
可传递data参数以供unbind特定事件之用 
$("selector").is() 
判断方法

(外:方法多次重用可定义局部变量 var $x = $("selector").方法())

3 合成事件

$("selector").hover(enter,leave) 
模拟光标悬停事件,鼠标进入时触发enter事件,鼠标移出时触发leave事件(代替的是bind("mouseenter")和bind("mouseleave")) 
使用方法:$("selector").hover(function(){//enter case...},function(){//leave case...}) 
(外:IE6不支持除a标签外css的:hover伪类的问题——可用此hover事件作为hack来解决) 
$("selector").toggle(fn1,fn2,...,fnN) 
模拟鼠标连续单击事件,按照单击顺序按次序循环执行事件 
使用方法:$("selector").toggle(function(){//case1...},function(){//case2...},...,function(){//caseN}) 
特殊用法:切换元素可见状态,如元素隐藏,单击toggle触发元素可使之可见;元素可见,单击toggle触发元素使之隐藏

P108例:
<script> 
$(function(){ 
$("panel h5.head").toggle(function(){ 
$(this).next().toggle(); 
},function(){ 
$(this).next().toggle(); 
}) 
}) 
</script>

4 事件冒泡

$("selector").bind("type",function(event){//event:事件对象...})
event事件对象:只有此函数内部才能访问到,事件处理函数执行完毕后,事件对象就被销毁
event.stopPropagation()
在函数最后用来停止事件冒泡
P111例:

<script> 
$('span').bind("click",function(event){ 
var txt = $('msg').html() + "<p>内层span元素被单击</p>"; 
$('#msg').html(txt); 
event.stopPropagation(); 
}) 
</script> 
event.preventDefault()

阻止元素默认行为
例:验证表单(input为空阻止提交并提示)
<script> 
$(function(){ 
$("#submit").bind("click",function(event){ 
var username=$("#username").val(); 
if(username==""){ 
$("#msg").html("<p> 文本框的值不能为空</p>"); 
event.preventDefault(); 
} 
}); 
}) 
</script>

return false;
同时对对象事件停止冒泡和默认行为,等价于同时调用stopPrapagation()和preventDefault()
(外:事件捕获和事件冒泡是相反的过程,事件捕获是从DOM顶端往下开始触发,jQuery不支持,故本书从略)

5 事件对象的属性

event.type
获取事件类型
例:

<script> 
$("a").click(function(event){ 
alert(event.type); 
return false; 
}) 
</script>

上面返回"click"
event.target
获取触发事件的元素
例:
<script> 
$("a[href=http://baidu.com]").click(function(){ 
alert(event.target.href); 
return false; 
}) 
</script>

上面返回"http://baidu.com"
event.relatedTarget
访问事件相关元素
event.pageX / event.pageY
获取光标相对于页面的x坐标和y坐标
event.which
在鼠标单击事件中获取鼠标的左、中、右键;在键盘事件中获取键盘的按键(返回值1=鼠标左键;2=鼠标中键;3=鼠标右键)
event.metaKey
键盘事件中获取<ctrl>按键
event.originalEvent
指向原始的事件对象

6 移除事件

$("selector").unbind()
移除元素上的事件,格式:$("selector").unbind([type][,data]);(如果没有参数,则删除所有绑定的事件;如果提供了事件类型参数,则只删除该类型的绑定事件;如果把在绑定时传递的处理函数作为第二个参数,则只有这个特定的事件处理函数会被删除)
例:

<script> 
$(function(){ 
$('#btn').bind("click",myFun1=function(){ //先绑定 
$('#test').append("..."); 
}); 
}) 
</script> 
<script> 
$('#delOne').click(function(){ 
$('#btn').unbind("click",myFun1); //后删除 
}) 
</script>

$("selector").one()
绑定一个触发一次即被删除的事件,格式:$("selector").one(type[,data],fn);

7 模拟操作

$("selector").trigger("type");
模拟用户交互动作,简写方法:$("#selector").type(); 格式:$("selector").trigger(type[,data])
例:用单击替代鼠标经过

<script> 
$("selector").mouseover(function{//...}); 
$("selector2").click(function(){ 
$("selector").trigger("mouseover"); //或者$("selector").mouseover() 
}) 
</script>

自定义事件的例子
<script> 
$("selector").bind("myClick",function(){//...}); //绑定自定义事件 
$("selector").trigger("myClick"); //触发自定义事件 
</script> 
$("selector").trigger(type[,data])

可以数组形式传递参数给回调函数
P119例:
<script> 
$("#btn").bind("myClick",function(event,message1,message2){ 
$("#test").append("<p>"+message1+message2+"</p>"); 
}); 
$("#btn").trigger("myClick", ["我的自定义","事件"]); 
</script>

8 其他用法

$("selector").bind("type1 type2",function(){//...})
一次性绑定多个事件类型
P119值得一看的例子

<script> 
$(function(){ 
$("div").bind("mouseover mouseout",function(){ 
$(this).toggleClass("over"); //切换class 
}); 
}) 
</script>

$("selector").bind("type.命名空间",function(){//...})
为多个事件添加事件命名空间,便于管理,删除命名空间后,命名空间下的事件同时删除,如:
$("div").bind("mouseover.plugin",function(){//...})
$("div").bind("click.plugin",function(){//...})
$("div").unbind(".plugin");
$("selector").trigger("type!")
"!"用来选择匹配不包含在命名空间中的type方法
Javascript 相关文章推荐
实例代码详解javascript实现窗口抖动及qq窗口抖动
Jan 04 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
Mar 14 Javascript
javascript运算符——位运算符全面介绍
Jul 14 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
Nov 11 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
Nov 30 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
May 23 Javascript
微信小程序之绑定点击事件实例详解
Jul 07 Javascript
Angular CLI 安装和使用教程
Sep 13 Javascript
vue实现长图垂直居上 vue实现短图垂直居中
Oct 18 Javascript
three.js中文文档学习之如何本地运行详解
Nov 20 Javascript
Angular使用操作事件指令ng-click传多个参数示例
Mar 27 Javascript
详解Vue串联过滤器的使用场景
Apr 30 Javascript
jQuery AJAX 调用WebService实现代码
Mar 24 #Javascript
jquery 仿QQ校友的DIV模拟窗口效果源码
Mar 24 #Javascript
Javascript中Eval函数的使用
Mar 23 #Javascript
JavaScript Eval 函数使用
Mar 23 #Javascript
js本身的局限性 别让javascript做太多事
Mar 23 #Javascript
js parentElement和offsetParent之间的区别
Mar 23 #Javascript
Javascript 变量作用域 两个可能会被忽略的小特性
Mar 23 #Javascript
You might like
通过具体程序来理解PHP里面的抽象类
2010/01/28 PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
2012/05/07 PHP
PHP中Notice错误常见解决方法
2017/04/28 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
jquery批量控制form禁用的代码
2013/08/06 Javascript
JS将光标聚焦在文本最后的实现代码
2014/03/28 Javascript
html文档中的location对象属性理解及常见的用法
2014/08/13 Javascript
Javascript获取CSS伪元素属性的实现代码
2014/09/28 Javascript
JS实现下拉菜单赋值到文本框的方法
2015/08/18 Javascript
JS实现密码框的显示密码和隐藏密码功能示例
2016/12/26 Javascript
详谈javascript精度问题与调整
2017/07/08 Javascript
js实现音乐播放控制条
2017/09/09 Javascript
JS中跳出循环的示例代码
2017/09/14 Javascript
ES6中字符串string常用的新增方法小结
2017/11/07 Javascript
nodejs+mongodb+vue前后台配置ueditor的示例代码
2018/01/02 NodeJs
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
2019/03/01 Javascript
用js简单提供增删改查接口
2019/05/12 Javascript
react 中父组件与子组件双向绑定问题
2019/05/20 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
[02:42]决战东方!DOTA2亚洲邀请赛重启荣耀之争
2017/03/17 DOTA
Python类属性与实例属性用法分析
2015/05/09 Python
python如何在终端里面显示一张图片
2016/08/17 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
2018/01/24 Python
django 发送手机验证码的示例代码
2018/04/25 Python
多个应用共存的Django配置方法
2018/05/30 Python
Flask框架Flask-Login用法分析
2018/07/23 Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
2019/03/18 Python
python下载库的步骤方法
2019/10/12 Python
python 爬虫网页登陆的简单实现
2020/11/30 Python
使用sublime text3搭建Python编辑环境的实现
2021/01/12 Python
浅谈CSS3中display属性的Flex布局的方法
2017/08/14 HTML / CSS
副护士长竞聘演讲稿
2014/04/30 职场文书
重阳节标语大全
2014/10/07 职场文书
幼儿园教师工作总结2015
2015/04/02 职场文书
运动员入场词
2015/07/18 职场文书
中学政教处工作总结
2015/08/13 职场文书