我正在寻找关于如何启动随机图像功能的一些建议,所以我在div框中有6个图像atm并且我想要一个允许它们随机播放的功能,我该如何开始?我应该将图像放在一个单独的div中吗?感谢任何帮助或示例代码,谢谢
答案 0 :(得分:3)
以下是jQuery解决方案。您可以使用vanilla JavaScript获得相同的结果,但它需要额外的代码行。
<div id="deck">
<div><img src="" /></div>
<div><img src="" /></div>
.
.
.
</div>
// 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);
答案 1 :(得分:0)
我为a memory card game实现了类似的功能,所以你可以从中得到一些提示。只需在我的.js文件中搜索“shuffle”资源,你就应该知道我是如何做到的。从记忆中,我最初将所有图像放在div中,然后使用shuffle函数移动它们。我想以后我开始改组一系列URL,然后再生成图像元素。
我使用了Ca-Phun Ung的'Shuffle'JQuery插件(虽然我认为我重新编写了自己的版本以更好地理解其内部工作原理)。您也可以找到一些有用的信息。见JQuery Shuffle
答案 2 :(得分:0)
好的,我知道了!
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的动画功能来使它变得有趣。这个特殊的解决方案要求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