jquery move elements into a random order

前端 未结 5 795
难免孤独
难免孤独 2020-12-01 11:23

I am attempting to display a series of images in a random order. However, I do not want any single item to repeat until all items have been shown, so instead of selecting a

相关标签:
5条回答
  • 2020-12-01 11:56

    You can also use the common JavaScript Array randomize sorter, also commented here and here:

    $('<my selector>').sort( function(){ return ( Math.round( Math.random() ) - 0.5 ) } );
    
    0 讨论(0)
  • 2020-12-01 12:06

    After much exploration, I decided to take the fisher-yates algorithm and apply it with jquery without requiring cloning, etc.

    $('#tout4 img.img_lg').shuffle();
    
    /*
    * Shuffle jQuery array of elements - see Fisher-Yates algorithm
    */
    jQuery.fn.shuffle = function () {
        var j;
        for (var i = 0; i < this.length; i++) {
            j = Math.floor(Math.random() * this.length);
            $(this[i]).before($(this[j]));
        }
        return this;
    };
    
    0 讨论(0)
  • 2020-12-01 12:13

    Short version for jQuery:

    $('#tout4>').map(function(i,t) {
         var s=$(t).siblings();
         s.eq(Math.round(s.length*Math.random())).after(t)
    })
    
    0 讨论(0)
  • 2020-12-01 12:14

    Ended up using this (thanks Blair!) -

    /**
     * jQuery Shuffle (/web/20120307220753/http://mktgdept.com/jquery-shuffle)
     * A jQuery plugin for shuffling a set of elements
     *
     * v0.0.1 - 13 November 2009
     *
     * Copyright (c) 2009 Chad Smith (/web/20120307220753/http://twitter.com/chadsmith)
     * Dual licensed under the MIT and GPL licenses.
     * /web/20120307220753/http://www.opensource.org/licenses/mit-license.php
     * /web/20120307220753/http://www.opensource.org/licenses/gpl-license.php
     *
     * Shuffle elements using: $(selector).shuffle() or $.shuffle(selector)
     *
     **/
    (function(d){d.fn.shuffle=function(c){c=[];return this.each(function(){c.push(d(this).clone(true))}).each(function(a,b){d(b).replaceWith(c[a=Math.floor(Math.random()*c.length)]);c.splice(a,1)})};d.shuffle=function(a){return d(a).shuffle()}})(jQuery);
    

    So then the only additions that need to be made to the above code are to include the script, and call the shuffle function:

    <script type="text/javascript" src="js/jquery-shuffle.js"></script>
    $('#tout4 img.img_lg').shuffle();
    
    0 讨论(0)
  • 2020-12-01 12:14
    <!DOCTYPE html>
    <html>
    <body>
    
    <p id="demo">Click the button to sort the array.</p>
    
    <button onclick="myFunction()">Try it</button>
    
    <script>
      function myFunction()
      {
        var points = [40,100,1,5,25,10];
        points.sort(function(a,b){return (Math.random()-0.5)});
        var x=document.getElementById("demo");
        x.innerHTML=points;
      }
    </script>
    
    </body>
    </html>
    

    Explanation: normally you have "return (a-b)" yielding a positive number for ascending sort order; or you have "return (b-a)" yielding a negative number for descending sort order.

    Here we use Math.random()-0.5 which gives in half of the cases a positive number and in half of the cases a negative number. Thus sorting of pairs is either ascending or descending, yielding a random distribution of the array elements.

    0 讨论(0)
提交回复
热议问题