Jquery11 动画效果

学习要点:

  • 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‘);
});

原文地址:https://www.cnblogs.com/aaron911/p/9695984.html

时间: 2024-08-25 15:09:29

Jquery11 动画效果的相关文章

iOS点击查看大图的动画效果

对于图片来说,除了表情包,几乎都会被点击查看大图.今天就讲解一个查看和收起大图的动画效果,先直接看效果图: 如图所示,最开始是一个小图,点击小图可以查看大图.大图会从小图的位置和大小"弹"出来,同时背景变成半透明的阴影.点击大图或者阴影后,收起大图,同样地弹回到小图去,同时去掉阴影背景,就像是一张图片在伸大缩小一样. 现在看看这是怎么实现的.在思考一个动画的实现方法时,把动画的动作进行分解然后再一个个去思考怎么实现是一个好的习惯,我们稍微分解一下,这个动画在显示大图和收起大图的时候做了

iOS 之动画效果

/** type *  各种动画效果  其中除了'fade', `moveIn', `push' , `reveal' ,其他属于私有的API. *  ↑↑↑上面四个可以分别使用'kCATransitionFade', 'kCATransitionMoveIn', 'kCATransitionPush', 'kCATransitionReveal'来调用. *  @"cube"                     立方体翻滚效果 *  @"moveIn"    

Core Animation 动画效果介绍

在开始之前呢,先了解一下UIView和CALayer大体的区别(重点列举了以下四点): UIView继承自 UIResponder,因此UIView 可以处理响应事件,而CALayer继承自NSObject,所以它只是负责内容的创建,绘制. UIView负责对内容的管理,而CALayer则是对内容的绘制 UIView中有关位置的属性只有frame.bounds.center,而CALayer除了具备这些属性之外还有anchorPoint.position. 通过修改CALayer可以实现UIVi

带感”的边框交互动画效果

  效果的原理其实就是"四条边"发生宽度和高度的变化,上下两边是宽度变化,左右两边是高度的变化: 它们发生变化的方向也可以可控的,根据坐标设置即可控制. 下面我们直接上代码: 首先准备基础代码,那四条边并不是真正的border,而是通过标签加以宽高写出来,然后定位到四个方向: <!-- html --> <div class="box"> <div class="topL"></div> <d

iOS开发 QQ粘性动画效果

QQ(iOS)客户端的粘性动画效果 时间 2016-02-17 16:50:00  博客园精华区 原文  http://www.cnblogs.com/ziyi--caolu/p/5195615.html 主题 iOS开发 qq的app中要是有新的联系人发消息过来,相应联系人的cell右边会有一个红色的圆圈表示消息条数.如果去触碰那个圆圈,可以发现它竟然会跟着手指的移动而移动. 在一定范围内,手指离开屏幕,会发现红色圆圈会自动弹性的回到原来的位置.而如果超出一定距离,这个圆圈会做一个销毁的动画,

javascript动画效果之缓冲动画(修改版)

在编写多块同时触发运动的时候,发现一个BUG, timer = setInterval(show, 30);本来show是一个自定义函数,当设为timer = setInterval(show(one,two), 30);时,发现show里面的参数one和two无法被导入,所以需要做以下代码改进和优化 原版的html和css代码在这里javascript动画效果之缓冲动画 js代码如下 1 <script> 2 function $(id) { 3 return typeof id === &

自己动手丰衣足食,为Zepto添加Slide动画效果

一.缘由 公司的移动端项目,采用zepto为主要框架,但是zepto毕竟是精简版的jquery,体积小了,功能自然没有这么强大,特别是动画和选择器这两块,需要我们自己去拓展. 在项目开发过程中,很多页面过渡需要用到动画,简单的show/hide过渡太生硬,对用户不友好,并且移动端大多都是采用slide效果,此文主要是为zepto拓展slide动画. 二.发现 从zepto的在线文档上可以发现一个发布在github上的动画模块,但是缺少slide效果,度娘上找了找,相关的极少,只发现了一个slid

jQuery动画效果(借鉴他人的)

(1)jquery中常见的几种动画效果 (2)动画队列执行的顺序 对于一组元素上的动画效果,有如下两种情况: a) 当在一个animate()方法中应用多个属性时,动画是同时发生的. b) 当以链式的写法应用动画方法时,动画是按照顺序发生的. 对 于多组元素上的动画效果,有如下情况: a) 默认情况下,动画都是同时发生的. b) 当以回调的形式应用动画方式时,动画是按照回调顺序发生的. 另外,在动画方法中,要注意其他非动画的方法会插队,例如css()方法,要使这些非动画的 方法也按照顺序来执行,

CSS动画效果之animation

Y(^o^)Y css动画大乱弹之animation. 概述 什么是animation呢?在回答这个问题之前,先要说明什么叫做@keyframe(关键帧).@keyframe算是一个动画模板.在其中,可以使用百分比,如从0%到100%的任意值,分别在每个百分比中,加上不同的属性,从而让元素达到一种在不断变化的动画效果.这和我们制作flash动画一样,我们只需设计几个关键帧,系统就能生成动画啦! 一个@keyframe例子: 1 /*定义关键帧动画*/ 2 @keyframes myframe {