• Jquery动画


    Jquery动画

    Jquery动画可以分为三部分:内置动画(非自定义动画),非内置(自定义)动画,动画的设置

    一、非自定义动画:
     
    1.显示、隐藏:
     
        show( )显示 、hide( )隐藏、toggle()显示/隐藏
     
    show()、hide()、toggle()方法有两种用法,一种是不传参数,代表直接显示隐藏。
     
    另一种是向方法中传递一个参数,这个参数为number类型,代表动画的执行时间。会有显示隐藏的动画效果。
     
        示例:show(100)、hide(100)、toggle(100)
     
    不仅如此,jQuery还为动画方法提供了三种字符串形式的参数,分别是:fast、slow、和空字符串''
     
        show('fast')、hide('slow')、toggle('')
     
    三种参数的执行时间,分别为 ,'fast' :200毫秒   ''(默认值):400毫秒   'slow':600毫秒
     
    2.滑动:
     
        slideUp():向上滑动(隐藏)
     
        slideDown():向下滑动(显示)
     
        slideToggle():滑动(自动)
     
    3.淡入淡出:
     
        fadeOut():淡出(隐藏)
     
        fadeIn():淡入(显示)
     
        fadeToggle():显示隐藏()自动
     
    该方法是将元素的透明度从1变成零之后将元素的display属性设置为none;
     
        但是如果我们想要将透明度设置到一个固定值,这些方法并不能实现,jQuery为我们提供了一个方法fadeTo(),该方法接受两个参数。
        第一个参数是动画执行的时间,第二个参数是期望达到的透明度。
     
     
     
    二、自定义动画
     
    animate()方法
     
        animate()方法有三个参数。分别是动画目标(target),动画执行时间,回调函数。只有第一个参数是必填参数。
     
    animate()方法的使用:
     
        1.animate({
            'width':'200px',
            'height':'200px'
        })
     
    将元素属性变换为自定义动画中的目标属性,所有参数中的属性一起改变。
     
        2.animate({
            'width':'+=200px'
        })
     
    设置的属性,支持运算。
     
    3.动画的执行顺序:
     
    如果想要动画按照顺序执行(执行完第一个动画之后,再执行下一个动画)有三种方法:
     
    1)借助动画的回调函数。
     
    $('input').click(function(){
        $('div').animate({
            'width':'400px',
            'height':'400px',
        },function(){
            $('div').animate({
                'width':'200px',
                'height':'200px'
            })
        })
    })
     
    2)将动画效果分开写
     
    $('input').click(function(){
        $('div').animate({
            'width':'400px',
            'height':'400px',
        })
        $('div').animate({
            'width':'200px',
            'height':'200px'
        })
    })
     
    3)连缀
     
    $('input').click(function(){
        $('div').animate({
            'width':'400px',
            'height':'400px',
        }).animate({
            'width':'200px',
            'height':'200px'
        })
    })
     
    在操作同一元素的时候,推荐使用连缀。在操作不同元素的时候,推荐使用回调函数。
     
    连缀:jquery的动画方法,每次调用都会返回当前选择的元素,从而可以让jQuery可以实现连缀。
      
    三、动画的执行顺序。
     
    当我想要执行一个其他方法的时候,比如给当前元素加一个背景颜色。
     
    $('input').click(function(){
        $('div').animate({
            'width':'400px',
            'height':'400px',
        }).animate({
            'width':'200px',
            'height':'200px'
        }).css('background','yellow')
    })
     
    问题出现了:当我按照连缀写法,并没有出现我想要的效果所有方法都按照顺序执行,而是将css方法提前执行了。
     
    问题分析:根据我们以往写运动框架的经验,知道每个动画都是有定时器的,发生这个问题原因就在于此,定时器是异步的,在运行动画的时候我们后面的方法会继续执行,也就出现了上面的问题。
     
    解决:
     
    1)可以用回调函数解决:
     
    $('input').click(function(){
        $('div').animate({
            'width':'400px',
            'height':'400px',
        }).animate({
            'width':'200px',
            'height':'200px'
        },function(){
            $(this).css('background','yellow')
        })
    })
     
    2)jquery给我们提供了一个类似于回调函数的方法queue():
     
    $('input').click(function(){
        $('div').animate({
            'width':'400px',
            'height':'400px',
        }).animate({
            'width':'200px',
            'height':'200px'
        }).queue(function(){
              $(this).css('background','yellow')
        })
    })
     
    queue()方法的问题:
     
    当我想要在这个列队函数中再加一个动画的时候,发现在queue()方法后的函数无法执行。
     
    $('input').click(function(){
        $('div').animate({
            'width':'400px',
            'height':'400px',
        }).animate({
            'width':'200px',
            'height':'200px'
        }).queue(function(next){
            $(this).css('background','yellow');
            next();
        }).hide('400')
    })
     
    原理:连缀的原理是因为每个jquery动画方法都会提供一个返回值,这个返回值就是所选择的元素,queue()方法并不会提供一个返回值。为了让连缀继续,我们这时候应该让queue()方法有一个返回值。jquery为queue提供了一个参数next,我们只需要在queue()方法中传入这个参数并调用,那么queue()方法就有了一个返回值,连缀就可以继续了。
     
    四、动画及相关方法
     
    1.stop()方法
     
    这个方法是停止动画的方法,他有两个参数,都是布尔值。第一个参数代表是否清除动画队列,第二个参数代表是否直接运行到最后结果。
     
    2.delay()方法
     
    延时执行,该方法有一个参数,是延时执行的毫秒数。
     
    3.动画的递归
     
    $('div').slideToggle(2000,recursion)
     
    function recursion(){
        $(this).slideToggle(2000,recursion)
    }
     
    高级写法:
     
    $('div').slideToggle(2000,function(){
        $(this).slideToggle(2000,arguments.callee)
    })
     
    arguments.callee:常用在匿名函数中, 代表当前的函数。
     
    4.动画的全局方法
     
        $.fx.interval 属性可以调整动画每秒的运行帧数,默认为 13 毫秒。数字越小越流畅,但可能影响程序性能。
     
        $.fx.interval=1000;动画的帧数设置。
     
        $.fx.off=true;动画关闭。
     

    动画队列可以说是动画执行的一个顺序机制,当我们对一个对象添加多次动画效果时后,添加的动作就会被放入这个动画队列中,等前面的动画完成后再开始执行。

    动画队列机制和执行顺序

    1. 对于一组元素上的动画效果,有如下两种情况:

                  当在一个animate()方法中应用多个属性时,动画是同时发生的。

                  当以链式的写法应用动画方法时,动画是按照顺序发生的。

             2.对于多组元素上的动画效果,有如下情况:

                  默认情况下,动画都是同时发生的。

                 当以回调的形式应用动画方式时,动画是按照回调顺序发生的。

    以上是整个动画的调度一个流程,其实都是利用队列异步的空闲然后执行同步的代码,这样在处理上是没有浪费资源的,而且精确度也是最高的。

  • 相关阅读:
    SED{shell三剑客awk,sed,grep}
    AWK{shell三剑客awk,sed,grep}
    面试汇总
    shell脚本
    redis主从
    haproxy
    grafana
    zabbix
    lnmp
    shell 基础
  • 原文地址:https://www.cnblogs.com/li923/p/11553747.html
Copyright © 2020-2023  润新知