• 3月
    24日
    锋利的jQuery —— (4)jQuery中的事件和动画
    jQuery dier 2014-03-24 14:44 1729 0

    《锋利的jQuery》读书笔记 —— jQuery中的事件和动画

    ·加载DOM
    $(window).load() 等价于 window.onload 事件
    
    $(document).ready() 相当于window.onload事件,但有些区别:
      (1)执行时机:
      window.onload 是在网页中所有元素(包括元素的所有关联文件)完全加载后才执行
      $(document).ready() 是在DOM完全就绪时就可以被调用,此时,并不意味着这些元素关系的文件都已经下载完毕
      
      (2)多次使用:可以在同一个页面注册多个$(document).ready()事件
      (3)简写方式:可以缩写成 $(function(){ })  或  $().ready()
      
    ·事件绑定
    当文档装载完成后,可以通过bind()方法,为特定的元素进行事件的绑定,可重复多次使用
      bind( type, [data, ] fn );
      type:指事件的类型: 
        blur(失去焦点)、focus(获得焦点)
        load(加载完成)、unload(销毁完成)
        resize(调整元素大小)、scroll(滚动元素)
        click(单击元素事件)、dbclick(双击元素事件)
        mousedown(按下鼠标)、mouseup(松开鼠标)
        mousemove(鼠标移过)、mouseover(鼠标移入)、mouseout(鼠标移出)
        mouseenter(鼠标进入)、mouseleave(鼠标离开)
        change(值改变)、select(下拉框索引改变)、submit(提交按钮)
        keydown(键盘按下)、keyup(键盘松开)、keypress(键盘单击)
        error(异常)
      data:指事件传递的属性值,event.data 额外传递给对象事件的值
      fn:指绑定的处理函数,在此函数体内,$(this)指携带相应行为的DOM元素
    
    ·合并事件
    hover(enter,leave):鼠标移入执行enter、移出事件执行leave
    $("#myDiv").hover( function(){
        $(this).css("border", "1px solid black");0
    }, function(){
        $(this).css("border", "none");
    });
    
    toggle(fn1,fn2,...fnN):鼠标每点击一次,执行一个函数,直到最后一个后重复
    $("#myDiv").toggle( function(){
        $(this).css("border", "1px solid black");0
    }, function(){
        $(this).css("border", "none");
    });
    
    ·事件冒泡
    下面的例子,BODY元素下有DIV元素,DIV元素下有SPAN元素,分别将三种元素都注册click事件。
    那么,click事件会按照DOM的层次结构,像水泡一样不断向上直到顶端,所以称之为事件冒泡。
    <body><div><span>我是SPAN我怕谁</span></div></body>
    $("span").bind("click", function(){ alert('span click'); });
    $("div").bind("click", function(){ alert('div click'); });
    $("body").bind("click", function(){ alert('body click'); });
    
    ·阻止冒泡
    解决这个问题的办法是:在SPAN执行完click事件后,停止事件冒泡。
    $("span").bind("click", function(event){
        alert('span click');
        event.stopPropagation(); //停止冒泡
    });
    
    ·阻止默认行为
    提交按钮在提交前做相应的逻辑判断,当不满足时
    $("#btnSubmit").bind("click", function(event){
        event.preventDefault(); //阻止默认行为 相当于return false;
    });
    
    ·事件对象的属性
    $("#myDiv").bind("click", function(event){ });
    event.type() //返回:click
    event.target() //获取当前元素
    event.relatedTarget() //引发事件的元素
    event.pageX()/event.pageY() //获取鼠标相对于页面的X和Y坐标
    event.which() //在单击事件中获取到对应的按键 鼠标左中右分别是123
    event.metaKey() //获取操作中的相关功能键(ctrl/alt/shift)
    
    ·移除事件
    $("#myDiv").bind("click", fn1 = function(){
        alert("function1");
    }).bind("click", fn2 = function(){
        alert("function2");
    }).bind("click", fn3 = function(){
        alert("function3");
    });
    $("#myDiv").unbind(); //移除id为myDiv的元素的所有事件
    $("#myDiv").unbind("click"); //移除id为myDiv的元素的所有click事件
    $("#myDiv").unbind("click",fn1); //移除id为myDiv的元素的名称为fn1的click事件
    
    ·一次性事件:绑定的事件执行一次后自动移除
    $("#myDiv").one("click", [data], function(){
        alert("function1");
    });
    
    ·触发事件
    $("#btn").trigger("click", [data]); //代码方式触发click事件
    $("#btn").click(); //另一种简写方式
    
    ·事件命名空间
    $("#myDiv").bind("click.hello", function(){
        alert("function1");
    });
    $("#myDiv").bind("click", function(){
        alert("function1");
    })
    $("div").unbind("click"); //两个事件都被移除
    $("div").unbind(".hello"); //只移除第一个
    $("div").unbind("click!"); //只移除第二个(注意感叹号,指没有名字空间的)
    
    ·JQuery中的动画
    $("div").hide(); //隐藏所有DIV元素,相当于sytle="display:none"
    $("div").show(); //显示所有DIV元素
    
    $("div").hide(1000); //一秒内隐藏所有DIV元素,其它参数还有:slow(600) normal(400) fast(200)
    $("div").show(1000); //一秒内显示所有DIV元素
    
    $("div").fadeOut(); //降低元素的不透明度,直至消失(支持速度参数,不会改变宽高)
    $("div").fadeIn(); //升高元素的不透明度,直至显示
    
    $("div").slideUp(); //由下至上收缩元素,直至消失(支持速度参数)
    $("div").slideDown(); //由上至下展开元素,直至显示
    
    ·自定义动画animate
    $(elem).animate(params, speed, callback);
    params:样式属性及值的映射 {protected:"value", protected:"value"}
    speed: 速度参数
    callback: 动画完成后执行函数,可选
    
    $("#myDiv").animate({left:"500px"}, 2000); //两秒内ID为myDiv的元素移至左边距500px的位置
    $("#myDiv").animate({left:"+=500px"}, 2000); //同上,支持累加、累减
    $("#myDiv").animate({top:"200px", left:"+=500px"}, 2000); //同上,多重动画,同时执行
    
    $("#myDiv").animate({opacity:"0.5"}, 1000) //先变成50%透明
               .animate({top:"500px"}, 500) //移至离顶端500px
               .animate({left:"500px"}, 500) //移至离左边500px
               .fadeOut(1000); //显示出来 (四个动作为队列,一步步执行)
    
    $("#myDiv").stop([cleanQuene] [,gotuEnd]); //停止动画,参数为boolean
    
    $("#myDiv").is(":animate") //判断元素是否在执行动画
    
    ·其它动画
    $("#myDiv").toggle(); //显示与隐藏元素
    $("#myDiv").slideToggle(); //展开与收缩元素
    $("#myDiv").fadeTo(1000, 0.2); //一秒内将元素透明度调整到20%


文章评论