《锋利的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%