第一百七十二节,jQuery,动画效果
jQuery,动画效果
学习要点:
1.显示、隐藏
2.滑动、卷动
3.淡入、淡出
4.自定义动画
5.列队动画方法
6.动画相关方法
7.动画全局属性
一.显示、隐藏
jQuery 中显示方法为:.show(),隐藏方法为:.hide()。在无参数的时候,只是硬性的显 示内容和隐藏内容。
show()方法,显示元素,不传参直接显示,传参,参数是毫秒数来控制速度,传参后富含了匀速变大,以及透明度变换。参数2回调函数,可以实现列队和其他操作
$('.button').on('click',function () {
$('#box').show();
});
$('.button').on('click',function () {
$('#box').show(1000);
});
hide()方法,隐藏元素,不传参直接隐藏,传参,参数是毫秒数来控制速度,传参后富含了匀速变小,以及透明度变换。参数2回调函数,可以实现列队和其他操作
$('.button').on('click',function () {
$('#box').hide();
});
$('.button').on('click',function () {
$('#box').hide(1000);
});
注意:.hide()方法其实就是在行内设置 CSS 代码:display:none; 而.show()方法要根据原 来元素是区块还是内联来决定,如果是区块,则设置 CSS 代码:display:block; 如果是内联, 则设置 CSS 代码:display:inline;。
除了直接使用毫秒来控制速度外,jQuery 还提供了三种预设速度参数字符串:slow、 normal 和 fast,分别对应 600 毫秒、400 毫秒和 200 毫秒。
$('.show').click(function () {
$('#box').show('fast'); //200 毫秒
});
$('.hide').click(function () {
$('#box').hide('slow'); //600 毫秒
});
注意:不管是传递毫秒数还是传递预设字符串,如果不小心传递错误或者传递空字符串。 那么它将采用默认值: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()方法,隐藏和显示自动来回切换,也有两个可选参数,参数1毫秒数,参数2回调函数
$('.button').on('click', function () {
$('#box').toggle(1000);
});
二.滑动、卷动,向上收缩,向下展开
jQuery 提供了一组改变元素高度的方法:.slideUp()、.slideDown()和.slideToggle()。顾名 思义,向上收缩(卷动)和向下展开(滑动)。
slideUp()方法,将元素向上收缩,也有两个可选参数,参数1毫秒数,参数2回调函数
$('.button').on('click', function () {
$('#box').slideUp(1000);
});
slideDown()方法,将元素向下展开,也有两个可选参数,参数1毫秒数,参数2回调函数
$('.button').on('click', function () {
$('#box').slideDown(1000);
});
slideToggle()方法,将元素向下展开和向上收缩来回切换,也有两个可选参数,参数1毫秒数,参数2回调函数
$('.button').on('click', function () {
$('#box').slideToggle(1000);
});
注意:滑动、卷动效果和显示、隐藏效果一样,具有相同的参数。
三.淡入、淡出,透明度变化
jQuery 提供了一组专门用于透明度变化的方法:.fadeIn()和.fadeOut(),分别表示淡入、 淡出,当然还有一个自动切换的方法:.fadeToggle()。
fadeIn()方法,将元素从0到100的透明度淡入,也有两个可选参数,参数1毫秒数,参数2回调函数
$('.button').on('click', function () {
$('#box').fadeIn(1000);
});
fadeOut()方法,将元素从100到0的透明度淡出,也有两个可选参数,参数1毫秒数,参数2回调函数
$('.button').on('click', function () {
$('#box').fadeOut(1000);
});
fadeToggle()方法,将元素从100到0的透明度淡出、和从0到100的透明度淡入、来回切换,也有两个可选参数,参数1毫秒数,参数2回调函数
$('.button').on('click', function () {
$('#box').fadeToggle(1000);
});
上面三个透明度方法只能是从 0 到 100,或者从 100 到 0,如果我们想设置指定值就没 有办法了。而 jQuery 为了解决这个问题提供了.fadeTo()方法。
fadeTo()方法,将元素原本透明度到指定透明度,3个参数,参数1毫秒数动画速度,参数2终点透明度,参数3回调函数
$('.button').on('click', function () {
$('#box').fadeTo(1000,0.3);
});
注意:淡入、淡出效果和显示、隐藏效果一样,具有相同的参数。对于.fadeTo()方法, 如果本身透明度大于指定值,会淡出,否则相反。
四.自定义动画
jQuery 提供了几种简单常用的固定动画方面我们使用。但有些时候,这些简单动画无法 满足我们更加复杂的需求。这个时候,jQuery 提供了一个.animate()方法来创建我们的自定 义动画,满足更多复杂多变的要求。
animate()方法,自定义动画,3个参数,参数1必填,是一个对象、对象里是键值对方式的css属性和值,参数2是毫米数速度[可选参数],参数3是回调函数[可选]
注意:必填参数对象里的css参数是同步执行的,也就是说对象里的css效果是同步动画
$('.button').on('click', function () {
$('#box').animate({
'width': '300px',
'height': '200px',
'fontSize': '50px',
'opacity': 0.5
}, 100);
});
注意:一个 CSS 变化就是一个动画效果,上面的例子中,已经有四个 CSS 变化,已经 实现了多重动画同步运动的效果。
必传的参数只有一个,就是一个键值对 CSS 变化样式的对象。还有两个可选参数分别 为速度和回调函数。
$('.button').on('click', function () {
$('#box').animate({
'width': '300px',
'height': '200px'
}, 100, function () {
alert('动画执行完毕执行我!');
});
});
到目前位置,我们都是创建的固定位置不动的动画。如果想要实现运动状态的位移动画, 那就必须使用自定义动画,并且结合 CSS 的绝对定位功能
$('.button').on('click', function () {
$('#box').animate({
'top': '300px', //先必须设置 CSS 绝对定位
'left': '200px'
}, 100);
});
自定义动画中,每次开始运动都必须是初始位置或初始状态,而有时我们想通过当前位 置或状态下再进行动画。jQuery 提供了自定义动画的累加、累减功能。下次从100开始以此类推
$('.button').on('click', function () {
$('#box').animate({
'left': '+=100px'
}, 100);
});
自定义实现列队动画的方式,有两种:1.在回调函数中再执行一个动画;2.通过连缀或 顺序来实现列队动画。
$('.button').on('click', function () {
$('#box').animate({'left': '100px'});
$('#box').animate({'top': '100px'});
$('#box').animate({'width': '300px'});
});
注意:如果不是同一个元素,就会实现同步动画
通过连缀实现列队动画
$('.button').on('click', function () {
$('#box').animate({
'left': '100px'
}).animate({
'top': '100px'
}).animate({
'width': '300px'
});
});
通过回调函数实现列队动画
$('.button').on('click', function () {
$('#box').animate({
'left': '100px'
}, function () {
$('#box').animate({
'top': '100px'
}, function () {
$('#box').animate({
'width': '300px'
});
});
});
});
animate()方法中,运动方式,自带的参数有两个:swing(缓动)、 linear(匀速),默认为 swing。写在毫秒数后面
animate()方法中,还有一个参数,easing 运动方式,这个参数,大部分参数值 需要通过插件来使用,在后面的课程中,会详细讲解。自带的参数有两个:swing(缓动)、 linear(匀速),默认为 swing。
//动画按钮
$('.button1').on('click', function () {
$('#box').animate({
left: '800px'
}, 'slow', 'swing');
$('#pox').animate({
left: '800px'
}, 'slow', 'linear');
});
五.列队动画方法
之前我们已经可以实现列队动画了,如果是同一个元素,可以依次顺序或连缀调用。如 果是不同元素,可以使用回调函数。但有时列队动画太多,回调函数的可读性大大降低。为 此,jQuery 提供了一组专门用于列队动画的方法。
连缀无法实现按顺序列队
$('#box').slideUp('slow').slideDown('slow').css('background', 'orange');
注意:如果动画方法,连缀可以实依次列队,而.css()方法不是动画方法,会在一开始 传入列队之前。那么,可以采用动画方法的回调函数来解决。
使用回调函数,强行将.css()方法排队到.slideDown()之后
$('#box').slideUp('slow').slideDown('slow', function () {
$(this).css('background', 'orange');
});
但如果这样的话,当列队动画繁多的时候,可读性不但下降,而原本的动画方法不够清 晰。所以,我们的想法是每个操作都是自己独立的方法。那么 jQuery 提供了一个类似于回 调函数的方法:.queue()。
queue()方法,像列队动画后面添加一个列队,参数是匿名函数,函数里写要添加的列队,函数里执行next()方法,可以连缀添加列队
使用.queue()方法模拟动画方法跟随动画方法之后
$('#box').slideUp('slow').slideDown('slow').queue(function () {
$(this).css('background', 'orange');
});
queue()方法,连缀,函数里执行next()方法,可以连缀添加列队
现在,我们想继续在.queue()方法后面再增加一个隐藏动画,这时发现居然无法实现。 这是.queue()特性导致的。有两种方法可以解决这个问题,jQuery 的.queue()的回调函数可以 传递一个参数,这个参数是 next 函数,在结尾处调用这个 next()方法即可再连缀执行列队动 画。
使用 next 参数来实现继续调用列队动画
next()方法,执行在queue()方法的匿名函数里,使其queue()方法可以继续连缀列队
$('#box').slideUp('slow').slideDown('slow').queue(function (next) {
$(this).css('background', 'orange');
next();
}).hide('slow');
因为next函数是jQuery1.4版本以后才出现的,而之前我们普遍使用的是.dequeue()方法。 意思为执行下一个元素列队中的函数。
使用.dequeue()方法执行下一个函数动画
dequeue()方法,执行在queue()方法的匿名函数里,使其queue()方法可以继续连缀列队
$('#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 开发中用的比较少,
获取当前列队的长度,fx 是默认列队的参数
function count() {
return $("#box").queue('fx').length;
}
//在某个动画处调用
$('#box').slideDown('slow', function () {alert(count());});
clearQueue()方法,清除后面的列队动画,执行在一个列队的回调函 数或.queue()方法里
jQuery 还提供了一个清理列队的功能方法:.clearQueue()。把它放入一个列队的回调函 数或.queue()方法里,就可以把剩下未执行的列队给移除。
//清理动画列队
$('#box').slideDown('slow', function () {$(this).clearQueue()});
六.动画相关方法
很多时候需要停止正在运行中的动画,jQuery 为此提供了一个.stop()方法。它有两个可 选参数:.stop(clearQueue, gotoEnd);clearQueue 传递一个布尔值,代表是否清空未执行完的 动画列队,gotoEnd 代表是否直接将正在执行的动画跳转到末状态。
stop()方法,无参停止正在运动的动画,有两个可选参数,参数1布尔值、是否清空未执行完的动画列队,参数2布尔值、是否直接将正在执行的动画跳转到末状态
无参停止动画
//动画按钮
$('.button1').on('click', function () {
$('#box').animate({
'left': '800px'
},3000);
});
//停止动画按钮
$('.button2').on('click',function () {
$('#box').stop(); //停止动画
});
有参停止列队动画
//动画按钮
$('.button1').on('click', function () {
//列队动画
$('#box').animate({
'left': '300px'
}, 1000);
$('#box').animate({
'bottom': '300px'
}, 1000);
$('#box').animate({
'width': '300px'
}, 1000);
$('#box').animate({
'height': '300px'
}, 1000);
});
//停止动画按钮
$('.button2').on('click', function () {
$('#box').stop(true,true); //停止动画,参数1布尔值、是否清空未执行完的动画列队,参数2布尔值、是否直接将正在执行的动画跳转到末状态
});
注意:第一个参数表示是否取消列队动画,默认为 false。如果参数为 true,当有列队动 画的时候,会取消后面的列队动画。第二参数表示是否到达当前动画结尾,默认为 false。 如果参数为 true,则停止后立即到达末尾处。
delay()方法,延迟执行动画,参数是要延迟的毫米数
有时在执行动画或列队动画时,需要在运动之前有延迟执行,jQuery 为此提供了.delay() 方法。这个方法可以在动画之前设置延迟,也可以在列队动画中间加上。
$('.button1').on('click', function () {
//开始延迟 1 秒钟
$('#box').delay(1000).animate({
'left': '300px'
}, 1000);
$('#box').animate({
'bottom': '300px'
}, 1000);
//开始延迟 1 秒钟
$('#box').delay(1000).animate({
'width': '300px'
}, 1000);
$('#box').animate({
'height': '300px'
}, 1000);
});
在选择器的基础章节中,我们提到过一个过滤器:animated,这个过滤器可以判断出当前 运动的动画是哪个元素。通过这个特点,我们可以避免由于用户快速在某个元素执行动画时, 由于动画积累而导致的动画和用户的行为不一致。
递归一直动画
animated查找正在运动的动画
//动画按钮 $('.button1').on('click', function () {
//
$('div').slideToggle('slow', function () {
$(this).slideToggle('slow', arguments.callee); //arguments.callee 表示自身
});
});
//停止动画按钮
$('.button2').on('click', function () {
$('div:animated').stop(); // 查找所有div,将正在运动的动画停止掉
});
六.动画全局属性
jQuery 提供了两种全局设置的属性,分别为:$.fx.interval,设置每秒运行的帧数;$.fx.off, 关闭页面上所有的动画。
$.fx.interval 属性可以调整动画每秒的运行帧数,默认为 13 毫秒。数字越小越流畅,但 可能影响浏览器性能。
//设置运行帧数为 1000 毫秒
$.fx.interval = 1000; //默认为 13
$('.button').click(function () {
$('#box').toggle(3000);
});
$.fx.off 属性可以关闭所有动画效果,在非常低端的浏览器,动画可能会出现各种异常 问题导致错误。而 jQuery 设置这个属性,就是用于关闭动画效果的。
//设置动画为关闭 true
$.fx.off = true; //默认为 false
第一百七十二节,jQuery,动画效果的更多相关文章
- JQuery动画效果
jquery动画效果常用方法 1.show()显示效果语法:show(speed,callback)Number/String,Function speend为动画执行时间,单位为毫秒.也可以为slo ...
- python 全栈开发,Day53(jQuery的介绍,jQuery的选择器,jQuery动画效果)
js总结 js: 1.ECMAScript5 ES5语法 2.DOM CRUD 获取 3种方式 id tag className //面向对象 对象 : 属性和方法 某个对象中 function $( ...
- jquery动画效果---animate()--滚屏
jquery动画效果---animate()方法---W3school
- 第三百七十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapyd部署scrapy项目
第三百七十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapyd部署scrapy项目 scrapyd模块是专门用于部署scrapy项目的,可以部署和管理scrapy项目 下载地址:h ...
- js进阶 13-6 jquery动画效果相关常用函数有哪些
js进阶 13-6 jquery动画效果相关常用函数有哪些 一.总结 一句话总结:animate(),stop(),finish(),delat()四个. 1.stop()方法的基本用法是什么(sto ...
- 第一百六十二节,jQuery入门介绍
jQuery入门 学习要点: 1.什么是 jQuery 2.学习 jQuery的条件 3.jQuery的版本 4.jQuery的功能和优势 5.其他 JavaScript库 6.是否兼容低版本 I ...
- 第一百七十六节,jQuery,插件
jQuery,插件 学习要点: 1.插件概述 2.验证插件 3.自动完成插件 4.自定义插件 插件(Plugin)也成为 jQuery 扩展(Extension),是一种遵循一定规范的应用程序接口编 ...
- jquery动画效果总结
一.jquery的动画速度fast-slow对应着600ms,200ms,不写是400ms 二.禁用jquery的动画 将jQuery.fx.off设置为true即可 $(".stoppin ...
- jQuery系列(三):jQuery动画效果
jQuery提供的一组网页中常见的动画效果,这些动画是标准的.有规律的效果:同时还提供给我们了自定义动画的功能. 1.显示动画 方式一: $("div").show(); 解释:无 ...
随机推荐
- sqlserver用于统计表索引情况
/*eg: --调用该过程实例 --1 创建临时表 IF OBJECT_ID('tempdb..#index_sql_text') IS NOT NULL DROP TABLE #index_sql_ ...
- javascript快速入门3--分支判断与循环
分支结构 单一选择结构(if) 二路选择结构(if/else) 内联三元运算符 ?: 多路选择结构(switch) var condition = true; if (condition) { ale ...
- Redis 命令一
Redis 命令用于在 redis 服务上执行操作. 要在 redis 服务上执行命令需要一个 redis 客户端.Redis 客户端在我们之前下载的的 redis 的安装包中. 1.Redis 客户 ...
- replace的用法
http://blog.sina.com.cn/s/blog_9ed9ac7d0101ec1f.html replace 语句 如果存在,更新,否则,插入在使用REPLACE时,表中必须有唯一索引,而 ...
- ThreadLocal的实现原理(读书笔记)
ThreadLocal的set方法和get方法,从set方法开始: public void set(T value) { Thread t = Thread.currentThread();//获取当 ...
- C 实现strcmp,strcpy,strcat函数
基于C语言的strcmp,strcpy,strcat函数的实现.C语言是一个程序猿的基础,一定要重视. char* strcat ( char * dst , const char * src ) { ...
- jsoup爬虫简书首页数据做个小Demo
代码地址如下:http://www.demodashi.com/demo/11643.html 昨天LZ去面试,遇到一个大牛,被血虐一番,发现自己基础还是很薄弱,对java一些原理掌握的还是不够稳固, ...
- HTML5开发移动web应用——Sencha Touch篇(10)
我们把数据可视化出来,为的就是进行一些针对数据的操作. 这里介绍一下DataView的排序功能和搜索功能. 掌握这两个技能,能够让写出的数据界面内的数据能够依据要求进行排序,能够进行数据的搜索显示灯功 ...
- 6、udev机制
udev 机制,主要实现的是当设备连接系统的时候,在 /dev 目录下,自动创建设备节点. 1.1.工作方式 当设备连接或者移除的时候,内核会发出热拔插事件(hotplug eve ...
- angularJS学习笔记(二)
前言 首先,了解 一下ng的一些概念: module 代码的组织单元,其它东西都是定义在具体的模块中的. app 应用业务,需要多个模块的配合完成. service 仅在数据层面实现特定业务功能的代码 ...