事件类型
包括:
- 鼠标事件
- 键盘事件
- 其他事件
- 事件参数
- 事件绑定和取消
鼠标事件
click
鼠标单击时触发
$(function(){
$('a').click(function(){
$('img')
.eq($(this).index())
.css({'opacity':'1'})
.siblings()
.css({'opacity':'0'});
});
});
dblclick
鼠标双击时触发
$
(function(){
$('a').dblclick(function(){
console.log($(this));
$('img')
.eq($(this).index())
.css({'opacity':'1'})
.siblings()
.css({'opacity':'0'});
});
});
- 双击事件是由两次单击完成,所以双击事件执行的时候必定会触发单击事件。
- 一般情况下,单击双击分开执行,不会一起执行。
mousedown
鼠标按下时触发
$(function(){
$('a').mousedown(function(){
console.log($(this));
$('img')
.eq($(this).index())
.css({'opacity':'1'})
.siblings()
.css({'opacity':'0'});
});
});
mouseup
按下鼠标松开时触发
$(function(){
$('a').mouseup(function(){
console.log($(this));
$('img')
.eq($(this).index())
.css({'opacity':'1'})
.siblings()
.css({'opacity':'0'});
});
});
mouseenter
鼠标进入时触发
$(function(){
$('a').mouseenter(function(){
console.log($(this));
$('img')
.eq($(this).index())
.css({'opacity':'1'})
.siblings()
.css({'opacity':'0'});
});
});
$(function(){
$('nav').mouseenter(function(){
console.log($(this));
});
});
mouseleave
鼠标移出时触发
$(function(){
$('a').mouseleave(function(){
console.log($(this));
$('img')
.eq($(this).index())
.css({'opacity':'1'})
.siblings()
.css({'opacity':'0'});
});
});
$(function(){
$('nav').mouseleave(function(){
console.log($(this));
});
});
hover (over,out)
鼠标进入和退出时触发两个函数 ,相当于mouseenter和mouseleave
$(function(){
$('a').hover(function(){
$('img')
.eq($(this).index())
.css({'opacity':'1'})
.siblings()
.css({'opacity':'0'});
},function(){
$('img')
.eq($(this).index())
.css({'opacity':'0'})
.siblings()
.css({'opacity':'1'});
});
});
mouseover
鼠标进入指定元素及其子元素时触发
$(function(){
$('nav').mouseover(function(){
console.log($(this));
});
});
mouseout
鼠标移出指定元素及其子元素时触发
$(function(){
$('nav').mouseout(function(){
console.log($(this));
});
});
mousemove
在DOM内部移动时发生这个事件
$(function(){
$('nav').mousemove(function(){
console.log($(this));
});
});
总结:
- 很多捣蛋程序通过mousemove做出来的。
- 拖拽文件上传用得到!
scroll
当滚动这个元素时会发生这个事件
$(function(){
$('div').scroll(function(){
console.log($(this));
});
});
键盘事件
keydown
当键盘或者按钮被按下时,触发keydown事件。
$(function(){
$(document).keydown(function(event){
console.log(event);
});
});
$(function(){
$('input').keydown(function(event){
console.log(event);
});
});
小知识
- clientX clientY 鼠标坐标
- handleObj 回调函数
- origType 事件类型
- key 哪个键
- keyCode AscII码对应的编码
总结:
- 有时候我们通过获取key值判断按下什么键
- 可以通过获取键位获取输入什么键
- 通过keycode:ASCII值判断
keyup
当按钮松开时,触发keyup事件,发生在当前获得焦点的元素上。
$(function(){
$(document).keyup(function(event){
console.log(event);
});
});
总结:
- 现在的浏览器基本上可以使用keydown和keyup,发生在当前获得焦点的元素上
- 旧浏览器保留一个keypress事件
keypress
当键盘或者按钮按下时,发生keypress事件
$(function(){
$(document).keypress(function(event){
console.log(event);
});
});
$(function(){
$('input').keypress(function(event){
console.log(event);
});
});
总结:
- 独特在于必须输入内容才会触发
- 比如输入法、回退,Ctrl, alt不会触发的
- 现在版本和keypress keydown几乎没有区别
其他事件
ready()
当DOM载入就绪可以查询或者操纵时绑定一个要执行的函数
$(document).ready(function(){});
resize()
当浏览器调整窗口大小时,触发事件
$(function(){
$(window).resize(function(event){
console.log(event);
});
});
focus()
当元素获得焦点时触发事件
$(function(){
$('input').focus(function(){
console.log('我获得焦点了');
});
});
blur()
当元素失去焦点时触发事件
$(function(){
$('input').blur(function(){
console.log('我失去焦点了');
});
});
change()
当元素得值发生改变时,发生change事件
$(function(){
$('input').change(function(){
console.log('我改变了111');
});
});
select()
当textarea或者文本类型的input文本被选择时,会发生select事件
$(function(){
$('textarea').select(function(){
console.log('我被选中了');
});
});
总结:
只有可编辑的文本和文本域等可以产生select事件
submit()
当提交表单时,发生submit事件
$(function(){
$('input[type=button]').click(function(){
//给form绑定submit事件
$('form').submit();
});
});
submit具有三个功能
1. 提交表单
$(function(){
$('input[type=button]').click(function(){
$('form').submit();
});
});
2. 阻止提交表单
$(function(){
$('form').submit(function(){
//......
return false;
});
});
3. 提交表单时做一些我们所需要的做的事
可以写函数 多用于表单验证
$(function(){
$('form').submit(function(){
var inputValue = $('input[type=text]').val();
if (inputValue!=='www.baidu.com') return false;
});
});
总结:
- button不再form就是普通按钮
- button在form中,相当于submit提交按钮
- button是html5新增的
- 在ie中就是普通按钮
- 在非ie中就是提交按钮
事件参数
event
概念:我们需要通过event获取鼠标位置和键盘位置,否则监听事件无意义
所有事件都会传入event对象作为参数,可以从event对象上获取很多信息;
$(function(){
$(document).keydown(function(event){
//console.log(event.keyCode);//值
if(event.keyCode==37){
alert('弹出左键');
} else if (event.keyCode==39){
alert('弹出右键');
}
});
});
事件绑定和取消
on(events,[selector],[data],fn)
在选择元素上绑定一个或多个事件的事件处理函数
绑定一个事件
function flash(){
$('.button').show().fadeOut('slow');
}
$('.bind').click(function(){
$(document).on('click','.obj',flash)
.find('.obj').text('点击按钮有效果');
});
多个事件处理
$(function(){
var index = 0;
$('a').add(document).on({
mouseenter:function(event){
event.stopPropagation();//阻止事件的冒泡
index=$(this).index();
//图片切换函数
imgChange();
},
keydown:function(event){
event.stopPropagation();//阻止事件的冒泡
console.log(event.keyCode);
if (event.keyCode==37) {
index=index>0?--index:$('a').length-1;
} else if (event.keyCode==39) {
index=index<$('a').length-1?++index:0;
} else {
return true;
}
imgChange();
}
});
function imgChange(){
$('img')
.eq(index)
.css({'opacity':'1'})
.siblings()
.css({'opacity':'0'});
}
});
add()
方法表示将元素添加到已存在的元素组合中
语法:$(选择器).add(element,context)
off(events,[selector],[data],fn)
在选择元素上移除一个或者多个事件处理函数
function flash(){
$('.button').show().fadeOut('slow');
}
$('.unbind').click(function(){
$(document).off('click','.obj',flash)
.find('.obj').text('这个按钮点击没有效果');
});
one(type,[data],fn)
为每一个匹配元素的特定事件(比如click)绑定一个一次性的事件处理函数
function flash(){
$('.button').show().fadeOut('slow');
}
$('.one').click(function(){
$(document).one('click','.obj',flash)
.find('.obj').text('次按钮可以点击一次');
});
jQuery动画基础
原理
我们只需要以固定的时间间隔(0.1秒),每次DOM元素的css样式修改一点(例如:高度,宽度增加10%),看起来就像动画。
自定义动画
animate()
概念:可以实现任意动画效果,需要传递的参数是DOM元素最终的css状态和时间。
var div = $("#test-animate");
div.animate({
opacity:0.25,
width:'256px',
height:'256px
},3000);
第一个参数:{}属性变化的对象
第二个参数:动画执行的事件毫秒数
delay()
概念:方法可以实现动画暂停
var swiper = function(){
$('div').stop()
.animate({'width':'0%'},1000)
.delay(3000)
.animate({'width':'100%'},1000);
}
动画函数
show()
直接无参形式调用show()会显示DOM元素,但是只要传递一个时间参数进去,就变成动画
var swiper = function(){
$('img')
.eq(index).stop()
.show('slow')
.siblings().hide('slow');
}
hide()
直接无参形式调用hide () 会隐藏DOM元素,但是只要传递一个时间参数进去,就变成动画
var div = $('#test-show-hide);
div.hide(3000);//在3秒钟内逐渐消失
toggle()
根据当前状态决定是show() 和hide()
var swiper = function(){
$('div').stop().toggle('slow');
}
fadeIn()
动画的淡入,也就是通过不断设置DOM元素的opacity属性实现的。
var swiper = function(){
$('img')
.eq(index).stop()
.fadeIn('slow')
.siblings().fadeOut('slow');
}
fadeOut()
动画的淡出,也就是通过不断设置DOM元素的opacity属性实现的。
var swiper = function(){
$('img')
.eq(index).stop()
.fadeIn(1000)
.siblings().fadeOut(1000);
}
fadeToggle()
根据元素是否可见决定下一步动作
var swiper = function(){
$('div').stop().fadeToggle('slow');
}
slideUp()
在垂直方向逐渐的展开
var swiper = function(){
$('img')
.eq(index).stop()
.slideDown('slow')
.siblings().slideUp('slow');
}
slideDown()
在垂直方向逐渐的收缩
var swiper = function(){
$('img')
.eq(index).stop()
.slideDown(1000)
.siblings().slideUp(1000);
}
slideToggle()
根据元素是否可见决定下一步动作
var swiper = function(){
$('div').stop().slideToggle('slow');
}
总结
- show和hide会控制宽高和透明度
- fade不控制宽高,只会控制透明度
- slide只控制高度以及透明度,但是不控制宽度