`
chaoyi
  • 浏览: 290444 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

第11章 动画效果

 
阅读更多

学习要点:
1.显示、隐藏
2.滑动、卷动
3.淡入、淡出
4.自定义动画
5.列队动画方法
6.动画相关方法
7.动画全局属性

在以前很长一段时间里,网页上的各种特效还需要采用 flash 在进行。但最近几年里,我们已经很少看到这种情况了,绝大部分已经使用 JavaScript 动画效果来取代 flash。这里说的取代是网页特效部分,而不是动画。网页特效比如:渐变菜单、渐进显示、图片轮播等;而动画比如:故事情节广告、MV 等等。

一.显示、隐藏
jQuery 中显示方法为:.show(),隐藏方法为:.hide()。在无参数的时候,只是硬性的显示内容和隐藏内容。

$('.show').click(function () { //显示
$('#box').show();
});
$('.hide').click(function () { //隐藏
$('#box').hide();
});

 
注意:.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 毫秒
});

 
注意: 不管是传递毫秒数还是传递预设字符串, 如果不小心传递错误或者传递空字符串。那么它将采用默认值: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);
});
});

 
我们在使用.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
});

 
注意:淡入、淡出效果和显示、隐藏效果一样,具有相同的参数。对于.fadeTo()方法,如果本身透明度大于指定值,会淡出,否则相反。

四.自定义动画
jQuery 提供了几种简单常用的固定动画方面我们使用。 但有些时候, 这些简单动画无法满足我们更加复杂的需求。这个时候,jQuery 提供了一个.animate()方法来创建我们的自定义动画,满足更多复杂多变的要求。

$('.animate').click(function () {
$('#box').animate({
'width' : '300px',
'height' : '200px',
'fontSize' : '50px',
'opacity' : 0.5
});
});

 
注意:一个 CSS 变化就是一个动画效果,上面的例子中,已经有四个 CSS 变化,已经实现了多重动画同步运动的效果。
必传的参数只有一个,就是一个键值对 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');

 
注意:如果动画方法,连缀可以实依次列队,而.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 开发中用的比较少,我们这里不做详细探讨。

//获取当前列队的长度,fx 是默认列队的参数
function count() {
return $("#box").queue('fx').length;
}

 

//在某个动画处调用
$('#box').slideDown('slow', function () {alert(count());});

 
jQuery 还提供了一个清理列队的功能方法:.clearQueue()。把它放入一个列队的回调函数或.queue()方法里,就可以把剩下为执行的列队给移除。

//清理动画列队
$('#box').slideDown('slow', function () {$(this).clearQueue()});

 
六.动画相关方法
很多时候需要停止正在运行中的动画,jQuery 为此提供了一个.stop()方法。它有两个可选参数:.stop(clearQueue, gotoEnd);clearQueue 传递一个布尔值,代表是否清空未执行完的动画列队,gotoEnd 代表是否直接将正在执行的动画跳转到末状态。

//强制停止运行中的
$('.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);
});

 

注意:第一个参数表示是否取消列队动画,默认为 false。如果参数为 true,当有列队动画的时候,会取消后面的列队动画。第二参数表示是否到达当前动画结尾,默认为 false。如果参数为 true,则停止后立即到达末尾处。
有时在执行动画或列队动画时, 需要在运动之前有延迟执行, jQuery 为此提供了.delay()方法。这个方法可以在动画之前设置延迟,也可以在列队动画中间加上。

//开始延迟 1 秒钟,中间延迟 1 秒
$('.animate').click(function () {
$('#box').delay(1000).animate({
'left' : '300px'
}, 1000);
$('#box').animate({
'bottom' : '300px'
}, 1000);
$('#box').delay(1000).animate({
'width' : '300px'
}, 1000);
$('#box').animate({
'height' : '300px'
}, 1000);
});

 
在选择器的基础章节中,我们提到过一个过滤器:animated,这个过滤器可以判断出当前运动的动画是哪个元素。 通过这个特点, 我们可以避免由于用户快速在某个元素执行动画时,由于动画积累而导致的动画和用户的行为不一致。

//递归执行自我,无线循环播放
$('#box').slideToggle('slow', function () {
$(this).slideToggle('slow', arguments.callee);
});

 

//停止正在运动的动画,并且设置红色背景
$('.button').click(function(){
$('div:animated').stop().css('background', 'red');
});

 
六.动画全局属性
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

 
补充:在.animate()方法中,还有一个参数,easing 运动方式,这个参数,大部分参数值需要通过插件来使用,在后面的课程中,会详细讲解。自带的参数有两个:swing(缓动)、linear(匀速),默认为 swing。

$('.button').click(function () {
$('#box').animate({
left : '800px'
}, 'slow', 'swing');
$('#pox').animate({
left : '800px'
}, 'slow', 'linear');
});

 

分享到:
评论

相关推荐

    第11章 动画效果(下)

    NULL 博文链接:https://onestopweb.iteye.com/blog/2226302

    第11章 动画效果(上)

    NULL 博文链接:https://onestopweb.iteye.com/blog/2225328

    第11章 动画效果(中)

    NULL 博文链接:https://onestopweb.iteye.com/blog/2225329

    《计算机应用基础》(计算机应用基础实训指导)-第7章实例PPT素材-添加动画效果.pptx

    E5500 INTEL B43 主板 显卡 网卡 光驱 移动硬盘 U 盘 激光打印机 数码相机 2G内存条 500G硬盘 键盘鼠标 《计算机应用基础》(计算机应用基础实训指导)-第7章实例PPT素材-添加动画效果全文共14页,当前为第11页。...

    精通Direct3D图形与动画程序设计 21_第二十一章 HLSL高级应用.rar

    第21章 HLSL高级应用 1、HLSLSelfShadowing 演示使用HLSL渲染语言进行GPU编程实现自遮蔽阴影。 2、HLSLBumpTexture 演示使用HLSL渲染语言进行GPU编程实现凹凸纹理映射。 3、HLSLCubeMapping 演示使用HLSL渲染语言...

    PPT-2016视频教程29讲

    第1章Powerpoint2016的初步认识.mp4 第2章Powerpoint2016的新增...第21章动画效果实例(2) .mp4 第22章插入超链接.mp4 第23章认识幻灯片放映视图.mp4 第24章操作幻灯片.mp4 第25章打印幻灯片.mp4 第26章打包演示文稿.mp4

    3Dmax的ppt教程

    第1章 3ds max 9入门 第2章 基本模型创建 第3章 基本编辑操作 第4章 创建图形 ...第11章 基础动画 第12章 粒子动画及影视合成 第13章 室内效果图制作实训 第14章 建筑效果图制作实训 第15章 片头动画制作实训

    HTML5 Canvas核心技术图形动画与游戏开发

    第5章介绍如何实现平滑的动画效果;第6章讲解如何用JavaScript语言来实现精灵;第7章展示了如何在动画中模拟物理效果;第8章介绍了进行碰撞检测所用的技术;第9章以一个简单但是高效的游戏引擎开始,提供了游戏制作...

    《精通direct3d图形及动画程序设计》附书源代码

    第11章 应用程序框架 1、AppFrame 演示DXUT应用程序框架的生成和使用。 2、AppFrame(AddText) 演示使用DXUT框架显示文本信息。 3、AppFrame(AddControl) 演示使用DXUT框架为用户界面添加控件。 第12章 高级纹理应用...

    HTML5 Canvas核心技术图形动画与游戏开发 ((美)David Geary) 中文【PDF】

    第5章介绍如何实现平滑的动画效果;第6章讲解如何用JavaScript语言来实现精灵;第7章展示了如何在动画中模拟物理效果;第8章介绍了进行碰撞检测所用的技术;第 9章以一个简单但是高效的游戏引擎开始,提供了游戏制作...

    WPF编程宝典1-100

    第11章 样式和行为 第12章 形状、画刷和变换 第13章 几何图形和图画 第14章 效果和可视比对象 第15章 动画基础 第16章 高级动画 第17章 控件模板 第18章 自定义元素 第19章 数据绑定 第20章 格式化绑定的数据 第21章...

    WPF编程宝典501-600

    第11章 样式和行为 第12章 形状、画刷和变换 第13章 几何图形和图画 第14章 效果和可视比对象 第15章 动画基础 第16章 高级动画 第17章 控件模板 第18章 自定义元素 第19章 数据绑定 第20章 格式化绑定的数据 第21章...

    WPF编程宝典101-200

    第11章 样式和行为 第12章 形状、画刷和变换 第13章 几何图形和图画 第14章 效果和可视比对象 第15章 动画基础 第16章 高级动画 第17章 控件模板 第18章 自定义元素 第19章 数据绑定 第20章 格式化绑定的数据 第21章...

    WPF编程宝典301-350

    第11章 样式和行为 第12章 形状、画刷和变换 第13章 几何图形和图画 第14章 效果和可视比对象 第15章 动画基础 第16章 高级动画 第17章 控件模板 第18章 自定义元素 第19章 数据绑定 第20章 格式化绑定的数据 第21章...

    WPF编程宝典351-400

    第11章 样式和行为 第12章 形状、画刷和变换 第13章 几何图形和图画 第14章 效果和可视比对象 第15章 动画基础 第16章 高级动画 第17章 控件模板 第18章 自定义元素 第19章 数据绑定 第20章 格式化绑定的数据 第21章...

    WPF编程宝典c#2010

    第11章 样式和行为 第12章 形状、画刷和变换 第13章 几何图形和图画 第14章 效果和可视比对象 第15章 动画基础 第16章 高级动画 第17章 控件模板 第18章 自定义元素 第19章 数据绑定 第20章 格式化绑定的数据 第21章...

    Visual C# 2008程序设计经典案例设计与实现第二章源码

    第2章 Visual C# 2008与图形图像 案例1 动态绘制直线和曲线 案例2 动态绘制验证码 ...案例11 百叶窗图像动画效果 案例12 翻转和扩展图像动画效果 案例13 图像的纹理和浮雕效果 案例14 图像的马赛克效果 本章小结

    HTML5 Canvas核心技术:图形、动画与游戏开发

    第5章介绍如何实现平滑的动画效果;第6章讲解如何用JavaScript语言来实现精灵;第7章展示了如何在动画中模拟物理效果;第8章介绍了进行碰撞检测所用的技术;第9章以一个简单但是高效的游戏引擎开始,提供了游戏制作...

    [Flash.ActionScript.3.0动画教程

    第11章 台球物理 11.1 质量 11.2 动量 11.3 动量守恒 11.3.1 单轴上的动量守恒 11.3.2 两个轴上的动量守恒 11.4 本章重点公式 11.5 小结 第12章 粒子引力和重力 12.1 粒子(Particles) 12.2 重力 12.2.1 万有引力 ...

    3ds Max 2012中文版完全自学视频教程下载第11章 让我的作品动起来——动画制作.zip

    本教程以零基础自学为宗旨,用实例引导读者学习,深入浅出地介绍了3ds Max 2012的相关知识、操作...本教程共分为22章,包含了18小时以上视频录像和 50套3ds Max设计源文件,边看边练效果更好,让学习更轻松、更高效。

Global site tag (gtag.js) - Google Analytics