jQuery中的事件和动画

一、jQuery中的事件

  • 加载DOM

在JS中等待页面加载完成通常使用window.onload方法,而在jQuery中则使用$(document).ready()方法来替代传统的window.onload方法。这两者有很大的不同:

  1. 执行时机

window.onload方法是在网页所有的元素(包括元素关联的文件)完全加载到浏览器后才能执行。而Query中的$(document).ready()方法,在DOM载入就绪就可以对其操纵并调用它绑定的函数,此时网页中的所有元素可能并没有下载完毕。

有时我们需要的图片没有加载完毕,我们需要的图片宽高可能不一定有效。这种情况可以使用jQuery的load()方法。load()方法会在元素的onload中绑定一个处理函数。如果处理函数绑定给window对象,则会在所有内容加载完毕后触发。如果处理函数绑定在元素上,则会在元素内容加载完毕后触发。

$(window).load(function({}))等价于js的window.onload=function(){}

2. 多次使用

window.onload方法只能使用一次,否则后面的window.onload会覆盖前面的。这点在引入多个·js时尤其困扰,但是jQuery中的$(document).ready()方法每次调用都会在现有的行为上追加新的行为,并按照注册顺序依次执行。

3.简写方式

$(document).ready()方法可以简写为$(function(){})或者$().ready(),这点在jQuery源码中已经进行过处理,他们的功能是一样的。

  • 事件绑定

使用bind()方法给匹配元素进行特定事件的绑定。

格式为bind(type [.data] fn);

第一个参数是事件类型,包括:blur、focus、load、resize、scroll、unload、click、dbclick、mousedown、mouseup、mousemove、mouseover、mouseout、mouseenter、mouseleave、change、select、submit、keydown、keypress、keyup、error等。也可以自定义名称。

第二个参数为可选参数,作为event.data属性值传递给事件对象的额外数据对象。

第三个参数是用来绑定事件的处理函数。

 1 $(function () {
 2     $(".head").bind("click",function(){  //给.head元素添加一个点击事件
 3         var $content=$(this).next();     //定义一个局部变量保存$(this).next
 4         if($content.is(":visible")){        //实现点击显示再点击隐藏的切换
 5             $content.hide();
 6         }else{
 7             $content.show();
 8         }
 9     })
10 });

像blur、focus、load、resize、scroll、unload、click、dbclick、mousedown、mouseup、 mousemove、mouseover、mouseout、mouseenter、mouseleave、change、select、submit、 keydown、keypress、keyup、error等常用事件jQuery提供了简写,eg: $(".head").mouseover(function(){}).mouseout(function(){});

PS: bind()方法的其他用法
  1. 绑定多个事件类型
1 $(function(){
2     $("div").bind("mouseover mouseout",function(){
3         $(this).toggleClass("over");
4     });
5 });

2.添加事件命名空间便于管理

 1 $(function(){
 2     $("div").bind("mouseover.plugin",function(){
 3         $("body").append("<p>mouseover事件</p>");
 4     });
 5     $("div").bind("click.plugin",function(){
 6         $("body").append("<p>click事件</p>");
 7     });
 8     $("div").click(function(){
 9         $("div").unbind(".plugin");
10     });
11 });

3.相同事件名称,不同命名空间执行方法

 1 $(function(){
 2     $("div").bind("click",function(){
 3         $("body").append("<p>click事件</p>");
 4     });
 5     $("div").bind("click.plugin",function(){
 6         $("body").append("<p>click.plugin事件</p>");
 7     });
 8     $("button").click(function(){
 9         $("div").trigger(".click!");    //!作用是匹配所有不包含在命名空间中的click方法
10     });
11 });

  • 合成事件

  1. hover()

hover()方法用于模拟光标悬停效果,鼠标移上触发第一个函数,鼠标移除触发第二个函数。用来替代jQuery中的bind("mouseenter")和bind("mouseleave")。

格式: hover(enter,leave);

以上代码通过hover()事件就可以简写为:

1 $(function () {
2     $(".head").hover(function(){
3         $(this).next().show();
4     },function(){
5         $(this).next().hide();
6     });
7 });

PS:hover()方法必须传入2个function,即时有一个操作函数没有也要写上。

2. toggle()

toggle()方法用于模拟鼠标的连续单击事件。第一次单击触发第一个函数,第二次单击触发第二个函数。如果有更多函数则依次触发,然后每次单击都重复对这几个函数的轮番调用。

PS:toggle()方法还可以实现切换元素的可见状态。

1 $(function () {
2     $(".head").toggle(function(){
3          $(this).next().toggle();
4      },function(){
5          $(this).next().toggle();
6      });
7  });

  • 事件冒泡与事件捕获

