jquery将元素移动到随机顺序中

mhe*_*ers 8 javascript random jquery gallery

我试图以随机顺序显示一系列图像.但是,我不希望任何单个项目重复,直到所有项目都被显示,所以我不想从数组中选择一个随机图像,而是取整个数组,随机化它,然后从第一个到第一个顺序选择最后一个元素 这是我的代码:

HTML:

<div id="tout4"
<img src="images/gallery01.jpg" class="img_lg"/>
<img src="images/gallery02.jpg" class="img_lg"/>
<img src="images/gallery03.jpg" class="img_lg"/>
</div>
Run Code Online (Sandbox Code Playgroud)

和javascript,它当前按顺序选择和显示项目:

var galleryLength = $('#tout4 img.img_lg').length;
var currentGallery = 0;
setInterval(cycleGallery, 5000);


function cycleGallery(){

    $('#tout4 img.img_lg').eq(currentGallery).fadeOut(300);

    if (currentGallery < (galleryLength-1)){
        currentGallery++;
    } else {
        currentGallery = 0;
    }

    $('#tout4 img.img_lg').eq(currentGallery).fadeIn(300);
}
Run Code Online (Sandbox Code Playgroud)

那么如何重新排列图像的实际顺序,而不仅仅是它们的选择顺序?

cha*_*ele 14

经过深入探索后,我决定采用fisher-yates算法并将其应用于jquery而无需克隆等.

$('#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;
};
Run Code Online (Sandbox Code Playgroud)


fgu*_*len 8

您还可以使用常见的JavaScript数组随机分类器,此处此处也进行了注释:

$('<my selector>').sort( function(){ return ( Math.round( Math.random() ) - 0.5 ) } );
Run Code Online (Sandbox Code Playgroud)


mhe*_*ers 5

结束使用此(感谢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);
Run Code Online (Sandbox Code Playgroud)

那么需要对上面的代码进行的唯一补充是包含脚本,并调用shuffle函数:

<script type="text/javascript" src="js/jquery-shuffle.js"></script>
$('#tout4 img.img_lg').shuffle();
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

13674 次

最近记录:

6 年,3 月 前