学习要点:
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章 动画效果(中)”中,我们将深入探讨计算机图形学和编程领域中的动画制作技术。尽管描述为空,但从标题我们可以推断,本章可能是某个教程或系列文章的一部分,专注于讲解如何在软件开发中创建中间...
在本章“动画效果(下)”中,我们将深入探讨计算机图形学中的动画技术,特别是在软件开发和游戏设计中的应用。动画效果是使程序或应用更具吸引力和交互性的重要手段,能够提供动态视觉体验,增强用户体验。下面我们...
在本章“动画效果(上)”中,我们将探讨如何在软件开发中创建引人入胜的视觉动态,特别是关注编程中的动画技术。动画效果在现代应用和网页设计中起着至关重要的作用,它们能够提升用户体验,使界面更加生动、交互性...
总之,《Maya 2012中文版入门与实战视频教程》的第11章“动画初级篇”将带你走进三维动画的世界,通过一系列实例操作,逐步掌握Maya的基础动画技能。无论你是对动画制作充满热情的初学者,还是希望拓宽技能范围的...
在本章"精通Direct3D图形与动画程序设计 29_第二十九章 海浪效果模拟"中,我们将深入探讨如何使用Direct3D技术来创建逼真的海浪效果。Direct3D是Microsoft开发的一个图形应用程序接口(API),主要用于游戏开发、专业...
这一章可能会涵盖表单验证、提交处理以及使用action和method属性设置表单行为。 3. HTML框架:框架允许网页内容分为多个独立显示的区域,每个区域可以加载不同的网页。学习框架有助于理解frameset、frame和noframes...
在Direct3D图形与动画程序设计中,运动模糊效果是一个重要的技术,特别是在游戏开发和电影制作中,它能显著提高视觉...通过深入学习和实践,你将能够熟练地运用这些技术,创造出更加逼真、引人入胜的3D图形和动画效果。
第21章 HLSL高级应用 1、HLSLSelfShadowing 演示使用HLSL渲染语言进行GPU编程实现自遮蔽阴影。 2、HLSLBumpTexture 演示使用HLSL渲染语言进行GPU编程实现凹凸纹理映射。 3、HLSLCubeMapping 演示使用HLSL渲染语言...
《网页设计与制作》课程中的第11章主要讲解了网页动画的制作,特别是通过Adobe Flash 8这一矢量动画编辑软件来实现。Flash 8是一款强大的创作工具,广泛应用于制作交互式内容,如动画、演示文稿、应用程序以及网站。...
第1章 3ds max 9入门 第2章 基本模型创建 第3章 基本编辑操作 第4章 创建图形 ...第11章 基础动画 第12章 粒子动画及影视合成 第13章 室内效果图制作实训 第14章 建筑效果图制作实训 第15章 片头动画制作实训
第1章Powerpoint2016的初步认识.mp4 第2章Powerpoint2016的新增...第21章动画效果实例(2) .mp4 第22章插入超链接.mp4 第23章认识幻灯片放映视图.mp4 第24章操作幻灯片.mp4 第25章打印幻灯片.mp4 第26章打包演示文稿.mp4
而计算机技术的发展使得这一流程得以简化,计算机动画技术能够自动生成中间画、自动描线上色,直接输出高质量的动画效果,显著提高了动画制作的效率。 目前,计算机动画技术的应用领域极为广泛,从电影电视、广告、...
【Flash8教程第11章】在动画中应用外部图像和视频是关于如何在Adobe Flash 8中导入和处理多媒体元素的重要章节。本章主要涵盖了以下几个核心知识点: 1. **应用外部图像**: - Flash 8支持多种图形和图像格式,...
总的来说,3ds max 7是一款强大的三维动画工具,它提供了一整套工具集,从基础建模到高级动画制作,使得用户能够创建出栩栩如生的三维动画效果。对于想要学习三维动画的人来说,理解和掌握这些基础知识和流程至关...
在第十一章“应用程序框架”中,作者可能涵盖了以下几个关键知识点: 1. **DirectX SDK**:介绍DirectX软件开发工具包,包括安装、配置和使用的步骤,以及SDK中包含的各种库和头文件的作用。 2. **设备初始化**:...
### 第十一章:面部动画 - **面部动画**:专注于实现逼真的面部表情变化,如眨眼、微笑等。 - _知识点_: - 唇同步技术。 - 如何使用DirectX实现面部动画。 - **文件转换**:介绍如何将不同格式的3D模型文件转换...
在本章"精通Direct3D图形与动画程序设计 27_第二十七章 自然现象模拟"中,我们将深入探讨如何使用Direct3D技术来创建逼真的自然环境效果。Direct3D是Microsoft开发的一个强大的图形应用程序接口(API),广泛应用于...
第5章介绍如何实现平滑的动画效果;第6章讲解如何用JavaScript语言来实现精灵;第7章展示了如何在动画中模拟物理效果;第8章介绍了进行碰撞检测所用的技术;第 9章以一个简单但是高效的游戏引擎开始,提供了游戏制作...
【3dsmax 6 动画基础】 在3ds max 6中,动画制作是其核心功能之一,它基于人的视觉原理,...掌握这些基本概念和工具,能帮助用户创作出逼真的三维动画效果。通过不断实践和调整,可以创作出符合需求的高质量动画作品。