jQuery中的事件和动画

转载地址:http://blog.csdn.net/xuweisen/article/details/9106441

学习笔记《锋利的jQuery》-jQuery中的事件和动画

JavaScript和HTML之间的交互是通过用户和浏览器操作页面时引发的事件来处理的。当文档或者它的元素发生某些变化和操作时,浏览器会自动生成一个事件。例如当浏览器装载完一个文档后,会生成事件;当用户单击某个按钮时,也会生成事件。虽然利用传统的JavaScript事件能完成这些交互,但jQuery增加并扩展了基本的事件处理机制。jQuery不仅提供了更加优雅的事件处理语法,而且极大的增强了事件处理能力。

一、jQuery中的事件

1、加载DOM

页面所有元素(包括元素内容)加载完毕后触发。
$(window).load(function(){
      //编写代码
})

等价于JavaScript中的以下代码:

window.onload = function(){
    //编写代码
}
页面所有DOM(不包括元素内容)加载完毕后触发。
$(document).ready(function(){
//编写代码
})
$(document).ready(function(){
//编写代码
})
$(function(){
//编写代码
})

上面三种形式等价。
2、事件绑定

bind(type,[,data],fn);
  • 第一个参照type是事件类型,类型包括blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouselever,change,select,submit,keydow n,keypress,keyup和error等。
  • 第二个参数为可选参数,作为event.data属性传递给事件对象的额外数据对象。
  • 第三个参数则是用来绑定的处理函数。
    eg:
$(function(){
    $("#panel h5.head").bind("click",function(){
        $(this).next().show();
    });
});

还可以简写成如下形式:

$(function(){
    $("#panel h5.head").click(function(){
        $(this).next().show();
    });
});

3、合成事件

hover(enter,leave)方法

用于模拟光标悬停事件。当光标移入元素上时,会触发指定的enter函数;当光标移出这个元素时,会触发指定的leave函数。例如:

$(function(){
    $("#panel h5.head").hover(
        function(){
    $(this).next().show();
       },
        function(){
            $(this).next().hide();
        }
    );
});
toggle(fn1,fn2,fn3......fnN)方法

用于模拟鼠标连续单击事件。第一次单击时,触发指定的第一个函数fn1;第二次单击时,触发指定的第二个函数fn2;如果有更多的函数,依次触发,直到最后一个。循环触发。例如:

$(function(){
    $("#panel h5.head").toggle(
        function(){
    $(this).next().show();
       },
        function(){
            $(this).next().hide();
        }
    );
});

4、事件冒泡

页面中有多个元素,元素之间是嵌套关系。当这些元素都绑定了click事件时,单击最里边元素时,会按照触发元素由里向外的click事件,这就是事件冒泡。

可以通过下面三种方式来阻止冒泡:

$("span").bind("click",function(event){
//第一种方式 停止事件冒泡
event.stopPropagation();
//第二种方式  阻止默认行为(主要用于表单校验未通过,阻止表单提交)
event.preventDefault();

//第三种方式
return false;
});

5、事件对象的属性

jQuery在遵循W3C规范的情况下,对事件对象的常用属性进行了封装,使得事件处理在各大浏览器中都能正常运行,而不需要进行浏览器的判断。

  • event.type属性 获取事件类型
  • event.preventDefault()方法 阻止默认事件行为 JavaScript在IE中无效,jQuery对其进行了封装,使之兼容各种浏览器。
  • event.stopPropagation方法 停止事件冒泡 JavaScript在IE中无效,jQuery对其进行了封装,使之兼容各种浏览器。
  • event.target 获取触发事件的元素 eg:e.target.href
  • event.relatedTarget属性 在mouseover中相当于IE浏览器的event.fromElement属性,在mouseout中相当于IE浏览器的event.toElement属性。
  • event.pageX / event.pageY属性 获取相对于页面的x坐标和y坐标。
  • event.which属性 获取鼠标单击事件中的左、中、右键;获取键盘事件中的按键。
  • event.metaKey属性 键盘事件中获取ctrl按键
  • event.originalEvent属性 指向原始的事件对象
    6、移除事件
$("#btn").unbind() ;//删除所有绑定的事件
$("#btn").unbind(“click”) ;//删除所有单击事件
$("#btn").unbind(“click”,myFun2) ;//删除单击事件绑定的函数myFun2

7、模拟操作

常用模拟,两种形式:

    第一种,$("#btn").trigger("click");
    第二种,$("#btn").click();

触发自定义事件,例如:

$("#btn").bind("myClick",function(){ alert("I am xiaohu!"); });
$("#btn").trigger("myClick");

传递数据

trigger(type,[,data]);

第一个参数是触发的事件类型,第二个参数是传递给事件处理函数的附加数据,以数组的形式传递。例如:

