Рандомизация содержимого при перезагрузке страницы без зацикливания

#javascript #jquery #arrays

#javascript #jquery #массивы

Вопрос:

У меня есть сайт, на котором вы обновляете страницу, и содержимое внутри блока (div) будет меняться (рандомизироваться) при загрузке. Это не просто 1 поле, а будет много других. Мне удалось рандомизировать содержимое в соответствии с http://codepen.io/anon/pen/GjYNLo?editors=1011 но это дублирование вместо зацикливания и применения разных массивов к каждому основному div. Я бы хотел, чтобы в каждом окне отображался один из массивов, при обновлении страницы его содержимое будет перемещаться и отображаться где-то в другом месте.

 <div class="item small has-text tertiary">
  <div class="inner">
    <a href="" class="">
      <div class="text">
        <div class="number">
          <span></span>
        </div>
        <div class="sub-title">
          <span></span>
        </div>
      </div>
    </a>
  </div>
</div>
<br>
<div class="item small has-text tertiary">
  <div class="inner">
    <a href="" class="">
      <div class="text">
        <div class="number">
          <span></span>
        </div>
        <div class="sub-title">
          <span></span>
        </div>
      </div>
    </a>
  </div>
</div>


var text_boxes = [{
  number: "2",
  sub_title: "Marketers",
}, {
  number: "75%",
  sub_title: "Average sales increase",
}, {
  number: "4",
  sub_title: "Developers",
}, {
  number: "6",
  sub_title: "Full Time",
}, {
  number: "45",
  sub_title: "Sites Launched",
}, {
  number: "2",
  sub_title: "Marketers",
}];

var arr3 = [];

$.each(text_boxes,
  function(i, el) {
    setTimeout(function() {
      arr3.push(el);
      if (arr3.length === text_boxes.length) {
        $(".item.has-text", function(ii) {
          $(this).find('.number span').text(arr3[i].number);
          $(this).find('.sub-title span').text(arr3[i].sub_title);
        });
      }
    }, 1   Math.floor(Math.random() * 5));
  });
  

Ответ №1:

Вы можете получить случайный уникальный контент, подобный этому:

 var text_boxes = [{number: "2",sub_title: "Marketers",}, {number: "75%",sub_title: "Average sales increase",}, {number: "4",sub_title: "Developers",}, {number: "6",sub_title: "Full Time",}, {number: "45",sub_title: "Sites Launched",}, {number: "2",sub_title: "Marketers",}],
    len = text_boxes.length,
    uniqueRandoms = [],
    getRandomIndex = function () {
      if (!uniqueRandoms.length) {
        for (var i = 0; i < len; i  ) {
          uniqueRandoms.push(i);
        }
      }
      var index = Math.floor(Math.random() * uniqueRandoms.length),
          val = uniqueRandoms[index];
      uniqueRandoms.splice(index, 1);
      return val;
    };

$('.item.has-text').each(function () {
  var index = getRandomIndex();
  $(this).find('.number span').text(text_boxes[index].number);
  $(this).find('.sub-title span').text(text_boxes[index].sub_title);
});  
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="item small has-text tertiary">
  <div class="inner">
    <a href="" class="">
      <div class="text">
        <div class="number">
          <span></span>
        </div>
        <div class="sub-title">
          <span></span>
        </div>
      </div>
    </a>
  </div>
</div>
<br>
<div class="item small has-text tertiary">
  <div class="'">
    <a href="" class="">
      <div class="text">
        <div class="number">
          <span></span>
        </div>
        <div class="sub-title">
          <span></span>
        </div>
      </div>
    </a>
  </div>
</div>