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中的事件和动画的更多相关文章

  1. 第三章 jQuery中的事件与动画

    第三章jQuery中的事件与动画 一. jQuery中的事件 jQuery事件是对javaScript事件的封装. 1.基础事件 在javaScript中,常用的基础事件有鼠标事件.键盘事件.wind ...

  2. JQuery制作网页—— 第七章 jQuery中的事件与动画

    1. jQuery中的事件: ●和WinForm一样,在网页中的交互也是需要事件来实现的,例如tab切换效果,可以通过鼠标单击事件来实现 ●jQuery事件是对JavaScript事件的封装,常用事件 ...

  3. 第3章 jquery中的事件和动画

    一,jquery中的事件 (1).执行时机 $(document).ready()和window.onload方法有相似的功能,但是在执行时机方面有区别,windwo.onload在网页中所有的元素包 ...

  4. 第七章 jQuery中的事件与动画

    事件的分类 基础事件: 鼠标事件 键盘事件 window事件 表单事件 复合事件: 鼠标光标悬停 鼠标连续点击 基础事件: 实例: mouseenter()和mouseover()用法的区别: mou ...

  5. jQuery中的事件和动画——《锋利的jQuery》(第2版)读书笔记2

    第4章 jQuery中的事件和动画 jQuery中的事件 加载DOM $(document).ready(function(){   // 编写代码... }); 可以简写成: $(function( ...

  6. jQuery中的事件与动画<思维导图>

    Javascript和HTML之间的交互是通过用户和浏览器操作页面时引发的事件来处理的.当文档或者它的某些元素发生某些变化或操作时,浏览器会自动生成一个事件.例如当浏览器装载完一个文档后,会生成事件. ...

  7. jQuery中的事件和动画 以及视频展示效果实例

    经过这几天学习jQuery中的事件和动画,对jQuery更深的认识,接下来先把视频展示效果的代码贴出来,最后把我在学习jQuery事件和动画之后总结的思维导图 <!doctype html> ...

  8. jQuery中的事件与动画 (你的明天Via Via)

    众所周知,页面在加载时,会触发load事件:当用户单击某个按钮时,会触发该按钮的click事件. 这些事件就像日常生活中,人们按下开关,灯就亮了(或者灭了),往游戏机里投入游戏币就可以启动游戏一样, ...

  9. Jquery中的事件和动画

    在学习Jquery中的过程中我们绝大部分都用到了事件的操作,也可以说事件是Jquery中必不可少的一部分,我们常见的一些事件有单击事件,鼠标事件,键盘事件等等.在Jquery中的学习中为了能使让页面以 ...

随机推荐

  1. [BZOJ5249][多省联测2018]IIIDX

    bzoj luogu sol 首先可以把依赖关系转成一个森林.自下而上维护出每个点的\(size\),表示这关解锁以后一共有多少关. 考虑没有重复数字的情况. 直接从小往大贪心把每个数赋给当前已解锁的 ...

  2. 【LeetCode】029. Divide Two Integers

    Divide two integers without using multiplication, division and mod operator. If it is overflow, retu ...

  3. 如何重启mysql服务

    window下: 在cmd中,键入services.msc,找到mysql,右键重启mysql

  4. nodejs 接口跨域

    //设置跨域访问 //设置跨域访问 app.all('*', function(req, res, next) { res.header("Access-Control-Allow-Orig ...

  5. DOM对象和JQuery对象互转

    实现点击某一个单元格,将单元格内部的sql提交执行: <td onclick="submitSqlExecute(this)">...<span>${ctx ...

  6. 聊聊WPF中的Dispatcher

    DispatcherObject,Dispatcher,Thread之间的关系 我们都知道WPF中的控件类都是从System.Windows.Threading.DispatcherObject继承而 ...

  7. djangocms安装使用指南

    ubuntu 14.04 virtualenv venv --python=python3 . venv/bin/activate sudo apt-get upgradesudo apt-get i ...

  8. C# Chat曲线图,在发布之后出现错误 Invalid temp directory in chart handler configuration c:\TempImageFiles\

    First error message: Invalid temp directory in chart handler configuration c:\TempImageFiles\ Soluti ...

  9. vijos1906:联合权值

    描述 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 WiWi, 每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 v 点的最短距离. ...

  10. windows任务管理器中的工作设置内存,内存专用工作集,提交大小详解

    虽然是中文字,但是理解起来还是很困难,什么叫工作设置内存,什么叫内存专用工作集,什么叫提交大小,区别是什么,让人看了一头雾水. 通俗的讲工作设置内存是程序占用的物理内存(包含与其他程序共享的一部分), ...