当页面元素触发事件的时候,该元素的容器以及页面都会按照特定顺序响应该元素的触发事件,事件的传播顺序就叫事件的流程。事件流分为冒泡型和捕获型。冒泡型事件流所有浏览器都支持,它是从明确的事件源到不明确的事件源依次向上触发。由于事件流的存在,我们有必要对时间的作用范围进行限制。捕获型事件流不是所有主流浏览器都支持,它是从不明确的事件源到明确的事件源依次向下触发,这种缺陷无法通过JS解决,因此jQuery不支持事件捕获。

  1. 事件对象

jQuery事件对象创建只需要为函数添加一个参数即可。创建的事件对象只有事件处理函数才能访问到。事件执行完毕后,事件对象就被销毁。

1 $("element").bind("click",function(e){    //e:事件对象
2       //...
3 });

2.停止事件冒泡

使用stopPropagation()方法停止事件冒泡。

1 $("span").bind("click",function(e){                     //e是事件对象
2     var txt=$("#msg").html()+"<p>内层span元素被单击</p>";
3     $("#msg").html(txt);
4     e.stopPropagation();                                  //停止事件冒泡
5 });

3.阻止默认行为

通过preventDefault()阻止元素的默认行为。

1 $("input").bind("click",function(e){                     //e是事件对象
2     var txt=$("#msg").html()+"<p>内层span元素被单击</p>";
3     $("#msg").html(txt);
4     e.preventDefault();                                  //阻止事件默认行为
5 });

如果想同时对事件对象停止冒泡和默认行为,可以在事件处理函数中返回false。这是对在事件对象上同时调用stopPrapagation()方法和preventDefault()方法的简写方式。e.preventDefault()可以改为return false;

  • 事件对象属性

  1. e.type  获取事件的类型。
  2. e.preventDefault()方法   阻止浏览器默认行为。
  3. e.stopPropagation()方法  阻止事件的冒泡。
  4. e.target  获取触发事件的元素。
  5. e.relatedTarget  获取相关元素。
  6. e.pageX和pageY  获取光标相对于页面的x坐标和y坐标。
  7. e.which  单击事件中获取鼠标的左、中、右键;键盘事件获取键盘的按键。
  8. e.metaKey 键盘事件中获取ctrl键。
  • 移除事件

通过unbind()方法移除事件。

unbind([type],[data]);

第一个参数是事件类型,第二个参数是将要移除的函数。如果没有参数,则删除所有绑定的事件。如果提供了事件类型作为参数,则只删除该类型的绑定事件。如果把绑定时传递的处理函数作为第二个参数,则只有这个特定的事件处理函数会被删除。

1 $("p").click(function(){
2      $("#btn").unbind();
3 });

只需要触发一次随后就立即删除绑定的情况,可以使用one()方法。one()方法可以为元素绑定处理函数。当处理函数触发一次后,立即被删除。

  • 模拟操作

  1. 常用模拟

使用trigger()方法完成模拟操作。 eg:   $("#btn").trigger("click"); 也可以简写为$("#btn").click();

2. 触发自定义事件

1 $(function(){
2     $("div").bind("myclick",function(){
3         $("body").append("<p>我的自定义事件</p>");
4     });
5     $("div").trigger("myclick");
6 });

3. 传递数据

trigger(type,[data])方法有两个参数,第一个参数是触发的事件类型,第二次参数是要传递给事件处理函数的附加数据,以数组形式传递。

4. 执行默认操作

trigger()方法触发事件后,会执行浏览器默认操作。如果只想触发绑定事件,而不想执行浏览器默认操作,使用triggerHandler()方法。

二、jQuery中的动画

  • 动画类型

方法 说明
hide()和show() 同时修改高度宽度不透明度
fadeIn()和fadeOut() 改变不透明度
slideUp()和slideDown() 改变高度
fadeTo() 改变不透明度
toggle() 用来代替hide()和show()
slideToggle() 用来代替slideUp()和slideDown()
fadeToggle() 用来代替fadeIn()和fadeOut()
animate() 自定义动画以上动画内部其实都是调用了animate方法
  • 停止动画

如果需要在某处停止动画,需要使用stop()方法。

stop([clearQueue],[gotoEnd]);

clearQueue和gotoEnd都是可选参数,为Boolean值。clearQueue是是否要清空未执行完的动画队列,gotoEnd是是否直接将正在执行的动画跳转至末状态。

  • 判断元素是否处于动画状态

为避免动画累积造成的动画与用户行为不一致,首先判断元素是否处于动画状态,如果元素不处于动画状态,才为元素添加新的动画,否则不添加。

1 if($(element).is(":animated")){   //判断元素是否处于动画状态
2           //如果没有进行动画,则添加新的动画
3 }
  • 延迟动画

使用delay()方法对动画进行延迟操作。delay()方法既可以推迟动画队列中函数的执行,也可以用于自定义队列。

$(this).animate({left:"400px"},3000)
          .delay(1000);
  • 动画队列

