对 div 进行分组和排序

group and sort divs

我在一个 jquery 滑块中有一系列 6 张幻灯片。 (http://www.slidesjs.com/)

从技术上讲,这些是 6 张单独的幻灯片,但幻灯片是成对的

Group 1 = Slides 1 + 2
Group 2 = Slides 3 + 4
Group 3 = Slides 5 + 6

我正在尝试随机排列第 1、2 和 3 组的顺序,但幻灯片必须在这些组中保持正确的顺序。

当前标记为

 <div id="slides">
    <div class="slide">
    </div>
    <div class="slide">
    </div>
    <div class="slide">
    </div>
    <div class="slide">
    </div>
    <div class="slide">
    </div>
     <div class="slide">
    </div>
 </div>

我可以随机化所有幻灯片,但这可能会导致幻灯片混乱且无法配对。

这可以用数据属性来完成吗?我不确定我可以使用什么方法来做到这一点。

如果您查看该站点上的 documentation,有一个选项允许您指定起始幻灯片,这样您就可以随机化起始组,但您仍然必须从那时起保持顺序。

要做到这一点,您可以这样做:

function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

$(function(){
    var slidesPerGroup = 2;

    $("#slides").slidesjs({
        start: (getRandomInt(1, 3) * slidesPerGroup) - 1
    });
});

不漂亮,嗯...只是一个可能的方式(http://jsfiddle.net/bukart/c0fjq19p/1/)

var order = [[1,2],[3,4],[5,6]];

$(function() {
    var neworder = [], oldorder = [];

    oldorder = order; // better you clone here ;)

    while (oldorder.length) {
        var n = Math.floor(Math.random() * oldorder.length);
        neworder.push(oldorder[n]);
        oldorder.splice(n, 1);
    }

    var $slideBox = $('#slides');
    var $slides = $('.slide', $slideBox);

    $slides.detach();

    var $slidesArr = [];
    $slides.each(function() {
        $slidesArr.push($(this));
    });
    for (i = 0; i < neworder.length; i++) {
        for (j = 0; j < neworder[i].length; j++) {
            $slideBox.append($slidesArr[neworder[i][j]-1]);
        }
    }
});

您需要创建自己的导航控件才能完成这项工作。查看 this page 上的源代码,了解如何完成此操作的示例。它看起来像这样:

<div class="controls">
    <button class="prev">Prev</button>
    <button class="next">Next</button>
</div>

<script>
    function selectSlide() {
        var slides = [1, 3, 5]; // This function picks a random number from this array.
        var randomIndex = Math.floor(Math.random() * slides.length);
        return slides[randomIndex];
    }
    $(function() {
        $('#slides').slidesjs({
            width: 940,
            height: 528,
            navigation: {active: false},
        });
        var sjs = $('#slides').data('plugin_slidesjs'); // you can issue commands to the slideshow through this variable
        $('.controls .next').click(function(){
            var currentPage = sjs.data.current;
            console.log("Current page:", currentPage);
            switch (currentPage) {
                case 0:
                case 2:
                case 3:
                    console.log("Going to next slide");
                    sjs.next();
                    break;
                default:
                    console.log("Going to a random slide");
                    sjs.goto(selectSlide());
                    break;
            }
        });
    });
</script>