【问题标题】:alpha sort plugin: how to add 'shuffle' animationalpha 排序插件:如何添加“随机播放”动画
【发布时间】:2015-11-18 03:57:57
【问题描述】:

我已经实现了一个 Jquery 插件来识别和排序包装在父元素中的子元素集合。该插件还具有分组功能。

我对如何在 dom 更改中添加动画有点迷茫。我能够添加一个引入元素的基本“显示”动画,但我想创建一个甜美的“随机播放”视觉效果。

(function ( $ ) {

    $.fn.alphaSort = function( options ) {

        /**
         * defaults: changing the keys will kill someone close to you. so, don't do it!
         * **/
        var settings = $.extend({          
            child: 'div', /**collection of child elements within the parent**/
            target: 'span', /**the target element within a single child**/
            order: 'asc', /**the sort order. existing options: asc &  desc**/
            group: true,/**group alphabetically or not**/
            titleCss: 'row'/**the css class styling the header group.**/
        }, options );

        var data = 'data-name'; /**developer must set the values being compared, to a data attribute 'data-name'**/
        var parent = this;   
        var children = this.find(settings.child);

        var container = { letters: [] };

        /**
         * read the dom, each childs target element has a data attribute 'data-name'.
         * read the data attribute and prepare a list of first letters.
         * a key value pair is inserted into the container. 
         * key will be the first letter, the value will be a sublist, containing child elements.
         * the child elements represent institutes which starts with the letter denoted by the key.
         * **/
        children.each(function(){

            var elem = $(this).find(settings.target);
            var name = elem.attr(data);

            var l = name.substring(0,1).toUpperCase();

            if (!(l in container)) {

                container[l] = [];
                container.letters.push(l);
            }

            container[l].push($(this));

       });

        /**
         * sort the list of first letters stored.
         * **/
        container.letters.sort();

        if(settings.order != "asc")
            container.letters.reverse();

        /**
         * clear the parent element. get ready for dom manipulation.
         * **/
        parent.empty();  

        /**
         * iterate through the firt letter list.
         * sort each sublist. each sublist is identified by a first letter 'key'
         * **/
        $.each(container.letters, function(i,letter){

            var list = container[letter];
            list.sort(function(a,b){

                var aelem = $(a).find(settings.target);
                var aName = aelem.attr(data);
                var belem = $(b).find(settings.target);
                var bName = belem.attr(data);

                /**
                 * returns
                 *-1: str1 is sorted before str2
                 * 1: str1 is sorted after str2
                 * 0: two strings are equal
                 * **/
                return aName.toUpperCase().localeCompare(bName.toUpperCase());

            });

            /**
             * if the init script set group to 'true', then group, else skip
             * **/
            if(settings.group)
                parent.append("<div class = 'container-fluid'><div class='"+settings.titleCss+"'><h3 class = 'institute-group-h3'>"+letter+"</h3></div></div>");


            /**
             * append to dom
             * **/

            for(each in list)
                parent.append(list[each]);


        });  

    };

}( jQuery ));

【问题讨论】:

    标签: jquery jquery-plugins alphabetical


    【解决方案1】:

    您可以将 jQuery 的基本动画与 fadeIn()fadeOut()slideUp()slideDown() 函数一起使用

    $('your selector here').fadeIn();
    $('your selector here').fadeIn();
    $('your selector here').slideUp();
    $('your selector here').slideDown();
    

    如果你想做更高级的动画,你可以使用 jQuery .animate( properties [, duration ] [, easing ] [, complete ] ) 函数

    $( "your selector" ).click(function() {
      $( "#book" ).animate({
        opacity: 0.25,
        left: "+=50",
        height: "toggle"
      }, 5000, function() {
        // Animation complete.
      });
    });
    

    Jquery API doc上找到更多信息

    或者您可以使用 CSS3 动画和过渡。如果你不想从头开始编写动画,你可以使用像 animate.css 这样的动画库

    例如,您可以像这样将 jQuery 与 animate.css 动画结合起来

    $('your-selector').on('click', function () {
       $('your-selectort').addClass('animated bounceInUp');
    });
    

    这里有一些不错的文章article-1 & article-2

    编码愉快:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-23
      • 1970-01-01
      相关资源
      最近更新 更多