当一个animate()方法中应用多个属性时,动画是同时发生的。当链式的写法应0用动画方法时,动画是按顺序发生的(除非queue选项值为false)。

时间: 2024-10-07 05:06:42

jQuery中的事件和动画的相关文章

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

第4章 jQuery中的事件和动画 jQuery中的事件 加载DOM $(document).ready(function(){   // 编写代码... }); 可以简写成: $(function(){   // 编写代码... }); $(document).ready()方法的执行时机是在网页中所有DOM结构绘制完毕后就执行,可能此时DOM元素关联的东西(比如图片)并没有加载完. $(document).ready()方法能同时编写多个,每次调用$(document).ready()方法都

锋利的jQuery第四章:jQuery中的事件和动画

第一部分 1, (1)$()是$(document)的简写,默认参数是document. $(function(){}是$(document).ready(function(){})的简写. 2, (1)事件绑定 bind(type [,data],fn); type是事件类型,有blur,focus,load,resize,scroll,unload,click,dbclick,mousedown,mouseup, mouseover,mousemove,mouseout,mouseenter

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

众所周知,页面在加载时,会触发load事件:当用户单击某个按钮时,会触发该按钮的click事件. 这些事件就像日常生活中,人们按下开关,灯就亮了(或者灭了),往游戏机里投入游戏币就可以启动游戏一样, 通过种种事件实现各项功能或执行某项操作.事件在元素对象与功能代码中起着重要的桥梁作用. 在jQuery中,事件总体分为两大类:简单事件和复合事件. jQuery中的简单事件,与JavaScript中的事件几乎一样,都含有window事件.鼠标事件.键盘事件.表单事件等, 只是其对应的方法名称有略微不

【学习笔记】jquery中的事件和动画

---恢复内容开始--- jquery中的事件 jquery用$(document).ready()方法来代替传统JavaScript的window.onload方法. window.onload方法在网页中所有的元素(包括元素的所有关联文件)完全加载到浏览器后执行,通过 $(document).ready()方法注册的事件处理程序的DOM完全就绪时就可以被调用.此时,网页中的所有元素对jquery都是可以访问的. load()方法会在元素的onload事件中绑定一个处理函数,若绑定给windo

jQuery之第4章 jQuery中的事件和动画

一.jQuery中的事件: 1.加载DOM: jQuery:$(document).ready(); JavaScript:window.onload(); $(window).load(function(){ }) 等价于 window.onload = function(){} 简写方式: (1)$(document).ready(functon(){}) (2)$().ready(functon(){}) (3)$(function(){}) 2.事件绑定: bind(); 3.合成事件:

锋利的jQuery ——jQuery中的事件和动画(四)

一.jQuery中的事件 1)加载DOM $(document).ready()和window.onload的区别 1>执行时机 $(document).ready(){}  方法内注册的事件,只要DOM就绪就会被执行.  window.onload则是所有内容加载完毕后才会触发. 2>多次使用 js的onload事件一次只能保存对一个函数的引用,他会自动用后面的函数覆盖前面的函数. 3>简写方式 $(document).ready(function(){ 编写代码})==$(funct

JQuery中的事件以及动画

嘿嘿,今天学习了JQuery的事件以及动画,感觉即将学习完JQuery,在回忆起上周学习的JavaScript,感觉好多刚刚学习的知识点都记得模 糊啦,这个是很让失望的,这里只说明了一点,课是听过啦,但是没有好好的练习,于是就加快了刚学习的知识的遗忘力度.在一周的时间里学习了JavaScript, 那时间没感觉可得节奏很快,现在顿时发现课真的是快啦,我需要认真的对待,好好的在练习练习,而写发现最近的态度也有很大的问题,总是在赶今天学习的任 务,发现没有更多的时间去复习前面学习的知识,感觉还是有点

jQuery中的事件和动画效果

刚刚学习了jqyery的一些事件和动画,下面我来总结一下: 1.基础事件 1.window事件,它的对应方法是ready(),$(document).ready()方法是事件模块中最重要的一个函数,可以极大的提高web应用程序的响应速度.(不做过多的讲解) 2.鼠标事件 鼠标事件就是用户在文档上移动或者点击时引发的操作. 1.click(); 2.mouseout(); 3.mouseout(); $(function () { $('li').on('mouseenter',function

第7章 jQuery中的事件与动画

一.事件: 1.鼠标事件 click( ) 触发或将函数绑定到指定元素的click事件 单击鼠标时 dblclick( ) 触发或将函数绑定到指定元素的dblclick事件 双击鼠标时 mouseover( ) 触发或将函数绑定到指定元素的mouseover事件 鼠标指针移过时 子元素有效 mouseout( ) 触发或将函数绑定到指定元素的mouseout事件 鼠标指针移出时 子元素有效 mouseenter( ) 触发或将函数绑定到指定元素的mouseenter事件 鼠标指针进入时 子元素无