jQuery基础---动画效果
内容摘要:
1.显示、隐藏
2.滑动、卷动
3.淡入、淡出
4.自定义动画
5.列队动画方法
6.动画相关方法
7.动画全局属性
发文不易,转载请注明出处~
一.显示、隐藏
jQuery 中显示方法为:.show(),隐藏方法为:.hide()。在无参数的时候,只是硬性的显示内容和隐藏内容。
$('.show').click(function () { //显示
$('#box').show();
});
$('.hide').click(function () { //隐藏
$('#box').hide();
});
PS:.hide()方法其实就是在行内设置 CSS 代码:display:none; 而.show()方法要根据原来元素是区块还是内联来决定,如果是区块,则设置 CSS 代码:display:block; 如果是内联,则设置 CSS 代码:display:inline;。
在.show()和.hide()方法可以传递一个参数,这个参数以毫秒(1000 毫秒等于 1 秒钟)来控制速度。并且里面富含了匀速变大变小,以及透明度变换。
$('.show').click(function () {
$('#box').show(1000); //显示用了 1 秒
});
$('.hide').click(function () {
$('#box').hide(1000); //隐藏用了 1 秒
});
除了直接使用毫秒来控制速度外,jQuery 还提供了三种预设速度参数字符串:slow、normal 和 fast,分别对应 600 毫秒、400 毫秒和 200 毫秒。
$('.show').click(function () {
$('#box').show('fast'); //200 毫秒
});
$('.hide').click(function () {
$('#box').hide('slow'); //600 毫秒
});
PS :不管是传递毫秒数还是传递预设字符串, 如果不小心传递错误或者传递空字符串。那么它将采用默认值:400 毫秒。
$('.show').click(function () {
$('#box').show(''); //默认 400 毫秒
});
列队动画效果:
//列队动画,使用.show()和.hide()的回调函数实现
$('.show').click(function () {
$('#box').show('slow', function () {
alert('动画持续完毕后,执行我!');
});
});
//列队动画,使用函数名调用自身(多个元素的时候)
$('.show').click(function () {
$('div').first().show('fast', function showSpan() {
$(this).next().show('fast', showSpan);
});
});
//列队动画,使用 arguments.callee 匿名函数自调用(重复无限次执行)
$('.hide').click(function () {
$('div').last().hide('fast', function() {
$(this).prev().hide('fast', arguments.callee);
});
});
.toggle() 方法实现显示和隐藏:
我们在使用.show()和.hide()的时候,如果需要一个按钮切换操作,需要进行一些条件判断。而 jQuery 提供给我们一个类似功能的独立方法:.toggle()。
$('.toggle').click(function () {
$(this).toggle('slow');
});
二.滑动、卷动
jQuery 提供了一组改变元素高度的方法:.slideUp()、.slideDown()和.slideToggle()。顾名思义,向上收缩(卷动)和向下展开(滑动)。
$('.down').click(function () {
$('#box').slideDown();
});
$('.up').click(function () {
$('#box').slideUp();
});
$('.toggle').click(function () {
$('#box').slideToggle();
});
注意:滑动、卷动效果和显示、隐藏效果一样,具有相同的参数。
三.淡入、淡出
jQuery 提供了一组专门用于透明度变化的方法:.fadeIn()和.fadeOut(),分别表示淡入、淡出,当然还有一个自动切换的方法:.fadeToggle()。
$('.in').click(function () {
$('#box').fadeIn('slow');
});
$('.out').click(function () {
$('#box').fadeOut('slow');
});
$('.toggle').click(function () {
$('#box').fadeToggle();
});
上面三个透明度方法只能是从 0 到 100,或者从 100 到 0,如果我们想设置指定值就没有办法了。而 jQuery 为了解决这个问题提供了.fadeTo()方法。
$('.toggle').click(function () {
$('#box').fadeTo('slow', 0.33); //0.33 表示值为 33
});
PS:淡入、淡出效果和显示、隐藏效果一样,具有相同的参数。对于.fadeTo()方法,如果本身透明度大于指定值,会淡出,否则相反。
四.自定义动画
jQuery 提供了几种简单常用的固定动画方面我们使用。 但有些时候, 这些简单动画无法满足我们更加复杂的需求。这个时候,jQuery 提供了一个.animate()方法来创建我们的自定义动画,满足更多复杂多变的要求。
$('.animate').click(function () {
$('#box').animate({
'width' : '300px',
'height' : '200px',
'fontSize' : '50px',
'opacity' : 0.5
});
});
PS:一个 CSS 变化就是一个动画效果,上面的例子中,已经有四个 CSS 变化,已经实现了多重动画同步运动的效果。
.animate()方法必传的参数只有一个,就是一个键值对 CSS 变化样式的对象。还有两个可选参数分别为速度和回调函数。
$('.animate').click(function () {
$('#box').animate({
'width' : '300px',
'height' : '200px'
}, 1000, function () {
alert('动画执行完毕执行我!');
});
});
到目前位置, 我们都是创建的固定位置不动的动画。 如果想要实现运动状态的位移动画,那就必须使用自定义动画,并且结合 CSS 的绝对定位功能。
$('.animate').click(function () {
$('#box').animate({
'top' : '300px', //首先必须设置 CSS 定位
'left' : '200px'
});
});
自定义动画中, 每次开始运动都必须是初始位置或初始状态, 而有时我们想通过当前位置或状态下再进行动画。jQuery 提供了自定义动画的累加、累减功能。
$('.animate').click(function () {
$('#box').animate({
'left' : '+=100px'
});
});
自定义实现列队动画的方式有两种:
1.在回调函数中再执行一个动画;
2.通过连缀或顺序来实现列队动画。
//通过依次顺序实现列队动画
$('.animate').click(function () {
$('#box').animate({'left' : '100px'});
$('#box').animate({'top' : '100px'});
$('#box').animate({'width' : '300px'});
});
注意:如果不是同一个元素,就会实现同步动画。
//通过连缀实现列队动画
$('.animate').click(function () {
$('#box').animate({
'left' : '100px'
}).animate({
'top' : '100px'
}).animate({
'width' : '300px'
});
});
//通过回调函数实现列队动画
$('.animate').click(function () {
$('#box').animate({
'left' : '100px'
}, function () {
$('#box').animate({
'top' : '100px'
}, function () {
$('#box').animate({
'width' : '300px'
});
});
});
});
五.列队动画方法
之前我们已经可以实现列队动画了,如果是同一个元素,可以依次顺序或连缀调用。 如果是不同元素,可以使用回调函数。但有时列队动画太多,回调函数的可读性大大降低。 为此,jQuery 提供了一组专门用于列队动画的方法。
//注意连缀无法实现按顺序列队
$('#box').slideUp('slow').slideDown('slow').css('background', 'orange');
PS:如果动画方法,连缀可以实依次列队,而.css()方法不是动画方法,会在一开始传入列队之前。那么,可以采用动画方法的回调函数来解决。
//使用回调函数,强行将.css()方法排队到.slideDown()之后
$('#box').slideUp('slow').slideDown('slow', function () {
$(this).css('background', 'orange');
});
但如果这样的话,当列队动画繁多的时候,可读性不但下降,而原本的动画方法不够清晰。所以,我们的想法是每个操作都是自己独立的方法。那么 jQuery 提供了一个类似于回调函数的方法:.queue()。
//使用.queue()方法模拟动画方法跟随动画方法之后
$('#box').slideUp('slow').slideDown('slow').queue(function () {
$(this).css('background', 'orange');
});
现在,我们想继续在.queue()方法后面再增加一个隐藏动画,这时发现居然无法实现。这是.queue()特性导致的。有两种方法可以解决这个问题,jQuery的.queue()的回调函数可以传递一个参数,这个参数是 next 函数,在结尾处调用这个 next()方法即可再连缀执行列队动画。
//使用 next 参数来实现继续调用列队动画
$('#box').slideUp('slow').slideDown('slow').queue(function (next) {
$(this).css('background', 'orange');
next();
}).hide('slow');
因为next函数是jQuery1.4版本以后才出现的, 而之前我们普遍使用的是.dequeue()方法。意思为执行下一个元素列队中的函数。
//使用.dequeue()方法执行下一个函数动画
$('#box').slideUp('slow').slideDown('slow').queue(function () {
$(this).css('background', 'orange');
$(this).dequeue();
}).hide('slow');
如果采用顺序调用,那么使用列队动画方法,就非常清晰了,每一段代表一个列队, 而回调函数的嵌套就会杂乱无章。
//使用顺序调用的列队,逐个执行,非常清晰
$('#box').slideUp('slow');
$('#box').slideDown('slow');
$('#box').queue(function () {
$(this).css('background', 'orange');
$(this).dequeue();
})
$('#box').hide('slow');
.queue()方法还有一个功能,就是可以得到当前动画列队的长度。当然,这个用法在普通 Web 开发中用的比较少,这里不做详细探讨。
jQuery 还提供了一个清理列队的功能方法:.clearQueue()。把它放入一个列队的回调函数或.queue()方法里,就可以把剩下未执行的列队给移除。
//清理动画列队
$('#box').slideDown('slow', function () {$(this).clearQueue()});
六.动画相关方法
很多时候需要停止正在运行中的动画,jQuery 为此提供了一个.stop()方法。它有两个可选参数:.stop(clearQueue, gotoEnd);
clearQueue :传递一个布尔值,代表是否清空当前元素未执行完的动画列队;
gotoEnd :代表是否直接将正在执行的当前动画跳转到当前动画的末状态。
如果直接使用stop()方法,则会立即停止当前正在进行的动画(记住,只是停止当前正在执行的,见《锋利jQuery 第二版》P128详解),如果接下来还有动画等待执行,则以当前状态开始接下里的动画。
//强制停止运行中的
$('.stop').click(function () {
$('#box').stop();
});
//带参数的强制运行
$('.animate').click(function () {
$('#box').animate({
'left' : '300px'
}, 1000);
$('#box').animate({
'bottom' : '300px'
}, 1000);
$('#box').animate({
'width' : '300px'
}, 1000);
$('#box').animate({
'height' : '300px'
}, 1000);
});
$('.stop').click(function () {
$('#box').stop(true ,true);
});
PS:第一个参数表示是否取消列队动画,默认为 false。如果参数为 true,当有列队动画的时候,会取消后面的列队动画。第二参数表示是否到达当前动画结尾,默认为 false。如果参数为 true,则停止后立即到达末尾处。
有时在执行动画或列队动画时, 需要在运动之前有延迟执行, jQuery 为此提供了.delay()方法。这个方法可以在动画之前设置延迟,也可以在列队动画中间加上。
//开始延迟 1 秒钟,中间延迟 1 秒
$('.animate').click(function () {
$('#box').animate({
'bottom' : '300px'
}, 1000);
$('#box').delay(1000).animate({
'width' : '300px'
}, 1000);
$('#box').animate({
'height' : '300px'
}, 1000);
});
有一个过滤器:animated,这个过滤器可以判断出当前运动的动画是哪个元素。 通过这个特点, 我们可以避免由于用户快速在某个元素执行动画时,由于动画积累而导致的动画和用户的行为不一致。(这个属性还是蛮重要的,详见《锋利JQ》P129)
//递归执行自我,无限循环播放
$('#box').slideToggle('slow', function () {
$(this).slideToggle('slow', arguments.callee);
});
//停止正在运动的动画,并且设置红色背景
$('.button').click(function(){
$('div:animated').stop().css('background', 'red');
});
For my lover,C.
And thank you , MR.Lee.
jQuery基础---动画效果的更多相关文章
- 第一百七十二节,jQuery,动画效果
jQuery,动画效果 学习要点: 1.显示.隐藏 2.滑动.卷动 3.淡入.淡出 4.自定义动画 5.列队动画方法 6.动画相关方法 7.动画全局属性 一.显示.隐藏 jQuery 中显示方法为:. ...
- jQuery之动画效果show()......animate()
jQuery之动画效果 1.show()显示效果 语法:show(speed,callback) Number/String,Function speend为动画执行时间,单位为毫秒.也可以为slow ...
- jQuery Easing 动画效果扩展--使用Easing插件,让你的动画更具美感。
jQuery Easing 是一款比较老的jQuery插件,在很多网站都有应用,尤其是在一些页面滚动.幻灯片切换等场景应用比较多.它非常小巧,且有多种动画方案供选择,使用简单,而且免费. 引入Eas ...
- jquery-12 jquery常用动画效果有哪些
jquery-12 jquery常用动画效果有哪些 一.总结 一句话总结:jquery可以用户animate()自定义动画,也可以slide和fade系列方法来设置动画. 1.动画效果如何设置执行时间 ...
- 前端基础-jQuery的动画效果
阅读目录 隐藏 显示 切换 下拉 上卷 显示 一.jQuery中隐藏元素的hide方法 让页面上的元素不可见,一般可以通过设置css的display为none属性.但是通过css直接修改是静态的布局, ...
- jquery animate 动画效果使用解析
animate的意思是:使有生气:驱动:使栩栩如生地动作:赋予…以生命作为形容词:有生命的:活的:有生气的:生气勃勃的 先看动画效果:http://keleyi.com/keleyi/phtml/jq ...
- jQuery Easing动画效果扩展(转)
jQuery API提供了简单的动画效果如淡入淡出以及自定义动画效果,而今天我给大家分享的是一款jQuery动画效果扩展增强插件jquery.easing.js,使用该插件可以实现直线匀速运功.变加速 ...
- jQuery的动画效果
jQuery 是一个 JavaScript 库.jQuery 库可以通过一行简单的标记被添加到网页中. <script type="text/javascript" src= ...
- jQuery之动画效果
1.show()显示效果 语法:show(speed,callback) Number/String,Function speend为动画执行时间,单位为毫秒.也可以为slow"," ...
随机推荐
- 关于onetoone 的2张表关联中间表的策略
ProductCategoryVO.java 中间关联表 package com.syscxp.header.billing; import com.syscxp.header.search.SqlT ...
- 考取RHCE认证的历程,总结的经验
昨天去考试的,今天下午结果出来了,达到了我的预期.成功的获取了RHCE认证,以后我也是有证的人咯~,开个玩笑. 其实去年的时候我就曾经想要去考取的,我原来一直以为考取RHCE认证时考题都是英文的呢?因 ...
- 【Oracle 12c】CUUG OCP认证071考试原题解析(35)
35.choose the best answer View the Exhibit and examine the description of the EMPLOYEES table. Evalu ...
- 关于Tomcat控制台乱码解决办法___ 解决 IntelliJ IDEA Tomcat 控制台中文输出乱码问题
Tomcat 控制台UTF-8乱码问题 1.修改cmd的编码格式 快捷键win+R打开运行程序,输入regedit打开注册表,找到以下路劲并且修改. [HKEY_LOCAL_MACHINE\SOFTW ...
- kali linux之无线渗透(续)
Airolib 设计用于存储ESSID和密码列表,计算生成不变的PMK(计算资源消耗型) PMK在破解阶段被用于计算PTK(速度快,计算资源要求少) 通过完整性摘要值破解密码SQLite3数据库存储数 ...
- 学习xss模拟构造攻击(第一篇)
本文作者:i春秋签约作家——rosectow 0×00前言 XSS又名叫CSS全程(cross site scriptting),中文名跨站脚本攻击,目前网站的常见漏洞之一,它的危害没有像上传漏洞,s ...
- Linux 解压 压缩文件
来源于:http://blog.csdn.net/mmllkkjj/article/details/6768294/ 解压 tar –xvf file.tar //解压 tar包tar -xzvf f ...
- C#-类-string/Manth/Random/DateTime-及练习
类一.string类:.Length 字符串的长度 .Trim() 去掉开头以及结尾的空格.TrimStart() 去掉开头的空格.TrimEnd() 去掉结尾的空格 .ToLower() 全部转换为 ...
- 阿里云服务器18个数据中心测试IP地址以及测试方法
我们用户在选择阿里云服务器的时候是不是感觉阿里云的数据中心太多太多,确实阿里云服务器机房是有很多,国外国外机房大约有18个,甚至更多,因为还在不断的增加机房.对于商家而言增加不同的机房可以满足不同的项 ...
- [意识流]简单易懂的AC自动机
为了一言不合就徒手敲AC自动机,决定看一下原理 于是花了一张图, 参考HDU2222的样例 于是看懂这张图的你很快就敲出了如下代码并且AC了 #include<bits/stdc++.h> ...