Javascript 实现洗牌图像功能

Javascript 实现洗牌图像功能,javascript,random,Javascript,Random,我在寻找一些关于如何启动洗牌图像功能的建议,所以我在一个div框中有6个图像,我想要一个允许它们洗牌的功能,我应该如何启动??我应该把图像也放在一个单独的div中吗?感谢您的帮助或示例代码,我已经为您实现了类似的功能,因此您可能会从中得到一些提示。只要在我的.js文件中搜索“shuffle”,你就会知道我是如何做到的。根据记忆,我最初将所有图像放在一个div中,然后使用shuffle函数移动它们。我想后来我开始洗牌一个URL数组,而不是稍后生成图像元素 我使用了Ca Phun-Ung的“Shuf

我在寻找一些关于如何启动洗牌图像功能的建议,所以我在一个div框中有6个图像,我想要一个允许它们洗牌的功能,我应该如何启动??我应该把图像也放在一个单独的div中吗?感谢您的帮助或示例代码,我已经为您实现了类似的功能,因此您可能会从中得到一些提示。只要在我的.js文件中搜索“shuffle”,你就会知道我是如何做到的。根据记忆,我最初将所有图像放在一个div中,然后使用shuffle函数移动它们。我想后来我开始洗牌一个URL数组,而不是稍后生成图像元素

我使用了Ca Phun-Ung的“Shuffle”JQuery插件(尽管我认为我重新编写了自己的版本,以便更好地理解其内部工作原理)。你也可以从中找到一些有用的信息。看

好的,我明白了

var divs = $('selector to get all divs'); // This could be $('img');

function shuffle(divs, iterations) {
   var size = divs.size();

   for(var i = iterations; i > 0; i--) {
      // Pick two divs at random
      var div1 = divs[Math.floor(Math.random() * size)],
          div2 = divs[Math.floor(Math.random() * size)];

      // Ensure they are different divs
      if(div1.is(div2)) {
         continue;
      }

      // Swap the two divs
      div1.clone().insertAfter(div2);
      div2.detach().insertAfter(div1);
      div1.detach();
   }
};

shuffle(divs, 1000);
虽然如果先放置divs.hide(),然后放置divs.show(),这样可能会更好,这样您就不会看到颠簸。然而,也许这就是你想要的?可能您希望在那里有一个延迟,并使用jQuery的animate函数使其更美观。这个特定的解决方案要求img在DOM中的位置决定位置。更复杂的解决方案是在循环期间交换css位置

var savedLeft = div1.css("left"),
    savedTop = div1.css("top");

div1.css("left", div2.css("left"));
div1.css("top", div2.css("top"));
div2.css("left", savedLeft);
div2.css("top", savedTop); 

实际上,我还没有尝试过这个方法,但从这里可以看到:p下面是一个jQuery解决方案。您可以使用vanilla JavaScript获得相同的结果,但它只需要几行额外的代码

<div id="deck">
  <div><img src="" /></div>
  <div><img src="" /></div>
  .
  .
  .
</div>

.
.
.
//Fisher–Yates Shuffle(Knuth变体)
//要洗牌由n个元素组成的数组(索引0..n-1),请执行以下操作:
//对于从n-1到1 do的i

//j Salman A,谢谢你,它工作得很好,但是我对代码做了一些更改,不知道如何更改洗牌功能,因为它不再工作了,你能帮我吗?
// Fisher–Yates Shuffle (Knuth variant)
// To shuffle an array a of n elements (indices 0..n-1):
//   for i from n - 1 downto 1 do
//        j <- random integer with 0 <= j <= i
//        exchange a[j] and a[i]

// jQuery specific:
// 1) remove elements from DOM and convert them into a native JavaScript array
// 2) apply algorithm
// 3) inject the array back to DOM

var a = $("#deck > div").remove().toArray();
for (var i = a.length - 1; i >= 1; i--) {
    var j = Math.floor(Math.random() * (i + 1));
    var bi = a[i];
    var bj = a[j];
    a[i] = bj;
    a[j] = bi;
}
$("#deck").append(a);