让页面上的元素不可见,通常能够经过设置css的display为none属性。可是经过css直接修改是静态的布局,若是在代码执行的时候,通常是经过js控制元素的style属性,这里jQuery提供了一个快捷的方法.hide()来达到这个效果
$elem.hide()
提供参数:
.hide( options ) 当提供hide方法一个参数时,.hide()就会成为一个动画方法。.hide()方法将会匹配元素的宽度,高度,以及不透明度,同时进行动画操做
$("button:last").click(function() {
$("#a2").hide({
duration: 3000,
})
});
2.jQuery中显示元素的show方法
hide是让元素显示到隐藏,show则是相反,让元素从隐藏到显示
- show与hide方法是修改的display属性,经过是visibility属性布局须要经过css方法单独设置
- 若是使用!important在你的样式中,好比display: none !important,若是你但愿.show()方法正常工做,必须使用.css('display', 'block !important')重写样式
- 若是让show与hide成为一个动画,那么默认执行动画会改变元素的高度,高度,透明度
3.jQuery中显示与隐藏切换toggle方法
基本的操做:toggle();
这是最基本的操做,处理元素显示或者隐藏,由于不带参数,因此没有动画。经过改变CSS的display属性,匹配的元素将被当即显示或隐藏,没有动画。
- 若是元素是最初显示,它会被隐藏
- 若是隐藏的,它会显示出来
display属性将被储存而且须要的时候能够恢复。若是一个元素的display值为inline,而后是隐藏和显示,这个元素将再次显示inline
提供参数:.toggle( [duration ] [, complete ] )
一样的提供了时间、还有动画结束的回调。在参数对应的时间内,元素会发生显示/隐藏的改变,在改变的过程当中会把元素的高、宽、不透明度进行一系列动画效果。这个元素其实就是show与hide的方法
$("button:last").click(function() {
$(".right").toggle(3000)
});
4.jQuery中下拉动画slideDown
.slideDown():用滑动动画显示一个匹配元素
.slideDown()方法将给匹配元素的高度的动画,这会致使页面的下面部分滑下去,弥补了显示的方式
常见的操做,提供一个动画是时间,而后传递一个回调,用于知道动画是何时结束
.slideDown( [duration ] [, complete ] )
持续时间(duration)是以毫秒为单位的,数值越大,动画越慢,不是越快。字符串 'fast' 和 'slow' 分别表明200和600毫秒的延时。若是提供任何其余字符串,或者这个duration参数被省略,那么默认使用400 毫秒的延时。
具体使用:
$("ele").slideDown(1000, function() {
//等待动画执行1秒后,执行别的动做....
});
注意事项:
- 下拉动画是从无到有,因此一开始元素是须要先隐藏起来的,能够设置display:none
- 如 果提供回调函数参数,callback会在动画完成的时候调用。将不一样的动画串联在一块儿按顺序排列执行是很是有用的。这个回调函数不设置任何参数,可是 this会设成将要执行动画的那个DOM元素,若是多个元素一块儿作动画效果,那么要很是注意,回调函数会在每个元素执行完动画后都执行一次,而不是这组 动画总体才执行一次
$("button:last").click(function() {
$("#a2").slideDown(3000,function(){
alert('动画执行结束')
})
});
5.jQuery中上卷动画slideUp
最简单的使用:不带参数
$("elem").slideUp();
这个使用的含义就是:找到元素的高度,而后采用一个下滑动画让元素一直滑到隐藏,当高度为0的时候,也就是不可见的时,修改元素display 样式属性被设置为none。这样就能确保这个元素不会影响页面布局了
带参数:
.slideUp( [duration ] [, easing ] [, complete ] )
一样能够提供一个时间,而后可使用一种过渡使用哪一种缓动函数,jQuery默认就2种,能够经过下载插件支持。最后一个动画结束的回调方法。
由于动画是异步的,因此要在动画以后执行某些操做就必需要写到回调函数里面,这里要特别注意
$("button:last").click(function() {
$("#a2").slideUp(3000,function(){
alert('动画执行结束')
})
});
6.jQuery中上卷下拉切换slideToggle
jQuery提供了一个便捷方法slideToggle用滑动动画显示或隐藏一个匹配元素
基本的操做:slideToggle();
这是最基本的操做,获取元素的高度,使这个元素的高度发生改变,从而让元素里的内容往下或往上滑。
提供参数:.slideToggle( [duration ] ,[ complete ] )
一样的提供了时间、还有动画结束的回调。在参数对应的时间内,元素会完成动画,而后出发回调函数
同时也提供了时间的快速定义,字符串 'fast' 和 'slow' 分别表明200和600毫秒的延时
注意:
- display属性值保存在jQuery的数据缓存中,因此display能够方便之后能够恢复到其初始值
- 当一个隐藏动画后,高度值达到0的时候,display 样式属性被设置为none,以确保该元素再也不影响页面布局
$("button").click(function() {
$("#a1").slideToggle(3000)
});
7.jQuery中淡出动画fadeOut
设置元素透明度为0,可让元素不可见,透明度的参数是0~1之间的值,经过改变这个值可让元素有一个透明度的效果。常见的淡入淡出动画正是这样的原理。
fadeOut()函数用于隐藏全部匹配的元素,并带有淡出的过渡动画效果
所谓"淡出"隐藏的,元素是隐藏状态不对做任何改变,元素是可见的,则将其隐藏。
.fadeOut( [duration ], [ complete ] )
经过不透明度的变化来实现全部匹配元素的淡出效果,并在动画完成后可选地触发一个回调函数。这个动画只调整元素的不透明度,也就是说全部匹配的元素的高度和宽度不会发生变化。
字符串 'fast' 和 'slow' 分别表明200和600毫秒的延时。若是提供任何其余字符串,或者这个duration参数被省略,那么默认使用400毫秒的延时
$("p").fadeOut();
$("p").fadeOut({
duration: 1000
});
$("p").fadeOut(2000, function() {
alert("隐藏完毕!");
});
8.jQuery中淡入动画fadeIn
fadeOut是淡出效果,相反的还有淡入效果fadeIn,方法使用上二者都是一致的,只是结果相反
.fadeIn( [duration ], [ complete ] )
- duration:指定过渡动画运行多长时间(毫秒数),默认值为400。该参数也能够为字符串"fast"(=200)或"slow"(=600)。
- 元素显示完毕后须要执行的函数。函数内的this指向当前DOM元素。
fadeIn()函数用于显示全部匹配的元素,并带有淡入的过渡动画效果。
注意:
- 淡入的动画原理:操做元素的不透明度从0%逐渐增长到100%
- 若是元素自己是可见的,不对其做任何改变。若是元素是隐藏的,则使其可见
9.jQuery中淡入淡出切换fadeToggle
fadeToggle()函数用于切换全部匹配的元素,并带有淡入/淡出的过渡动画效果。以前也学过toggle、slideToggle 也是相似的处理方式
fadeToggle切换fadeOut与fadeIn效果,所谓"切换",即若是元素当前是可见的,则将其隐藏(淡出);若是元素当前是隐藏的,则使其显示(淡入)。
经常使用语法:.fadeToggle( [duration ] ,[ complete ] )
可选的 duration 参数规定效果的时长。它能够取如下值:"slow"、"fast" 或毫秒。 可选的 callback 参数是 fadeToggle完成后所执行的函数名称。
fadeToggle() 方法能够在 fadeIn() 与 fadeOut() 方法之间进行切换。若是元素已淡出,则 fadeToggle() 会向元素添加淡入效果。若是元素已淡入,则 fadeToggle() 会向元素添加淡出效果。
(和上面的方式同样)
10.jQuery中淡入效果fadeTo
淡入淡出fadeIn与fadeOut都是修改元素样式的opacity属性,可是他们都有个共同的特色,变化的区间要么是0,要么是1
fadeIn:淡入效果,内容显示,opacity是0到1
fadeOut:淡出效果,内容隐藏,opacity是1到0
若是要让元素保持动画效果,执行opacity = 0.5的效果时,要如何处理?
若是不考虑CSS3,咱们用JS实现的话,基本就是经过定时器,在设定的时间内一点点的修改opacity的值,最终为0.5,原理虽然说简单,可是总不如一键设置这么舒服,jQuery提供了fadeTo方法,可让改变透明度一步到位
语法
.fadeTo( duration, opacity ,callback)
必需的 duration参数规定效果的时长。它能够取如下值:"slow"、"fast" 或毫秒。fadeTo() 方法中必需的 opacity 参数将淡入淡出效果设置为给定的不透明度(值介于 0 与 1 之间)。可选的 callback 参数是该函数完成后所执行的函数名称。
$("p").fadeTo("slow", 0.5);
$("p").fadeTo(1000, 0.2);
$("p").fadeTo(1000, 0.9, function() {
alert('完成')
});
11.jQuery中toggle与slideToggle以及fadeToggle的比较
操做元素的显示和隐藏能够有几种方法。
例如:
- 改变样式display为none
- 设置位置高度为0
- 设置透明度为0
都能达到这个目的,而且针对这样的处理jQuery都提供了各自的方法。show/hide、sildeDown/sildeUp、fadeIn/fadeOut。除此以外,还引入了toggle、sildeToggle以及fadeToggle切换方法
toggle、sildeToggle以及fadeToggle的区别:
- toggle:切换显示与隐藏效果
- sildeToggle:切换上下拉卷滚效果
- fadeToggle:切换淡入淡出效果
固然细节上仍是有更多的不一样点:
toggle与slideToggle细节区别:
- toggle:动态效果为从右至左。横向动做,toggle经过display来判断切换全部匹配元素的可见性
- slideToggle:动态效果从下至上。竖向动做,slideToggle 经过高度变化来切换全部匹配元素的可见性
fadeToggle方法
- fadeToggle() 方法在 fadeIn() 和 fadeOut() 方法之间切换。
- 元素是淡出显示的,fadeToggle() 会使用淡入效果显示它们。
- 元素是淡入显示的,fadeToggle() 会使用淡出效果显示它们。
- 注释:隐藏的元素不会被彻底显示(再也不影响页面的布局)
12.jQuery中动画animate(上)
有些复杂的动画经过以前学到的几个动画函数是不可以实现,这时候就须要强大的animate方法了
操做一个元素执行3秒的淡入动画,对比一下2组动画设置的区别
语法:
.animate( properties ,[ duration ], [ easing ], [ complete ] )
.animate( properties, options )
.animate()方法容许咱们在任意的数值的CSS属性上建立动画。2种语法使用,几乎差很少了,惟一必要的属性就是一组CSS属性键值对。这组属性和用于设置.css()方法的属性键值对相似,除了属性范围作了更多限制。第二个参数开始能够单独传递多个实参也能够合并成一个对象传递了
参数分解:properties:一个或多个css属性的键值对所构成的Object对象。要特别注意全部用于动画的属性必须是数字的,除非另有说明;这些属性若是不是数字的将不能使用基本的jQuery功能。好比常见的,border、margin、padding、width、height、font、left、top、right、bottom、wordSpacing等等这些都是能产生动画效果的。background-color很明显不能够,由于参数是red或者GBG这样的值,很是用插件,不然正常状况下是不能只用动画效果的。注意,CSS 样式使用 DOM 名称(好比 "fontSize")来设置,而非 CSS 名称(好比 "font-size")。
特别注意单位,属性值的单位像素(px),除非另有说明。单位em 和 %须要指定使用
.animate({
left: 50,
width: '50px'
opacity: 'show',
fontSize: "10em",
}, 500);
除了定义数值,每一个属性能使用'show', 'hide', 和 'toggle'。这些快捷方式容许定制隐藏和显示动画用来控制元素的显示或隐藏
.animate({
width: "toggle"
});
若是提供一个以+= 或 -=开始的值,那么目标值就是以这个属性的当前值加上或者减去给定的数字来计算的
.animate({
left: '+=50px'
}, "slow");
duration时间
动画执行的时间,持续时间是以毫秒为单位的;值越大表示动画执行的越慢,不是越快。还能够提供'fast' 和 'slow'字符串,分别表示持续时间为200 和 600毫秒。
easing动画运动的算法
jQuery库中默认调用 swing。若是须要其余的动画算法,请查找相关的插件
complete回调
动画完成时执行的函数,这个能够保证当前动画肯定完成后发会触发
if (v == "1") {
// 数值的单位默认是px
$aaron.animate({
width :300,
height :300
});
} else if (v == "2") {
// 在现有高度的基础上增长100px
$aaron.animate({
width : "+=100px",
height : "+=100px"
});
} else if (v == "3") {
$aaron.animate({
fontSize: "5em"
}, 2000, function() {
alert("动画 fontSize执行完毕!");
});
} e
lse if (v == "4") {
//经过toggle参数切换高度
$aaron.animate({
width: "toggle"
});
}
13.jQuery中动画animate(下)
animate在执行动画中,若是须要观察动画的一些执行状况,或者在动画进行中的某一时刻进行一些其余处理,咱们能够经过animate提供的第二种设置语法,传递一个对象参数,能够拿到动画执行状态一些通知
.animate( properties, options )
options参数
- duration - 设置动画执行的时间
- easing - 规定要使用的 easing 函数,过渡使用哪一种缓动函数
- step:规定每一个动画的每一步完成以后要执行的函数
- progress:每一次动画调用的时候会执行这个回调,就是一个进度的概念
- complete:动画完成回调
其中最关键的一点就是:
若是多个元素执行动画,回调将在每一个匹配的元素上执行一次,不是做为整个动画执行一次
列出经常使用的方式:
$('#elem').animate({
width: 'toggle',
height: 'toggle'
}, {
duration: 5000,
specialEasing: {
width: 'linear',
height: 'easeOutBounce'
},
complete: function() {
$(this).after('<div>Animation complete.</div>');
}
});
14.jQuery中中止动画stop
动画在执行过程当中是容许被暂停的,当一个元素调用.stop()方法,当前正在运行的动画(若是有的话)当即中止
语法:
.stop( [clearQueue ], [ jumpToEnd ] )
.stop( [queue ], [ clearQueue ] ,[ jumpToEnd ] )
stop还有几个可选的参数,简单来讲能够这3种状况
- .stop(); 中止当前动画,点击在暂停处继续开始
- .stop(true); 若是同一元素调用多个动画方法,还没有被执行的动画被放置在元素的效果队列中。这些动画不会开始,直到第一个完成。当调用.stop()的时候,队列中的下一个动画当即开始。若是clearQueue参数提供true值,那么在队列中的动画其他被删除并永远不会运行
- .stop(true,true); 当前动画将中止,但该元素上的 CSS 属性会被马上修改为动画的目标值
简单的说:参考下面代码、
$("#aaron").animate({
height: 300
}, 5000)
$("#aaron").animate({
width: 300
}, 5000)
$("#aaron").animate({
opacity: 0.6
}, 2000)
- stop():只会中止第一个动画,第二个第三个继续
- stop(true):中止第一个、第二个和第三个动画
- stop(true ture):中止动画,直接跳到第一个动画的最终状态
15.jQuery中each方法的应用
jQuery中有个很重要的核心方法each,大部分jQuery方法在内部都会调用each,其主要的缘由的就是jQuery的实例是一个元素合集
以下:找到全部的div,而且都设置样式,css只是一个方法,因此内部会调用each处理这个div的合集,给每一个div都设置style属性
$('div').css(...)
jQuery的大部分方法都是针元素合集的操做,因此jQuery会提供$(selector).each()来遍历jQuery对象
.each只是处理jQuery对象的方法,jQuery还提供了一个通用的jQuery.each方法,用来处理对象和数组的遍历
语法
jQuery.each(array, callback )
jQuery.each( object, callback )
第一个参数传递的就是一个对象或者数组,第二个是回调函数
$.each(["Aaron", "慕课网"], function(index, value) {
//index是索引,也就是数组的索引
//value就是数组中的值了
});
each就是for循环方法的一个包装,内部就是经过for遍历数组与对象,经过回调函数返回内部迭代的一些参数,第一个参数是当前迭代成员在对象或数组中的索引值(从0开始计数),第二个参数是当前迭代成员(与this的引用相同
jQuery.each()函数还会根据每次调用函数callback的返回值来决定后续动做。若是返回值为false,则中止循环(至关于普通循环中的break);若是返回其余任何值,均表示继续执行下一个循环。
$.each(["Aaron", "慕课网"], function(index, value) {
return false; //中止迭代
});
jQuery方法能够很方便的遍历一个数据,不须要考虑这个数据是对象仍是数组
// 遍历数组元素
$.each(['Aaron', '慕课网'], function(i, item) {
$aaron.append("索引=" + i + "; 元素=" + item);
});
$.each({
name: "张三",
age: 18
}, function(property, value) {
$aaron.append("属性名=" + property + "; 属性值=" + value);
});
16.jQuery中查找数组中的索引inArray
在PHP有in_array()判断某个元素是否存在数组中,JavaScript却没有,可是jQuery封装了inArray()函数判断元素是否存在数组中。注意了:在ECMAScript5已经有数据的indexOf方法支持了,可是jQuery保持了版本向下兼容,因此封装了一个inArray方法
jQuery.inArray()函数用于在数组中搜索指定的值,并返回其索引值。若是数组中不存在该值,则返回 -1。
语法:
jQuery.inArray( value, array ,[ fromIndex ] )
用法很是简单,传递一个检测的目标值,而后传递原始的数组,能够经过fromIndex规定查找的起始值,默认数组是0开始
例如:在数组中查找值是5的索引
$.inArray(5,[1,2,3,4,5,6,7]) //返回对应的索引:4
注意:
若是要判断数组中是否存在指定值,你须要经过该函数的返回值不等于(或大于)-1来进行判断
if (v == "1") {
var index = $.inArray('Aaron',['test','Aaron', 'array','慕课网']);
$aaron.text('Aaron的索引是: '+ index)
} else if (v == "2") {
//指定索引开始的位置
var index = $.inArray('a',['a','b','c','d','a','c'],2);
$aaron.text('a的索引是: '+ index)
}
17.jQuery中去空格神器trim方法
页面中,经过input能够获取用户的输入值,例如常见的登陆信息的提交处理。用户的输入不必定是标准的,输入一段密码:' 1123456 ",注意了: 密码的先后会留空,这多是用户的无意的行为,可是密码确实又没错,针对这样的行为,开发者应该要判断输入值的先后是否有空白符、换行符、制表符这样明显的无心义的输入值。
jQuery.trim()函数用于去除字符串两端的空白字符
这个函数很简单,没有多余的参数用法
须要注意:
- 移除字符串开始和结尾处的全部换行符,空格(包括连续的空格)和制表符(tab)
- 若是这些空白字符在字符串中间时,它们将被保留,不会被移除
alert("值的长度:" + $.trim($("#results2").val()).length)
18.jQuery中DOM元素的获取get方法
jQuery是一个合集对象,若是须要单独操做合集中的的某一个元素,能够经过.get()方法获取到
如下有3个a元素结构:
<a>1</a>
<a>2</a>
<a>3</a>
经过jQuery获取全部的a元素合集$("a"),若是想进一步在合集中找到第二2个dom元素单独处理,能够经过get方法
语法:
.get( [index ] )
注意2点
- get方法是获取的dom对象,也就是经过document.getElementById获取的对象
- get方法是从0开始索引
因此第二个a元素的查找: $(a).get(1)
负索引值参数
get方法还能够从后往前索引,传递一个负索引值,注意的负值的索引发始值是-1
一样是找到第二元素,能够传递 $(a).get(-2)
$aaron.get(1).style.color = "blue"
$aaron.get(-1).style.color = "#8A2BE2"
19.jQuery中DOM元素的获取index方法
get方法是经过已知的索引在合集中找到对应的元素。若是反过来,已知元素如何在合集中找到对应的索引呢?
.index()方法,从匹配的元素中搜索给定元素的索引值,从0开始计数。
语法:参数接受一个jQuery或者dom对象做为查找的条件
.index()
.index( selector )
.index( element )
- 若是不传递任何参数给 .index() 方法,则返回值就是jQuery对象中第一个元素相对于它同辈元素的位置
- 若是在一组元素上调用 .index() ,而且参数是一个DOM元素或jQuery对象, .index() 返回值就是传入的元素相对于原先集合的位置
- 若是参数是一个选择器, .index() 返回值就是原先元素相对于选择器匹配元素的位置。若是找不到匹配的元素,则 .index() 返回 -1
简单来讲:
<ul>
<a></a>
<li id="test1">1</li>
<li id="test2">2</li>
<li id="test3">3</li>
</ul>
$("li").index() 没有传递参数,反正的结果是1,它的意思是返回同辈的排列循序,第一个li以前有a元素,同辈元素是a开始为0,因此li的开始索引是1
若是要快速找到第二个li在列表中的索引,能够经过以下2种方式处理
$("li").index(document.getElementById("test2")) //结果:1$("li").index($("#test2")) //结果:1