jQuery 04 事件和动画
2015-06-04 00:00
531 查看
加载DOM,在常规的JS中,通常使用window.onload方法。在jQuery中,使用
$(document).ready(function(){ }) ,在DOM加载完时就执行,不必等到相关资源加载。 如果需要等所有内容都加载完毕再执行可以用:
$(window).load(function(){})
事件绑定,在文档加载完成后,可以用bind方法对匹配元素进行特定时间的绑定:
bind(type,data,fn);
data为可选参数,作为event.data属性值传递给事件对象
$(function(){
$("#panel h5.head")
.bind("click",function(){
$(this).next().show();
})
})
this
引用的是相应动作的当前DOM元素,使用
$(this)
转换为jQuery对象。
使用is(), 判断元素是否显示
$(function(){
$("#panel h5.head").bind("click",function(){
var $content = $(this).next();
if(
$content.is(":visible")){
$content.
hide();
}else{
$content.
show();
}
})
})
$(function(){
$("#panel h5.head").
bind("mouseover",function(){
$(this).next().show();
}).
bind("mouseout",function(){
$(this).next().hide();
})
})
bind可以绑定所有的js事件,click,mouseover,mouseout这类事件,jQuery提供一套简写的方法。
$(function(){
$("#panel h5.head").
mouseover(function(){
$(this).next().show();
}).
mouseout(function(){
$(this).next().hide();
})
})
jQuery有2个合成方法 hover()和toggle().
hover用于模拟光标悬停,当光标移动到元素上时,触发第1个函数,移出时触发第2个函数
$(function(){
$("#panel h5.head").
hover(function(){
$(this).next().show();
},function(){
$(this).next().hide();
})
})
toggle用于模拟鼠标连续单击事件。第一次单击执行第一个函数,第2次执行第2个函数
$(function(){
$("#panel h5.head").
toggle(function(){
$(this).next().show();
},function(){
$(this).next().hide();
})
})
toggle还有另一个作用:切换元素的可见状态
$(function(){
$("#panel h5.head").
toggle(function(){
$(this).next().
toggle();
},function(){
$(this).next().
toggle();
})
})
事件冒泡,事件会按照DOM的层次结构不断向上直到顶端。事件冒泡可能会引起问题,有必要对事件的作用范围进行限制。
事件对象event:
$('span').bind("click",
function(event){
var txt = $('#msg').html() + "<p>内层span元素被点击.<p/>";
$('#msg').html(txt);
event.stopPropagation(); // 阻止事件冒泡
});
默认行为,有时需要阻止链接跳转或表单提交。
$(function(){
$("#sub").bind("click",function(
event){
var username = $("#username").val(); //获取元素的值
if(username==""){ //判断值是否为空
$("#msg").html("<p>文本框的值不能为空.</p>"); //提示信息
event.preventDefault(); //阻止默认行为 ( 表单提交 )
}
})
})
如果想同时对事件对象停止冒泡和默认行为,可以在事件处理函数中返回 false.
$(function(){
$("#sub").bind("click",function(
event){
var username = $("#username").val(); //获取元素的值
if(username==""){ //判断值是否为空
$("#msg").html("<p>文本框的值不能为空.</p>"); //提示信息
return false;
}
})
})
事件对象 Event的属性
重复绑定事件
<script type="text/javascript">
$(function(){
$('#btn').bind("
click", function(){
$('#test').append("<p>我的绑定函数1</p>");
}).bind("
click", function(){
$('#test').append("<p>我的绑定函数2</p>");
}).bind("
click", function(){
$('#test').append("<p>我的绑定函数3</p>");
});
})
</script>
移除事件
<script type="text/javascript">
$(function(){
$('#btn').bind("click", function(){
$('#test').append("<p>我的绑定函数1</p>");
}).bind("click", function(){
$('#test').append("<p>我的绑定函数2</p>");
}).bind("click", function(){
$('#test').append("<p>我的绑定函数3</p>");
});
$('#delAll').click(function(){
$('#btn').
unbind("click");
});
})
</script>
<script type="text/javascript">
$(function(){
$('#btn').bind("click",
myFun1 =
function(){
$('#test').append("<p>我的绑定函数1</p>");
}).bind("click",
myFun2 =
function(){
$('#test').append("<p>我的绑定函数2</p>");
}).bind("click", myFun3 = function(){
$('#test').append("<p>我的绑定函数3</p>");
});
$('#delTwo').click(function(){
$('#btn').unbind("click",myFun2);
});
})
</script>
对于只运行一次的事件可以用one()
<script type="text/javascript">
$(function(){
$('#btn').
one("click", function(){
$('#test').append("<p>我的绑定函数1</p>");
}).
one("click", function(){
$('#test').append("<p>我的绑定函数2</p>");
}).
one("click", function(){
$('#test').append("<p>我的绑定函数3</p>");
});
})
</script>
模拟操作,可以用trigger()完成模拟操作。
<script type="text/javascript">
$(function(){
$('#btn').bind("click", function(){
$('#test').append("<p>我的绑定函数1</p>");
}).bind("click", function(){
$('#test').append("<p>我的绑定函数2</p>");
}).bind("click", function(){
$('#test').append("<p>我的绑定函数3</p>");
});
$('#btn').trigger("click");
})
</script>
<script type="text/javascript">
$(function(){
$('#btn').bind("myClick",
function(event, message1, message2){
$('#test').append( "<p>"+message1 + message2 +"</p>");
});
$('#btn').click(function(){
$(this).trigger("myClick",["我的自定义","事件"]);
})
.trigger("myClick",["我的自定义","事件"]);
})
</script>
trigger()方法触发事件后,会执行默认操作,如果不想执行默认操作可以用
<script type="text/javascript">
$(function(){
$('#old').bind("click", function(){
$("input").trigger("focus");
});
$('#new').bind("click", function(){
$("input").
triggerHandler("focus");
});
$("input").focus(function(){
$("body").
append("<p>focus.</p>");
})
})
</script>
一次绑定多个事件
<script type="text/javascript">
$(function(){
$("div").
bind("mouseover mouseout", function(){
$(this).toggleClass("over");
});
})
</script>
增加事件命名空间
<script type="text/javascript">
$(function(){
$("div").
bind("click.plugin",function(){
$("body").append("<p>click事件</p>");
});
$("div").
bind("mouseover.plugin", function(){
$("body").append("<p>mouseover事件</p>");
});
$("div").bind("dblclick", function(){
$("body").append("<p>dblclick事件</p>");
});
$("button").click(function() {
$("div").
unbind(".plugin");
})
/*
click,mouseover 事件被删除,
*/
})
</script>
show和hide
<script type="text/javascript">
$(function(){
$("#panel h5.head").toggle(function(){
$(this).next().
hide();
},function(){
$(this).next().
show();
})
})
</script>
<script type="text/javascript">
$(function(){
$("#panel h5.head").toggle(function(){
$(this).next().
hide(600);
},function(){
$(this).next().
show(600);
})
})
</script>
<script type="text/javascript">
$(function(){
$("#panel h5.head").click(function(){
$(this).next().
toggle();
})
})
</script>
fade
<script type="text/javascript">
$(function(){
$("#panel h5.head").toggle(function(){
$(this).next().
fadeOut();
},function(){
$(this).next().
fadeIn();
})
})
</script>
<script type="text/javascript">
$(function(){
$("#panel h5.head").click(function(){
$(this).next().
fadeTo(600, 0.2);
})
})
</script>
<script type="text/javascript">
$(function(){
$("#panel h5.head").click(function(){
$(this).next().
fadeToggle();
})
})
</script>
slide 改变元素的高度
<script type="text/javascript">
$(function(){
$("#panel h5.head").toggle(function(){
$(this).next().
slideUp();
},function(){
$(this).next().
slideDown();
})
})
</script>
<script type="text/javascript">
$(function(){
$("#panel h5.head").click(function(){
$(this).next().
slideToggle();
})
})
</script>
自定义动画方法animate
语法结构:animate(params,speed,callback);
<script type="text/javascript">
$(function(){
$("#panel").click(function(){
$(this).
animate({left: "500px"}, 3000);
})
})
</script>
在使用
animate 之前,为了能影响该元素的top,left,bottom,right样式属性,必须先把元素的position样式设置为 relative或absolute.
#panel {
position: relative;
width: 100px; height:100px;border: 1px solid #0050D0;background: #96E555; cursor: pointer}
累加/累减,如果在500px前加上 +=或-= 表示在当前位置累加或累减
同时执行多个变化
<script type="text/javascript">
$(function(){
$("#panel").click(function(){
$(this).
animate({left: "500px",height:"200px"}, 3000);
})
})
</script>
按顺序执行
<script type="text/javascript">
$(function(){
$("#panel").click(function(){
$(this).
animate({left: "500px"}, 3000)
.
animate({height: "200px"}, 3000);
})
})
</script>
<script type="text/javascript">
$(function(){
$("#panel").
css("opacity", "0.5");//设置不透明度
$("#panel").click(function(){
$(this).
animate({left: "400px", height:"200px" ,opacity: "1"}, 3000)
.
animate({top: "200px" , width :"200px"}, 3000 )
.
fadeOut("slow");
});
});
</script>
动画的回调函数
<script type="text/javascript">
$(function(){
$("#panel").css("opacity", "0.5");//设置不透明度
$("#panel").click(function(){
$(this).
animate({left: "400px", height:"200px" ,opacity: "1"}, 3000)
.
animate({top: "200px" , width :"200px"}, 3000 ,
function(){
$(this).css("border","5px solid blue");
})
});
});
</script>
<script type="text/javascript">
$(function(){
$("#panel").css("opacity", "0.5");//设置不透明度
$("#panel").click(function(){
$(this).
animate({left: "400px", height:"200px" ,opacity: "1"}, 3000)
.
animate({top: "200px" , width :"200px"}, 3000 )
.
queue(function(next){
$(this).css("border","5px solid blue");
next(); //继续下一个动画
})
.slideUp("slow");
});
});
</script>
停止动画,可以用stop()方法:stop(clearQueue,gotoEnd)
clearQueue表示是否清空未执行的动画队列,gotoEnd表示是否直接到当前动画的最后状态。
<script type="text/javascript">
$(function(){
$("#panel").hover(function() {
$(this).
stop().animate({height : "150",width : "300"} , 200 );
},function() {
$(this).
stop().animate({height : "22",width : "60" } , 300 );
});
});
</script>
<script type="text/javascript">
$(function(){
$("#panel").hover(function() {
$(this).
stop(true)
.animate({height : "150" } , 200 )
.animate({width : "300" } , 300 )
},function() {
$(this).
stop(true)
.animate({height : "22" } , 200 )
.animate({width : "60" } , 300 )
});
});
</script>
判断动画状态
<script type="text/javascript">
$(function(){
//给id为mover的元素添加动画.
function animateIt() {
$("#mover").slideToggle("slow", animateIt);
}
function animateIt2() {
$("#mover").fadeToggle("slow", animateIt2);
}
animateIt();
$("button").click(function(){
if(!$('#mover').
is(":animated")){ //判断元素是否正处于动画状态
//如果当前没有进行动画,则添加新动画
$('#mover').
fadeToggle("slow", animateIt2);
}else{
$('#mover').
stop();
}
});
});
</script>
延迟动画
<script type="text/javascript">
$(function(){
$("#panel").css("opacity", "0.5");//设置不透明度
$("#panel").click(function(){
$(this).
animate({left: "400px", height:"200px" ,opacity: "1"}, 3000)
.
delay(1000)
.
animate({top: "200px" , width :"200px"}, 3000 )
.
delay(2000)
.
fadeOut("slow");
});
});
</script>
$(document).ready(function(){ }) ,在DOM加载完时就执行,不必等到相关资源加载。 如果需要等所有内容都加载完毕再执行可以用:
$(window).load(function(){})
事件绑定,在文档加载完成后,可以用bind方法对匹配元素进行特定时间的绑定:
bind(type,data,fn);
data为可选参数,作为event.data属性值传递给事件对象
$(function(){
$("#panel h5.head")
.bind("click",function(){
$(this).next().show();
})
})
this
引用的是相应动作的当前DOM元素,使用
$(this)
转换为jQuery对象。
使用is(), 判断元素是否显示
$(function(){
$("#panel h5.head").bind("click",function(){
var $content = $(this).next();
if(
$content.is(":visible")){
$content.
hide();
}else{
$content.
show();
}
})
})
$(function(){
$("#panel h5.head").
bind("mouseover",function(){
$(this).next().show();
}).
bind("mouseout",function(){
$(this).next().hide();
})
})
bind可以绑定所有的js事件,click,mouseover,mouseout这类事件,jQuery提供一套简写的方法。
$(function(){
$("#panel h5.head").
mouseover(function(){
$(this).next().show();
}).
mouseout(function(){
$(this).next().hide();
})
})
jQuery有2个合成方法 hover()和toggle().
hover用于模拟光标悬停,当光标移动到元素上时,触发第1个函数,移出时触发第2个函数
$(function(){
$("#panel h5.head").
hover(function(){
$(this).next().show();
},function(){
$(this).next().hide();
})
})
toggle用于模拟鼠标连续单击事件。第一次单击执行第一个函数,第2次执行第2个函数
$(function(){
$("#panel h5.head").
toggle(function(){
$(this).next().show();
},function(){
$(this).next().hide();
})
})
toggle还有另一个作用:切换元素的可见状态
$(function(){
$("#panel h5.head").
toggle(function(){
$(this).next().
toggle();
},function(){
$(this).next().
toggle();
})
})
事件冒泡,事件会按照DOM的层次结构不断向上直到顶端。事件冒泡可能会引起问题,有必要对事件的作用范围进行限制。
事件对象event:
$('span').bind("click",
function(event){
var txt = $('#msg').html() + "<p>内层span元素被点击.<p/>";
$('#msg').html(txt);
event.stopPropagation(); // 阻止事件冒泡
});
默认行为,有时需要阻止链接跳转或表单提交。
$(function(){
$("#sub").bind("click",function(
event){
var username = $("#username").val(); //获取元素的值
if(username==""){ //判断值是否为空
$("#msg").html("<p>文本框的值不能为空.</p>"); //提示信息
event.preventDefault(); //阻止默认行为 ( 表单提交 )
}
})
})
如果想同时对事件对象停止冒泡和默认行为,可以在事件处理函数中返回 false.
$(function(){
$("#sub").bind("click",function(
event){
var username = $("#username").val(); //获取元素的值
if(username==""){ //判断值是否为空
$("#msg").html("<p>文本框的值不能为空.</p>"); //提示信息
return false;
}
})
})
事件对象 Event的属性
$(function(){ $("a").click(function(event) { alert(event.type);//获取事件类型 return false;//阻止链接跳转 }); }) | 获取事件类型 |
$(function(){ $("a[href='http://google.com']").click(function(event) { var tg = event.target; //获取事件对象 alert( tg.href ) ; return false;//阻止链接跳转 }); }) | 获取事件对象 |
event.relatedTarget | 相关对象 |
$(function(){ $("a").click(function(event) { alert("Current mouse position: " + event.pageX + ", " + event.pageY );//获取鼠标当前相对于页面的坐标 return false;//阻止链接跳转 }); }) | 获取鼠标当前相对于页面的坐标 |
$(function(){ $("a").mousedown(function(e){ alert(e.which) // 1 = 鼠标左键 ; 2 = 鼠标中键; 3 = 鼠标右键 return false;//阻止链接跳转 }) }) | 获得鼠标按键 |
$(function(){ $("input").keyup(function(e){ alert(e.which); }) }) | 获得键盘按键 |
$(function(){ $("input").keyup(function(e){ alert( e.metaKey +" "+e.ctrlKey ); $(this).blur(); }) }) |
<script type="text/javascript">
$(function(){
$('#btn').bind("
click", function(){
$('#test').append("<p>我的绑定函数1</p>");
}).bind("
click", function(){
$('#test').append("<p>我的绑定函数2</p>");
}).bind("
click", function(){
$('#test').append("<p>我的绑定函数3</p>");
});
})
</script>
移除事件
<script type="text/javascript">
$(function(){
$('#btn').bind("click", function(){
$('#test').append("<p>我的绑定函数1</p>");
}).bind("click", function(){
$('#test').append("<p>我的绑定函数2</p>");
}).bind("click", function(){
$('#test').append("<p>我的绑定函数3</p>");
});
$('#delAll').click(function(){
$('#btn').
unbind("click");
});
})
</script>
<script type="text/javascript">
$(function(){
$('#btn').bind("click",
myFun1 =
function(){
$('#test').append("<p>我的绑定函数1</p>");
}).bind("click",
myFun2 =
function(){
$('#test').append("<p>我的绑定函数2</p>");
}).bind("click", myFun3 = function(){
$('#test').append("<p>我的绑定函数3</p>");
});
$('#delTwo').click(function(){
$('#btn').unbind("click",myFun2);
});
})
</script>
对于只运行一次的事件可以用one()
<script type="text/javascript">
$(function(){
$('#btn').
one("click", function(){
$('#test').append("<p>我的绑定函数1</p>");
}).
one("click", function(){
$('#test').append("<p>我的绑定函数2</p>");
}).
one("click", function(){
$('#test').append("<p>我的绑定函数3</p>");
});
})
</script>
模拟操作,可以用trigger()完成模拟操作。
<script type="text/javascript">
$(function(){
$('#btn').bind("click", function(){
$('#test').append("<p>我的绑定函数1</p>");
}).bind("click", function(){
$('#test').append("<p>我的绑定函数2</p>");
}).bind("click", function(){
$('#test').append("<p>我的绑定函数3</p>");
});
$('#btn').trigger("click");
})
</script>
<script type="text/javascript">
$(function(){
$('#btn').bind("myClick",
function(event, message1, message2){
$('#test').append( "<p>"+message1 + message2 +"</p>");
});
$('#btn').click(function(){
$(this).trigger("myClick",["我的自定义","事件"]);
})
.trigger("myClick",["我的自定义","事件"]);
})
</script>
trigger()方法触发事件后,会执行默认操作,如果不想执行默认操作可以用
<script type="text/javascript">
$(function(){
$('#old').bind("click", function(){
$("input").trigger("focus");
});
$('#new').bind("click", function(){
$("input").
triggerHandler("focus");
});
$("input").focus(function(){
$("body").
append("<p>focus.</p>");
})
})
</script>
一次绑定多个事件
<script type="text/javascript">
$(function(){
$("div").
bind("mouseover mouseout", function(){
$(this).toggleClass("over");
});
})
</script>
增加事件命名空间
<script type="text/javascript">
$(function(){
$("div").
bind("click.plugin",function(){
$("body").append("<p>click事件</p>");
});
$("div").
bind("mouseover.plugin", function(){
$("body").append("<p>mouseover事件</p>");
});
$("div").bind("dblclick", function(){
$("body").append("<p>dblclick事件</p>");
});
$("button").click(function() {
$("div").
unbind(".plugin");
})
/*
click,mouseover 事件被删除,
*/
})
</script>
show和hide
<script type="text/javascript">
$(function(){
$("#panel h5.head").toggle(function(){
$(this).next().
hide();
},function(){
$(this).next().
show();
})
})
</script>
<script type="text/javascript">
$(function(){
$("#panel h5.head").toggle(function(){
$(this).next().
hide(600);
},function(){
$(this).next().
show(600);
})
})
</script>
<script type="text/javascript">
$(function(){
$("#panel h5.head").click(function(){
$(this).next().
toggle();
})
})
</script>
fade
<script type="text/javascript">
$(function(){
$("#panel h5.head").toggle(function(){
$(this).next().
fadeOut();
},function(){
$(this).next().
fadeIn();
})
})
</script>
<script type="text/javascript">
$(function(){
$("#panel h5.head").click(function(){
$(this).next().
fadeTo(600, 0.2);
})
})
</script>
<script type="text/javascript">
$(function(){
$("#panel h5.head").click(function(){
$(this).next().
fadeToggle();
})
})
</script>
slide 改变元素的高度
<script type="text/javascript">
$(function(){
$("#panel h5.head").toggle(function(){
$(this).next().
slideUp();
},function(){
$(this).next().
slideDown();
})
})
</script>
<script type="text/javascript">
$(function(){
$("#panel h5.head").click(function(){
$(this).next().
slideToggle();
})
})
</script>
自定义动画方法animate
语法结构:animate(params,speed,callback);
<script type="text/javascript">
$(function(){
$("#panel").click(function(){
$(this).
animate({left: "500px"}, 3000);
})
})
</script>
在使用
animate 之前,为了能影响该元素的top,left,bottom,right样式属性,必须先把元素的position样式设置为 relative或absolute.
#panel {
position: relative;
width: 100px; height:100px;border: 1px solid #0050D0;background: #96E555; cursor: pointer}
累加/累减,如果在500px前加上 +=或-= 表示在当前位置累加或累减
同时执行多个变化
<script type="text/javascript">
$(function(){
$("#panel").click(function(){
$(this).
animate({left: "500px",height:"200px"}, 3000);
})
})
</script>
按顺序执行
<script type="text/javascript">
$(function(){
$("#panel").click(function(){
$(this).
animate({left: "500px"}, 3000)
.
animate({height: "200px"}, 3000);
})
})
</script>
<script type="text/javascript">
$(function(){
$("#panel").
css("opacity", "0.5");//设置不透明度
$("#panel").click(function(){
$(this).
animate({left: "400px", height:"200px" ,opacity: "1"}, 3000)
.
animate({top: "200px" , width :"200px"}, 3000 )
.
fadeOut("slow");
});
});
</script>
动画的回调函数
<script type="text/javascript">
$(function(){
$("#panel").css("opacity", "0.5");//设置不透明度
$("#panel").click(function(){
$(this).
animate({left: "400px", height:"200px" ,opacity: "1"}, 3000)
.
animate({top: "200px" , width :"200px"}, 3000 ,
function(){
$(this).css("border","5px solid blue");
})
});
});
</script>
<script type="text/javascript">
$(function(){
$("#panel").css("opacity", "0.5");//设置不透明度
$("#panel").click(function(){
$(this).
animate({left: "400px", height:"200px" ,opacity: "1"}, 3000)
.
animate({top: "200px" , width :"200px"}, 3000 )
.
queue(function(next){
$(this).css("border","5px solid blue");
next(); //继续下一个动画
})
.slideUp("slow");
});
});
</script>
停止动画,可以用stop()方法:stop(clearQueue,gotoEnd)
clearQueue表示是否清空未执行的动画队列,gotoEnd表示是否直接到当前动画的最后状态。
<script type="text/javascript">
$(function(){
$("#panel").hover(function() {
$(this).
stop().animate({height : "150",width : "300"} , 200 );
},function() {
$(this).
stop().animate({height : "22",width : "60" } , 300 );
});
});
</script>
<script type="text/javascript">
$(function(){
$("#panel").hover(function() {
$(this).
stop(true)
.animate({height : "150" } , 200 )
.animate({width : "300" } , 300 )
},function() {
$(this).
stop(true)
.animate({height : "22" } , 200 )
.animate({width : "60" } , 300 )
});
});
</script>
判断动画状态
<script type="text/javascript">
$(function(){
//给id为mover的元素添加动画.
function animateIt() {
$("#mover").slideToggle("slow", animateIt);
}
function animateIt2() {
$("#mover").fadeToggle("slow", animateIt2);
}
animateIt();
$("button").click(function(){
if(!$('#mover').
is(":animated")){ //判断元素是否正处于动画状态
//如果当前没有进行动画,则添加新动画
$('#mover').
fadeToggle("slow", animateIt2);
}else{
$('#mover').
stop();
}
});
});
</script>
延迟动画
<script type="text/javascript">
$(function(){
$("#panel").css("opacity", "0.5");//设置不透明度
$("#panel").click(function(){
$(this).
animate({left: "400px", height:"200px" ,opacity: "1"}, 3000)
.
delay(1000)
.
animate({top: "200px" , width :"200px"}, 3000 )
.
delay(2000)
.
fadeOut("slow");
});
});
</script>
相关文章推荐
- jquery-uploadify3.2使用心得
- JavaScript及jQuery常用dom操作方法
- 通过IP获取地区省市
- jquery 事件冒泡的介绍以及如何阻止事件冒泡
- jquery的$.extend和$.fn.extend作用及区别
- jquery scroll 自动加载内容
- Jquery 选择器注意的问题--记录(五)
- Jquery有哪些选择器
- 递归查询构造jquery tree
- Jquery基础(六) js方法清空cookie的各种方法
- jQuery插件之ajaxFileUpload
- JS-jquery mobile基础
- JS-jquery mobile事件
- jQuery Validate
- JQuery分页处理(后端)
- Jquery html encode & decode
- jquery 常用选择器及方法
- jquery操作checkbox最佳方法
- jquery ajax satus为200却出现进入error回调函数
- B-JUI(Best jQuery UI) 前端框架