• jQuery基础(四)动画


    1、动画基础隐藏和显示

    jQuery中隐藏元素的hide方法

    $elem.hide()
    

    提供参数:

    .hide( options )
    

    当提供hide方法一个参数时,.hide()就会成为一个动画方法。.hide()方法将会匹配元素的宽度,高度,以及不透明度,同时进行动画操作

    快捷参数:

    .hide("fast / slow")
    

    这是一个动画设置的快捷方式,'fast' 和 'slow' 分别代表200和600毫秒的延时,就是元素会执行200/600毫秒的动画后再隐藏

    注意:
    jQuery在做hide操作的时候,是会保存本身的元素的原始属性值,再之后通过对应的方法还原的时候还是初始值。比如一个元素的display属性值为inline,那么隐藏再显示时,这个元素将再次显示inline。一旦透明度 达到0,display样式属性将被设置为none,这个元素将不再在页面中影响布局

            <script type="text/javascript">
            //点击buttom1 直接隐藏
            $("button:first").click(function() {
                $("#a1").hide()
            });
            </script>
    
    
            <h4>测试一</h4>
            <div id="a2">hide动画操作</div>
            <button>hide带动画</button>
            <script type="text/javascript">
            //点击buttom2 执行动画隐藏
            $("button:last").click(function() {
                $("#a2").hide({
                    duration: 3000,
                    complete: function() {
                        alert('执行3000ms动画完毕')
                    }
                })
            });
            </script>        
    

    jQuery中显示元素的show方法

    hide是让元素显示到隐藏,show则是相反,让元素从隐藏到显示

    看一段代码:使用上一致,结果相反

    $('elem').hide(3000).show(3000)
    

    让元素执行3秒的隐藏动画,然后执行3秒的显示动画。

    show与hide方法是非常常用的,但是一般很少会基于这2个属性执行动画,大多情况下还是直接操作元素的显示与隐藏为主
    注意事项:

    • show与hide方法是修改的display属性,通过是visibility属性布局需要通过css方法单独设置
    • 如果使用!important在你的样式中,比如display: none !important,如果你希望.show()方法正常工作,必须使用.css('display', 'block !important')重写样式
    • 如果让show与hide成为一个动画,那么默认执行动画会改变元素的高度,高度,透明度

    jQuery中显示与隐藏切换toggle方法

    toggle用于切换显示或隐藏匹配元素

    基本的操作:toggle();
    这是最基本的操作,处理元素显示或者隐藏,因为不带参数,所以没有动画。通过改变CSS的display属性,匹配的元素将被立即显示或隐藏,没有动画。

    • 如果元素是最初显示,它会被隐藏
    • 如果隐藏的,它会显示出来
    • display属性将被储存并且需要的时候可以恢复。如果一个元素的display值为inline,然后是隐藏和显示,这个元素将再次显示inline

    提供参数:.toggle( [duration ] [, complete ] )
    同样的提供了时间、还有动画结束的回调。在参数对应的时间内,元素会发生显示/隐藏的改变,在改变的过程中会把元素的高、宽、不透明度进行一系列动画效果。这个元素其实就是show与hide的方法

    直接定位:.toggle(display)

    <script>
    $(document).ready(function(){
      $("button").click(function(){
        $("p").toggle();
      });
    });
    </script>
    </head>
    

    2、上卷下拉效果

    .slideDown():用滑动动画显示一个匹配元素
    常见的操作,提供一个动画是时间,然后传递一个回调,用于知道动画是什么时候结束

    .slideDown( [duration ] [, complete ] )
    

    持续时间(duration)是以毫秒为单位的,数值越大,动画越慢,不是越快。字符串 'fast' 和 'slow' 分别代表200和600毫秒的延时。如果提供任何其他字符串,或者这个duration参数被省略,那么默认使用400 毫秒的延时。
    具体使用:

    $("ele").slideDown(1000, function() {
        //等待动画执行1秒后,执行别的动作....
    });
    

    注意事项:

    • 下拉动画是从无到有,所以一开始元素是需要先隐藏起来的,可以设置display:none
    • 如果提供回调函数参数,callback会在动画完成的时候调用。将不同的动画串联在一起按顺序排列执行是非常有用的。这个回调函数不设置任何参数,但是 this会设成将要执行动画的那个DOM元素,如果多个元素一起做动画效果,那么要非常注意,回调函数会在每一个元素执行完动画后都执行一次,而不是这组 动画整体才执行一次

    jQuery中上卷动画slideUp

    用法同slideDown。
    最简单的使用:不带参数

    $("elem").slideUp();
    这个使用的含义就是:找到元素的高度,然后采用一个下滑动画让元素一直滑到隐藏,当高度为0的时候,也就是不可见的时,修改元素display 样式属性被设置为none。这样就能确保这个元素不会影响页面布局了

    带参数:

    .slideUp( [duration ] [, easing ] [, complete ] )
    同样可以提供一个时间,然后可以使用一种过渡使用哪种缓动函数,jQuery默认就2种,可以通过下载插件支持。最后一个动画结束的回调方法。

    因为动画是异步的,所以要在动画之后执行的某些操作就必须要写到回调函数里面,这里要特别注意

    jQuery中上卷下拉切换slideToggle

    基本的操作:slideToggle();

    这是最基本的操作,获取元素的高度,使这个元素的高度发生改变,从而让元素里的内容往下或往上滑。

    提供参数: .slideToggle( [duration ] ,[ complete ] )

    同样的提供了时间、还有动画结束的回调。在参数对应的时间内,元素会完成动画,然后出发回调函数

    同时也提供了时间的快速定义,字符串 'fast' 和 'slow' 分别代表200和600毫秒的延时

    slideToggle("fast") 
    slideToggle("slow") 
    

    注意:

    • display属性值保存在jQuery的数据缓存中,所以display可以方便以后可以恢复到其初始值
    • 当一个隐藏动画后,高度值达到0的时候,display 样式属性被设置为none,以确保该元素不再影响页面布局

    3、淡入淡出效果

    jQuery中淡出动画fadeOut

    让元素在页面不可见,常用的办法就是通过设置样式的display:none。除此之外设置元素透明度为0,可以让元素不可见,透明度的参数是0~1之间的值,通过改变这个值可以让元素有一个透明度的效果。常见的淡入淡出动画正是这样的原理。

    fadeOut()函数用于隐藏所有匹配的元素,并带有淡出的过渡动画效果

    所谓"淡出"隐藏的,元素是隐藏状态不对作任何改变,元素是可见的,则将其隐藏。

    .fadeOut( [duration ], [ complete ] )
    

    通过不透明度的变化来实现所有匹配元素的淡出效果,并在动画完成后可选地触发一个回调函数。这个动画只调整元素的不透明度,也就是说所有匹配的元素的高度和宽度不会发生变化。

    字符串 'fast' 和 'slow' 分别代表200和600毫秒的延时。如果提供任何其他字符串,或者这个duration参数被省略,那么默认使用400毫秒的延时

    jQuery中淡入动画fadeIn

    同fadeOut

    jQuery中淡入淡出切换fadeToggle

    fadeToggle切换fadeOut与fadeIn效果,所谓"切换",即如果元素当前是可见的,则将其隐藏(淡出);如果元素当前是隐藏的,则使其显示(淡入)。

    常用语法:.fadeToggle( [duration ] ,[ complete ] )

    jQuery中淡入效果fadeTo

    淡入淡出fadeIn与fadeOut都是修改元素样式的opacity属性,但是他们都有个共同的特点,变化的区间要么是0,要么是1

    fadeIn:淡入效果,内容显示,opacity是0到1
    fadeOut:淡出效果,内容隐藏,opacity是1到0
    

    如果要让元素保持动画效果,执行opacity = 0.5的效果时,要如何处理?

    如果不考虑CSS3,我们用JS实现的话,基本就是通过定时器,在设定的时间内一点点的修改opacity的值,最终为0.5,原理虽说简单,但是总不如一键设置这么舒服,jQuery提供了fadeTo方法,可以让改变透明度一步到位

    语法

    .fadeTo( duration, opacity ,callback)
    必需的 duration参数规定效果的时长。它可以取以下值:"slow"、"fast" 或毫秒。fadeTo() 方法中必需的 opacity 参数将淡入淡出效果设置为给定的不透明度(值介于 0 与 1 之间)。可选的 callback 参数是该函数完成后所执行的函数名称。

    4、动画切换的比较

    操作元素的显示和隐藏可以有几种方法。
    例如:

    • show/hide 改变样式display为none
    • sildeDown/sildeUp 设置位置高度为0
    • fadeIn/fadeOut 设置透明度为0

    5、自定义动画

    jQuery中动画animate(上)

    语法:

    .animate( properties ,[ duration ], [ easing ], [ complete ] )
    .animate( properties, options )
    

    参数分解:

    properties:一个或多个css属性的键值对所构成的Object对象。要特别注意所有用于动画的属性必须是数字的,除非另有说明;这些属性如果不是数字的将不能使用基本的jQuery功能。比如常见的,border、margin、padding、width、height、font、left、top、right、bottom、wordSpacing等等这些都是能产生动画效果的。background-color很明显不可以,因为参数是red或者GBG这样的值,非常用插件,否则正常情况下是不能只用动画效果的。

    • 注意,CSS 样式使用 DOM 名称(比如 "fontSize")来设置,而非 CSS 名称(比如 "font-size")。

    • 特别注意单位,属性值的单位像素(px),除非另有说明。单位em 和 %需要指定使用

    $(elem).animate({
        left: 50, 
         '50px'   
        opacity: 'show',  
        fontSize: "10em",
    }, 500);
    

    duration时间

    动画执行的时间,持续时间是以毫秒为单位的;值越大表示动画执行的越慢,不是越快。还可以提供'fast' 和 'slow'字符串,分别表示持续时间为200 和 600毫秒。

    easing动画运动的算法

    jQuery库中默认调用 swing。如果需要其他的动画算法,请查找相关的插件

    complete回调

    动画完成时执行的函数,这个可以保证当前动画确定完成后发会触发

    jQuery中动画animate(下)

    animate在执行动画中,如果需要观察动画的一些执行情况,或者在动画进行中的某一时刻进行一些其他处理,我们可以通过animate提供的第二种设置语法,传递一个对象参数,可以拿到动画执行状态一些通知

    .animate( properties, options )
    

    options参数

    • duration - 设置动画执行的时间
    • easing - 规定要使用的 easing 函数,过渡使用哪种缓动函数
    • step:规定每个动画的每一步完成之后要执行的函数
    • progress:每一次动画调用的时候会执行这个回调,就是一个进度的概念
    • complete:动画完成回调

    其中最关键的一点就是:

    如果多个元素执行动画,回调将在每个匹配的元素上执行一次,不是作为整个动画执行一次

       <script type="text/javascript">
        $("#exec").click(function() {
            var v = $("#animation").val();
            var $aaron = $("#aaron");
            if (v == "1") {
                //观察每一次动画的改变
                $aaron.animate({
                    height: '50'
                }, {
                    duration :2000,
                    //每一个动画都会调用
                    step: function(now, fx) {
                       $aaron.text('高度的改变值:'+now)
                    }
                })
            } else if (v == "2") {
                //观察每一次进度的变化
                $aaron.animate({
                    height: '50'
                }, {
                    duration :2000,
                    //每一步动画完成后调用的一个函数,
                    //无论动画属性有多少,每个动画元素都执行单独的函数
                    progress: function(now, fx) {
                       $aaron.text('进度:'+arguments[1])
                        // var data = fx.elem.id + ' ' + fx.prop + ': ' + now;
                        // alert(data)
                    }
                })
            } 
        });
        </script>
    


    noww接收的是每次动画时height的值,fxx是指每个动画的每一步完成之后要执行的函数. step自动执行的这个函数.
    
     arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性。arguments非常类似Array,但实际上又不是一个Array实例.arguments对象的长度是由实参个数而不是形参个数决定的。形参是函数内部重新开辟内存空间存储的变量,但是其与arguments对象内存空间并不重叠.
    
    也就是说此时的arguments[1]代表的是progress的进度,而它是从0-1的,0代表开始,1代表结束
    

    jQuery中停止动画stop

    语法:

    .stop( [clearQueue ], [ jumpToEnd ] )
    .stop( [queue ], [ clearQueue ] ,[ jumpToEnd ] )
    
    • .stop();停止当前动画,点击在暂停处继续开始。同一个元素调用多个动画方法,.stop()之后,第一个动画暂停,后面的动画接着执行。

    • .stop(true); 如果同一元素调用多个动画方法,尚未被执行的动画被放置在元素的效果队列中。这些动画不会开始,直到第一个完成。暂停之后,停止执行下一个动画,直到第一个动画执行完。如果clearQueue参数提供true值,那么在队列中的动画其余被删除并永远不会运行

    • .stop(true,true); 停止所有动画,直接跳到第一个动画的最终状态 。

    <script type="text/javascript">
    
        //点击执行动画
        $("#exec").click(function(){
            $("#aaron").animate({
                height: 300
            }, 5000)
            $("#aaron").animate({
                 300
            }, 5000)
            $("#aaron").animate({
                opacity: 0.6
            }, 2000)
        })
    
    
        $("#stop").click(function() {
            var v = $("#animation").val();
            var $aaron = $("#aaron");
            if (v == "1") {
                //当前当前动画
                $aaron.stop()
            } else if (v == "2") {
                //停止所以队列
                $aaron.stop(true)
            } else if (v == "3") {
                //停止动画,直接跳到当前动画的结束
                $aaron.stop(true,true)
            } 
        });
        </script>
    

    6、jQuery核心

    jQuery中each方法的应用

    jQuery会提供$(selector).each()来遍历jQuery对象
    .each只是处理jQuery对象的方法,jQuery还提供了一个通用的jQuery.each方法,用来处理对象和数组的遍历
    语法

    jQuery.each(array, callback )
    jQuery.each( object, callback )
    

    第一个参数传递的就是一个对象或者数组,第二个是回调函数

    $.each(["Aaron", "慕课网"], function(index, value) {
       //index是索引,也就是数组的索引
       //value就是数组中的值了
    });
    

    each就是for循环方法的一个包装,内部就是通过for遍历数组与对象,通过回调函数返回内部迭代的一些参数,第一个参数是当前迭代成员在对象或数组中的索引值(从0开始计数),第二个参数是当前迭代成员(与this的引用相同

    jQuery.each()函数还会根据每次调用函数callback的返回值来决定后续动作。如果返回值为false,则停止循环(相当于普通循环中的break);如果返回其他任何值,均表示继续执行下一个循环。

    $.each(["Aaron", "慕课网"], function(index, value) {
        return false; //停止迭代
    });
    
        <script type="text/javascript">
        $("#exec").click(function() {
            var v = $("#animation").val();
            var $aaron = $("#aaron");
            $aaron.empty();
            if (v == "1") {
    
                // 遍历数组元素
                $.each(['Aaron', '慕课网'], function(i, item) {
                    $aaron.append("索引=" + i + "; 元素=" + item);
                });
            } else if (v == "2") {
                // 遍历对象属性
                $.each({
                    name: "张三",
                    age: 18
                }, function(property, value) {
                    $aaron.append("属性名=" + property + "; 属性值=" + value);
                });
            } 
        });
        </script>
    


    jQuery中查找数组中的索引inArray

    inArray()函数判断元素是否存在数组中。注意了:在ECMAScript5已经有数据的indexOf方法支持了,但是jQuery保持了版本向下兼容,所以封装了一个inArray方法
    jQuery.inArray()函数用于在数组中搜索指定的值,并返回其索引值。如果数组中不存在该值,则返回 -1。

    语法:

    jQuery.inArray( value, array ,[ fromIndex ] )
    

    用法非常简单,传递一个检测的目标值,然后传递原始的数组,可以通过fromIndex规定查找的起始值,默认数组是0开始

    例如:在数组中查找值是5的索引

    $.inArray(5,[1,2,3,4,5,6,7]) //返回对应的索引:4
    

    注意:

    如果要判断数组中是否存在指定值,你需要通过该函数的返回值不等于(或大于)-1来进行判断

        <script type="text/javascript">
        $("#exec").click(function() {
            var v = $("#animation").val();
            var $aaron = $("#aaron");
               $aaron.empty();
            if (v == "1") {
    
                var index = $.inArray('Aaron',['test','Aaron', 'array','慕课网']);
    
                $aaron.text('Aaron的索引是: '+ index)
    
            } else if (v == "2") {
    
                //指定索引开始的位置
                var index = $.inArray('a',['a','b','c','d','a','c'],2);
    
                $aaron.text('a的索引是: '+ index)
            } 
        });
        </script>
    


    jQuery中去空格神器trim方法

    jQuery.trim()函数用于去除字符串两端的空白字符

    这个函数很简单,没有多余的参数用法

    需要注意:

    移除字符串开始和结尾处的所有换行符,空格(包括连续的空格)和制表符(tab)
    如果这些空白字符在字符串中间时,它们将被保留,不会被移除

        <script type="text/javascript">
        $("#exec1").click(function() {
            alert("值的长度:" + $("#results1").val().length)
        });
    
        $("#exec2").click(function() {
             alert("值的长度:" + $.trim($("#results2").val()).length)
        });
        </script>
    


    jQuery中DOM元素的获取get方法

    jQuery是一个合集对象,如果需要单独操作合集中的的某一个元素,可以通过.get()方法获取到

    以下有3个a元素结构:

    <a>1</a>
    <a>2</a>
    <a>3</a>
    

    通过jQuery获取所有的a元素合集$("a"),如果想进一步在合集中找到第二2个dom元素单独处理,可以通过get方法

    语法:

    .get( [index ] )
    

    注意2点

    • get方法是获取的dom对象,也就是通过document.getElementById获取的对象
    • get方法是从0开始索引
      所以第二个a元素的查找: $(a).get(1)

    负索引值参数

    • get方法还可以从后往前索引,传递一个负索引值,注意的负值的索引起始值是-1

    • 同样是找到第二元素,可以传递 $(a).get(-2)

        <script type="text/javascript">
        $("#exec").click(function() {
            var v = $("#animation").val();
            var $aaron = $("#aaron a");
    
            //通过get找到第二个a元素,并修改蓝色字体
            if (v == "1") {
               $aaron.get(1).style.color = "blue"
            } else if (v == "2") {
                //通过get找到最后一个a元素,并修改字体颜色
                $aaron.get(-1).style.color = "#8A2BE2"
            }
        });
        </script>
    

    jQuery中DOM元素的获取index方法

    .index()方法,从匹配的元素中搜索给定元素的索引值,从0开始计数。

    语法:参数接受一个jQuery或者dom对象作为查找的条件

    .index()
    .index( selector )
    .index( element )
    
    • 如果不传递任何参数给 .index() 方法,则返回值就是jQuery对象中第一个元素相对于它同辈元素的位置
    • 如果在一组元素上调用 .index() ,并且参数是一个DOM元素或jQuery对象, .index() 返回值就是传入的元素相对于原先集合的位置
    • 如果参数是一个选择器, .index() 返回值就是原先元素相对于选择器匹配元素的位置。如果找不到匹配的元素,则 .index() 返回 -1

    简单来说:

    <ul>
        <a></a>
        <li id="test1">1</li>
        <li id="test2">2</li>
        <li id="test3">3</li>
    </ul>
    

    $("li").index() 没有传递参数,反正的结果是1,它的意思是返回同辈的排列循序,第一个li之前有a元素,同辈元素是a开始为0,所以li的开始索引是1

    如果要快速找到第二个li在列表中的索引,可以通过如下2种方式处理

    $("li").index(document.getElementById("test2")) //结果:1
    $("li").index($("#test2"))  //结果:1
    
        <script type="text/javascript">
        $("#exec").click(function() {
            var v = $("#animation").val();
    
            var $span = $("span");
            $span.empty();
    
            if (v == "1") {
                //找到第一个li的同辈节点中的索引位置
                $span.text($("li").index())
            } else if (v == "2") {
    
                //通过传递dom查找
                $span.text($("li").index(document.getElementById("test5")))
    
            } else if (v == "3") {
                //通过传递jQuery对象查找
                $span.text($("li").index($("#test6")))
    
            }
        });
        </script>
    
  • 相关阅读:
    java——多线程——Thread类的常用方法——sleep
    java——多线程——进程的理解
    java——多线程——主线程的概念
    java 一个对象的内存图
    Vue实现鼠标拖拽滚动效果,滚动方向不同控制不同组件滚动自定义指令
    uniapp封装axios
    移动端经典布局左边导航右边滚动列表
    uniapp将盒子铺满页面,适应导航栏高度,无滚动条
    vue/uniapp 用键值对的形式动态控制class,事先导航栏效果
    Vue新建项目
  • 原文地址:https://www.cnblogs.com/louisduan66/p/10723395.html
Copyright © 2020-2023  润新知