第4章 jQuery中的事件和动画
4.1 jQuery中的事件
4.1.1 加载DOM
jQuery就是用 `$(document).ready()方法来代替传统JavaScript的window.onload方法的。
- 1.执行时机
$(document).ready()
方法和window.onload方法有相似的功能,但是在执行时机方面是有区别的。window.onload方法是在网页中所有的元素(包括元素的所有关联文件)完全加载到浏览器后才执行,JavaScript此时才可以访问网页中的任何元素。而通过jQuery中的$(document).ready()
方法注册的事件处理程序,在DOM完全就绪时就可以被调用。此时,网页的所有元素对jQuery而言都是可以访问的,但是,这并不意味着这些元素关联的文件都已经下载完毕。
若要当页面元素加载完后才进行方法调用,可以使用jQuery中另一个关于页面加载的方法—load()方法。load()方法会在元素的onload事件中绑定一个处理函数。如果处理函数绑定给window对象,则会在所有内容(包括窗口、框架、对象和图像等加载完毕后触发,如果处理函数绑定在元素上,则会在元素的内容加载完毕后触发。如:
- 2.多次使用
JavaScript的onIaod事件一次只能保存对一个函数的引用,它会自动用后面的函数搜盖前面的函数,因此不能在现有的行为上添加新的行为。
而jQuery的$(document).ready()
方法能够很好地处理这些情况,每次调用$(document).ready()
方法都会在现有的行为上追加新的行为,这些行为函数会根据注册的顺序依次执行。例如如下 jQuery代码:
会先弹出字符串“one”对话框,然后弹出字符串“two”对话框。
- 3.简写方式
可简写为:
另外,$(docurnent)
也可以简写为$()
。当$()
不带参数时,默认参数就是”document”,因此可以简写为:
4.1.2 事件绑定
在文档装载完成后,如果打算为元素绑定事件来完成某些操作,则可以使用bind()方法来对匹配元素进行特定事件的绑定,bind()方法的调用格式为:
Note
可以发现,jQuery中的事件绑定类型比普通的JavaScript事件绑定类型少了“on”。例如鼠标单击事件在jQuery中对应的是click事件,而在JavaScript中对应的是onclick()函教。
- 简写绑定事件
像click,mouseover和mouseout这类事件,在程序中经常会使用到,jQuery为此也提供了一套简写的方法。简写方法和bind[)方法的使用类似,实现的效果也相同,惟一的区别是能够减少代码量。
4.1.3 合成事件
jQuery有两个合成事件——hover()方法和toggle()方法。
1.hover()方法
语法结构为:
hover()方法用于模拟光标悬停事件。当光标移动到元素上时,会触发指定的第1个函数( enter ) ;当光标移出这个元素时,会触发指定的第2个函数( leave )。2.toggle()方法
语法结构为:
toggle()方法用于模拟鼠标连续单击事件。第1次.单击元素,触发指定的第1个函数(fn1);当再次单击同一元素时,则触发指定的第2个函数(fn2 );如果有更多函数,则依次触发,直到最后一个。随后的每次单击都重复对这几个函数的轮番调用。
4.1.4 事件冒泡
- 1.什么是冒泡
在页面上可以有多个事件,也可以多个元素响应同一个事件。假设网页上有两个元素,其中一个元素嵌套在另一个元素里,并且都被绑定了click事件,同时<body>
元素上也绑定了click事件。
只单击内部<span>
元素,就会触发外部<div>
元素和<body>
元素上绑定的click事件。这是由事件冒泡引起的。
之所以称为冒泡,是因为事件会按照DoM的层次结构像水泡一样不断向上直至顶端,如下图:
- 2.事件冒泡引发的问题
事件对象
在程序中使用事件对象非常简单,只需要为函数添加一个参数,jQuery代码如下:
这样,当单击“element”元素时,事件对象就被创建了。这个事件对象只有事件处理函数才能访问到。事件处理函数执行完毕后,事件对象就被销毁。
停止事件冒泡
停止事件冒泡以阻止事件中其他对象的事件处理函数被执行。在jQuery中提供了stopPropagation()方法来停止事件冒泡泡。
阻止默认行为
网页中的元素有自己默认的行为,例如,单击超链接后会跳转、单击“提交”按钮后表单会提交,有时需要阻止元素的默认行为。
在jQuery中,提供了preventDefault()方法来阻止元素的默认行为。如当输入值不合法时,阻止表单提交:
事件捕获
事件捕获和事件冒泡是刚好相反的两个过程,事件捕获是从最顶端往下开始触发。
还是冒泡事件的例子,其中元素的click事件会按照以下顺序捕获:
Note:
停止事件冒泡stopPrapagation()方法和阻止默认行为preventDefault()方法有种简写方式:
![]()
或者
![]()
改写为:
4.1.5 事件对象的属性
(1)event.type()方法
该方法的作用是可以获取到事件的类型。如“click”。
(2)event.preventDefault()方法
该方法的作用是阻止默认的事件行为。
(3)event.stopPropagation()方法
该方法的作用是阻止事件的冒泡。
(4)event.target()方法
该方法的作用是获取到触发事件的元素。
(5)event.pageX()/event.pageY()
该方法的作用是获取到光标相对于页面的x坐标和y坐标。
(6)event.which()方法
该方法的作用是在鼠标单击事件中获取到鼠标的左、中、右键; 在键盘事件中获取键盘的按键。
(7)event.metaKey()方法
该方法为键盘事件中获取ctrl按键。
4.1.6 移除事件
1.移除按钮元素上以前注册的事件
如当点击id为delAll的元素时,移除id为btn的元素的click事件,jQuery代码为:
unbind()方法结构:
第1个参数是事件类型,第2个参数是将要移除的函数,具体说明如下。
(1)如果没有参数,则删除所有绑定的事件。
(2)如果提供了事件类型作为参数,则只删除该类型的绑定事件。
(3)如果把在绑定时传递的处理函数作为第2个参数,则只有这个特定的事件处理函数会被删除。(看见下面的例子)2.移除
<button>
元素的其中一个事件
当单击“删除第二个事件”按钮后,再次单击“点击我”按钮,显示下图效果:
另外,对于只需要触发一次,随后就要立即解除绑定的情况,jQuery提供了一种简写方法——one()方法。one()方法可以为元素绑定处理函数。当处理函数触发一次后,立即被删除。即在每个对象上,事件处理函数只会被执行一次。
4.1.7 模拟操作
trigger(type, [,data])
- 1.常用模拟
以上的例子都是用户必须通过单击按钮,才能触发click事件,但是有时,需要通过模拟用户操作,来达到单击的效果。例如在用户进入页面后,就触发click事件,而不需要用户去主动单击。
在jQuery中,可以使用trigger()方法完成模拟操作。例如可以使用下面的代码来触发id为btn的按钮的click事件。当页面装载完毕后,就会立刻输出想要的效果:
也可以直接用简化写法click(),来达到同样的效果:
2.触发自定义事件
trigger()方法不仅能触发浏览器支持的具有相同名称的事件,也可以触发自定义名称的事件。例如为元素绑定一个“myClick”的事件,jQuery代码如下:
想要触发这个事件,可以使用以下代码来实现:
3.传递数据
下面是一个传递数据的例子:
4.执行默认操作
trigger()方法触发事件后,会执行浏览器默认操作。例如:
以上代码不仪会触发为<input>
元素绑定的focus事件,也会使<input>
元素本身得到焦点(这是浏览器的默认操作)。
如果只想触发绑定的focus事件,而不想执行浏览器默认操作,可以使用jQuery中另一个类似的方法—triggerHandler()方法。
文本框只触发绑定的focus事件,不会得到焦点。
4.1.8 其他用法
1.绑定多个事件类型
等同于:
2.添加事件命名空间,便于管理
例如可以把为元素绑定的多个事件类型用命名空间规范起来,jQuery代码如下:
3.相同事件名称,不同命名空间执行方法
例如可以为元素绑定相同的事件类型,然后以命名空间的不同按需调用 jQuery代码如下:
当单击 div 元索后,会同时触发click事件和click.plugin事件。如果只是单机button元素,则只触发click事件,而不触发click.plugin事件。注意,trigger(“click!)后面的感叹号的作用是匹配所有 不包含 在命名空间中的click方法。
4.2 jQuery中的动画
4.2.1 show()方法和hide()方法
1.show()方法和hide()方法
$("element").hide();
效果等同于element.css("display","none");
$("element").show()
2.show()方法和hide()方法让元素动起来
元素慢慢地显示出来,可以为show()方法指定一个速度参数,例如,指定一个速度关键字“slow”。jQuery代码如下:
$("element").show("slow");
或者指定时间(毫秒)$("element").show(1000);
hide()方法与之类似。Note
有参数时如show(600)或hide(600),会同时影响“内容”的高度、宽度和不透明度。若只想影响其中某个维度,则使用下面介绍的方法。
4.2.2 fadeIn()方法和fadeout()方法
与show[)方法不相同的是,fadeln()方法和fadeOut()方法只改变元素的不透明度。
4.2.3 slideUp()方法和slideDown()方法
这两个方法只会改变元素的高度。
>
Note:
jQuery中的任何动画效果,都可以指定3种速度参数,即“slow”、”normal”和”fast” (‘时间长度分别是0.6秒、0.4秒和0.2秒)。当使用速度关键字时要加引号,例如show(“slow”),如果用数字作为时间参数时就不需要加引号,例如show(1000).
4.2.4 自定义动画方法animate()
其语法结构为:
参数说明如下:
( 1 ) params: 一个包含样式属性及值的映射,比如{property1 :”value 1” , property2:”value2”, ..}。
( 2 ) speed: 速度参数,可选。
( 3 ) callback: 在动画完成时执行的函数,可选。
- 1.自定义简单动画
例如,使得id为panel的元素在点击是横向移动:
- 2.累加、累减动画
如果在500px之前加上“+=”或者“-=”符号即表示在当前位置累加或者累减。代码如下:
- 3.多重动画
(1)同时执行多个动画
例如在元素向右滑动的同时,放大元素的高度。
(2)按顺序执行多个动画(以下是链式写法)
- 4.综合动画
使用链式方式对多个动画进行排队。
4.2.5 动画回调函数
如集想在最后动画中改变元素的CSS样式,直接将css()方法附加在动画后面,并不能达到预期效果。出现这个问题的原因是css()方法并不会加入到动画队列中,而是立即执行。可以使用回调函数(callback)对非动画方法实现排队。只要把css()方法写在最后一个动画的回调函数里即可。代码如下:
4.2.6 停止动画和判断是否处于动画状态
- 1.停止元素的动画
很多时候需要停止匹配元素正在进行的动画,例如上例的动画,如果需要在某处停止动画,需要使用stop()方法。stop()方法的语法结构为:
参数cIearQueue和gotoEnd都是可选的参数,为Boolean值(ture或 false) 。
(1)clearQueue代表是否要清空未执行完的动画队列;
(2)gotoEnd代表是否直接将正在执行的动画跳转到末状态,通常用于后一个动画需要基于前个动画的末状态的情况,可以通过stop(false,true)这种方式来让当前动画直接到达末状态;
(3)若没有参数,则会立即停止当前正在进行的动画,如果接下来还有动画等待继续进行,则以当前状态开始接下来的动画。
Note:
注意,jQuery只能设置正在执行的动画的最终状态,而没有提供直接到达未执行动画队列最终状态的方法。
- 2.判断元素是否处于动画状态
在使用animate()方法的时候,要避免动画积累而导致的动画与用户的行为不一致。户快速在某个元素上执行animate()动画时,就会出现动画积累。解决方法是判断元素是否正处于动画状态,如果元素不处于动画状态,才为元素添加新的动画,否则不添加。代码如下:
4.2.7 其他动画方法
除了上面提到的动画方法,jQuery中还有3个专门用于交互的动画方法。
.toggle( speed, [callback])。
.slideToggle( speed, [callback])。
.fadeTo( speed, opacity, [callback])。
- 1.toggle()方法
toggle()方法可以切换元素的可见状态。如果元素是可见的,则切换为隐藏的;如果元素是隐藏的,则切换为可见的。
相当于:
2.slideToggle()方法
slideToggle()方法通过高度变化来切换匹配元素的可见性。这个动画效果只调整元素的高度。
相当于:
3.fadeTo()方法
fadeTo()方法可以把元素的不透明度以渐进方式调整到指定的值。这个动画只调整元素的不透明度,即匹配的元素的高度和宽度不会发生变化。
4.2.8 动画方法概括
1.改变样式属性
2.动画队列
(1)一组元素上的动画效果
当在一个animate()方法中应用多个属性时,动画是同时发生的.
当以链式的写法应用动画方法时,动画是按照顺序发生的。
(2)多组元素上的动画效果
默认情况下,动画都是同时发生的。
当以回调的形式应用动画方式时,动画是按照回调顺序发生的。
另外,在动画方法中,要注意其他非动画方法会插队,例如css()方法要使非动画方法也按照顺序执行,需要把这些方法写在动画方法的回调函数中。
第4章 jQuery中的事件和动画的更多相关文章
- 第三章 jQuery中的事件与动画
第三章jQuery中的事件与动画 一. jQuery中的事件 jQuery事件是对javaScript事件的封装. 1.基础事件 在javaScript中,常用的基础事件有鼠标事件.键盘事件.wind ...
- JQuery制作网页—— 第七章 jQuery中的事件与动画
1. jQuery中的事件: ●和WinForm一样,在网页中的交互也是需要事件来实现的,例如tab切换效果,可以通过鼠标单击事件来实现 ●jQuery事件是对JavaScript事件的封装,常用事件 ...
- 第3章 jquery中的事件和动画
一,jquery中的事件 (1).执行时机 $(document).ready()和window.onload方法有相似的功能,但是在执行时机方面有区别,windwo.onload在网页中所有的元素包 ...
- 第七章 jQuery中的事件与动画
事件的分类 基础事件: 鼠标事件 键盘事件 window事件 表单事件 复合事件: 鼠标光标悬停 鼠标连续点击 基础事件: 实例: mouseenter()和mouseover()用法的区别: mou ...
- jQuery中的事件和动画——《锋利的jQuery》(第2版)读书笔记2
第4章 jQuery中的事件和动画 jQuery中的事件 加载DOM $(document).ready(function(){ // 编写代码... }); 可以简写成: $(function( ...
- jQuery中的事件与动画<思维导图>
Javascript和HTML之间的交互是通过用户和浏览器操作页面时引发的事件来处理的.当文档或者它的某些元素发生某些变化或操作时,浏览器会自动生成一个事件.例如当浏览器装载完一个文档后,会生成事件. ...
- jQuery中的事件和动画 以及视频展示效果实例
经过这几天学习jQuery中的事件和动画,对jQuery更深的认识,接下来先把视频展示效果的代码贴出来,最后把我在学习jQuery事件和动画之后总结的思维导图 <!doctype html> ...
- jQuery中的事件与动画 (你的明天Via Via)
众所周知,页面在加载时,会触发load事件:当用户单击某个按钮时,会触发该按钮的click事件. 这些事件就像日常生活中,人们按下开关,灯就亮了(或者灭了),往游戏机里投入游戏币就可以启动游戏一样, ...
- Jquery中的事件和动画
在学习Jquery中的过程中我们绝大部分都用到了事件的操作,也可以说事件是Jquery中必不可少的一部分,我们常见的一些事件有单击事件,鼠标事件,键盘事件等等.在Jquery中的学习中为了能使让页面以 ...
随机推荐
- [BZOJ5249][多省联测2018]IIIDX
bzoj luogu sol 首先可以把依赖关系转成一个森林.自下而上维护出每个点的\(size\),表示这关解锁以后一共有多少关. 考虑没有重复数字的情况. 直接从小往大贪心把每个数赋给当前已解锁的 ...
- 【LeetCode】029. Divide Two Integers
Divide two integers without using multiplication, division and mod operator. If it is overflow, retu ...
- 如何重启mysql服务
window下: 在cmd中,键入services.msc,找到mysql,右键重启mysql
- nodejs 接口跨域
//设置跨域访问 //设置跨域访问 app.all('*', function(req, res, next) { res.header("Access-Control-Allow-Orig ...
- DOM对象和JQuery对象互转
实现点击某一个单元格,将单元格内部的sql提交执行: <td onclick="submitSqlExecute(this)">...<span>${ctx ...
- 聊聊WPF中的Dispatcher
DispatcherObject,Dispatcher,Thread之间的关系 我们都知道WPF中的控件类都是从System.Windows.Threading.DispatcherObject继承而 ...
- djangocms安装使用指南
ubuntu 14.04 virtualenv venv --python=python3 . venv/bin/activate sudo apt-get upgradesudo apt-get i ...
- C# Chat曲线图,在发布之后出现错误 Invalid temp directory in chart handler configuration c:\TempImageFiles\
First error message: Invalid temp directory in chart handler configuration c:\TempImageFiles\ Soluti ...
- vijos1906:联合权值
描述 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 WiWi, 每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 v 点的最短距离. ...
- windows任务管理器中的工作设置内存,内存专用工作集,提交大小详解
虽然是中文字,但是理解起来还是很困难,什么叫工作设置内存,什么叫内存专用工作集,什么叫提交大小,区别是什么,让人看了一头雾水. 通俗的讲工作设置内存是程序占用的物理内存(包含与其他程序共享的一部分), ...