$("#btn").bind("myClick",function(event,msg1,msg2){ alert("I am xiaohu!"+msg1+msg2); });
$("#btn").trigger("myClick",["我的","测试"]);

执行默认操作
trigger()方法触发事件后,会执行浏览器的默认操作。例如:

$("input").trigger("focus");

不仅仅触发了元素绑定的focus事件,而会使元素本身获取焦点。如果只想触发绑定的focus事件,不不想执行浏览器的默认操作,可以调用另外一个方法,triggerHandler()方法。$("input").triggerHandler("focus");

8、其它方法

绑定多个事件类型

$(function(){
    $("div").bind("mouseover mouseout ",function(){
        $(this).toggleClass("over");
    });
});
添加事件命名空间,便于管理
$("#btn").bind("click.plugin",function(){ alert("I am xiaohu!"); });
$("#btn").bind("dblclick.plugin",function(){ alert("I am xiaohu!"); });
$("#btn").bind("mouseover",function(){ alert("I am xiaohu!"); });
$("#del").bind("click",function(){  $("#btn").unbind(".plugin"); });//只删除命名空间为plugin的函数。

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

$("#btn").bind("click",function(){ alert("I am xiaohu!"); });
$("#btn").bind("click.plugin",function(){ alert("I am xiaohu!"); });
$("#btn").trigger("click!");//调用不包括在命名空间内的方法,只调用第一个方法。
$("#btn").trigger("click");//调用上面两个方法

二、jQuery中的动画


动画效果也是jQuery库吸引人的地方。通过jQuery的动画方法,能够轻松地为网页添加非常精彩的视觉效果,给用户一种全新的体验。
1、show()方法和hide()方法

当不带任何参数时,相当于css("dispaly","none/block/inline"),作用是立即隐藏或显示匹配的元素,不会执行任何动画。如果需要让元素动起来,可以在方法中加参数。例如:
    $("element").show("slow"); //slow 600ms 、normal 400ms、fast 200ms。
如果使元素1秒钟内显示出来,还可以写成: $("element").show(1000);

2、fandIn()方法和fandOut()方法

fandIn()方法和fandOut()方法只改变元素的不透明度。fandOut()方法只在指定的一段时间内降低元素的不透明度,直到元素完全消失(“display:none”),fandIn()方法则相反。

3、slideUp()方法和slideDown()方法

slideUp()方法和slideDown()方法只改变元素的高度。如果一个元素的display属性值为none,当调用slideDown()方法时会由上自下延伸显示。slideUp()方法则相反,原始会将由下向上隐藏。

4、自定义动画方法animate()——–重点

  animate(params,speed,callback);

params:一个包含样式属性及值的映射;
speed:速度参数,可选;
callback:在动画完成时执行的函数,可选。例如:

     $("#panel").click(function(){
            $(this).animate({left:"500px;",3000}//右移500px
   }); 

   $("#panel").click(function(){
           $(this).animate({left:"+=500px;",3000}//在当前位置累加500px
   });
   $("#panel").click(function(){
          $(this).animate({left:"500px”;height:"200px"},3000);//多重动画
   });

5、动画回调函数

$("#panel").click(function(){

        $(this).animate({left:"500px;height:200px"},3000,function(){

                    $(this).css("border","5px solid blue");

             });

    });

6、停止动画和判断是否处于动画状态

 stop([clearQueue] [,gotoEnd]); 

立即停止当前动画。clearQueue代表是否清空未执行完的动画队列,gotoEnd代表是否直接将正在执行的动画跳转到末状态。

if(!$(element).is(":animated")){  //判断元素是否正处于动画状态

       //如果没有,则添加新动画

}

7、其它动画方法

toggle(speed,[callback]) //切换元素可见状态。如果元素是可见的,则切换为隐藏;如果元素是隐藏的,则切换为可见的。

sildeToggle(speed,[callback])//通过高度变化来切换匹配元素的可见性。

fadeTo(speed,opacity,[callback])//把元素的不透明度以渐进的方式调整到指定的值。

8、动画方法概括

这里写图片描述

用animate()方法代替show()方法:

$("p").animate({height:"show",width:"show",opacity:"show"},400); 相当于:$("p").show(400);

用animate()方法代替fandIn()方法:

$("p").animate({opacity:"show"},400); 相当于:$("p").fandIn(400);

用animate()方法代替slideDown()方法:

$("p").animate({height:"show"},400); 相当于:$("p").slideDown(400);

用animate()方法代替fandTo()方法:

$("p").animate({opacity:"0.6"},400); 相当于:$("p").fandTo(400,0.6);

事实上,这些动画就是animate()方法的一种内置了特定样式属性的简写形式。在animate()方法中,这些特定样式的属性值可以为“show”、“hide”、“toggle”,也可以是自定义数字值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值