【问题标题】:jQuery - Shuffle between imagesjQuery - 图像之间的随机播放
【发布时间】:2017-04-18 21:03:32
【问题描述】:

我正在尝试在模板中的 5 张图片之间制作shuffle。目前我所拥有的是我在 5 张图片 之间shuffle 并显示其中一张随机

我的 HTML

<div class="lightbulb" id="bulb1">
  <img src="image-1.png" class="none" />
</div>
<div class="lightbulb" id="bulb2">
  <img src="image-2.png" class="none" />
</div>
<div class="lightbulb" id="bulb3">
  <img src="image-3.png" class="none" />
</div>
<div class="lightbulb" id="bulb4">
  <img src="image-4.png" class="none" />
</div>
<div class="lightbulb" id="bulb5">
  <img src="image-5.png" class="none" />
</div>

我的 CSS

.none {display:none;}

我的 JS

  $(document).ready(function () {
    get_random_bulb();
    function get_random_bulb() {
        var a = (parseInt(Math.random() * 4));
        $(".lightbulb img.block").removeClass("block").addClass("none");
        $(".lightbulb:eq(" + a + ") img").removeClass("none").addClass("block");
    }
    var rand = Math.round(Math.random() * (3500 - 500)) + 500;
    setInterval(function () {
        get_random_bulb();
    }, rand);
  });

这很好用,因为它随机选择一张图像并显示它,但我想要一个更有风格和更好的随机播放。如下图:

显示最后 3 张图片的位置,当随机选择新图片时,它会移到列表的末尾,而第一个会消失。

我希望我已经解释了我的意思

【问题讨论】:

  • 所以你想显示三张图片,然后在删除第一个元素时将当前未显示的随机选择的图像添加到列表末尾?

标签: javascript jquery html css image


【解决方案1】:

我想出了这个:https://jsfiddle.net/mehmetb/brbj8db6/

HTML

<div class="lightbulb" id="bulb1">
  <img class="shuffle-image" />
</div>

<div class="lightbulb" id="bulb2">
  <img class="shuffle-image" />
</div>

<div class="lightbulb" id="bulb3">
  <img class="shuffle-image" />
</div>

CSS

.shuffle-image {
  border-radius: 50%;
}

JavaScript

var shuffleList = [
  'https://dummyimage.com/90x90/ccc/000000.jpg&text=1',
  'https://dummyimage.com/90x90/ccc/000000.jpg&text=2',
  'https://dummyimage.com/90x90/ccc/000000.jpg&text=3',
  'https://dummyimage.com/90x90/ccc/000000.jpg&text=4',
  'https://dummyimage.com/90x90/ccc/000000.jpg&text=5'
];

var $lightBulbs = $(".lightbulb");

function shuffle() {
  var rand = Math.round(Math.random() * (3500 - 500)) + 500;

  for(var i=0;i<$lightBulbs.length;++i) {
    var $img = $lightBulbs.eq(i).children('img');

    $img.attr('src', shuffleList[i]);
  }

  //Put the first array element to the last
  shuffleList.push(shuffleList.shift());

 //Each call will set a random delay between shuffles
 setTimeout(function() {
   shuffle();
 }, rand);
}

shuffle();

【讨论】:

  • 谢谢@Mehmet,但这和我之前做的一样,我怎么能有另外两个呢?如您所见,在我的 shuffle gif 图像中,我展示了 3 张图像,其中最后一张图像是新的随机选择图像,而第一张图像就消失了
  • 请再看看小提琴(和答案):)
  • 感谢@Mehmet,完美运行 :)
  • 我刚刚看到的只有一个问题。在您的示例中,您有 5 张图像(1、2、3、4、5),当它随机播放时,它实际上并没有在(1、2、3、4、5)之间随机播放并选择一个数字显示下一个图像,它基本上按照顺序(1、2、3、4、5、1、2、3、4、5等)而不是1、4、2、5、3、1、4、5、3, 4, 1. 我该如何解决?
  • 像@Mehmet 的魅力一样工作 :) 非常感谢 :)