• Страница 1 из 1
  • 1
Модератор форума: JonMagon  
Сообщество uCoz » Вебмастеру » JavaScript, Flash и прочие технологии » Скрипт рандомного вывода текста без повторов
Скрипт рандомного вывода текста без повторов
ZlatyBoyar
Сообщений: 4
Репутация: 0

Сообщение # 1 | 13:02:12
Добрый день! Есть скрипт, от которого требуется выводить текст, главное, чтобы он выводился случайным образом, но не повторялся.

Помогите собрать работоспособный скрипт, вот что есть:

Код
var RandomFacts = ['Fact 1', 'Fact 2', 'Fact 3', 'Fact 4'];
var FactResultOld;
var FactResult = Math.floor(Math.random() * RandomFacts.length);
if (FactResultOld == FactResult) {
     if (FactResult < (RandomFacts.length - 1)) {
         FactResult = FactResult + 1;
     } else if (FactResult == 0) {
         FactResult = FactResult + 1;
     } else {
         FactResult = FactResult - 1;
     }
     FactResultOld = FactResult;
     $('<span>' + RandomFacts [FactResult]+ '</span>').appendTo('.RandomFactModule');
} else {
     FactResultOld = FactResult;
     $('<span>' + RandomFacts [FactResult]+ '</span>').appendTo('.RandomFactModule');
}


Код
<div class="RandomFactModule"></div> //вывод текста
Nexxus
Сообщений: 289
Репутация: 66

Сообщение # 2 | 14:14:50
Нужно довести до ума часть скрипта, в которой закомментирован вызов функции.
Если её раскомментировать, то функция начнет грузить стек.
Код
var facts=['Fact 1','Fact 2','Fact 3','Fact 4','Fact 5','Fact 6','Fact 7'], was_publik_facts=[];
function rand_fact(){
  if(facts.length==was_publik_facts.length) was_publik_facts=[];
  var fact=facts[Math.floor(Math.random()*((facts.length-was_publik_facts.length)-1-0+1))+0],bool=true;
  for(var f=0;f<was_publik_facts.length;f++){if(was_publik_facts[f]==fact){bool=false;break;};};
  if(bool){
   was_publik_facts.push(fact);
   $(".RandomFactModule").text(fact);
   setTimeout(rand_fact,2000);
  }else{
   console.log(was_publik_facts);
   console.log(fact);
   //rand_fact();
  };
};
rand_fact();
ZlatyBoyar
Сообщений: 4
Репутация: 0

Сообщение # 3 | 15:41:10
Немного не так. Данные все равно чаще повторяются, получается часть фактов долго не показывается. Да и таймер ненужен, необходимо при обновлении страницы. Ключевой фактор, данные не должны повторяться.
Мб, есть еще варианты?
Ferro7
Сообщений: 285
Репутация: 230

Сообщение # 4 | 19:33:49
Цитата ZlatyBoyar ()
Мб, есть еще варианты?

Например, в куках хранить индекс уже показанного элемента массива. Дабы потом его не показывать.

Вы полюбили меня. Здесь я. (с)
Сообщение отредактировал Ferro7 - Понедельник, 21 Апр 2014, 20:54:56
ZlatyBoyar
Сообщений: 4
Репутация: 0

Сообщение # 5 | 10:42:38
Пробовал вот такой код, который должен запоминать показанный ранее результат в куки, но и он все равно, повторяет данные.


Код
<script type="text/javascript">

// Единственная строка в которой нужно делать изменения. Тут указываем используемое количество дивов, в нашем случае - это 3.
NumberOfDivsToRandomDisplay = 11;

var CookieName = 'DivRamdomValueCookie';
function DisplayRandomDiv() {
var r = Math.ceil(Math.random() * NumberOfDivsToRandomDisplay);
if(NumberOfDivsToRandomDisplay > 1) {
  var ck = 0;
  var cookiebegin = document.cookie.indexOf(CookieName + "=");
  if(cookiebegin > -1) {
  cookiebegin += 1 + CookieName.length;
  cookieend = document.cookie.indexOf(";",cookiebegin);
  if(cookieend < cookiebegin) { cookieend = document.cookie.length; }
  ck = parseInt(document.cookie.substring(cookiebegin,cookieend));
  }
  while(r == ck) { r = Math.ceil(Math.random() * NumberOfDivsToRandomDisplay); }
  document.cookie = CookieName + "=" + r;
  }
for( var i=1; i<=NumberOfDivsToRandomDisplay; i++) {
  document.getElementById("randomdiv"+i).style.display='none';
  }
document.getElementById("randomdiv"+r).style.display='block';
}
DisplayRandomDiv();
</script>



Код
<div id="randomdiv1" style="display: none;">
1<!--Сюда можно поместить абсолютно любой контент-->
</div><!--/randomdiv1-->

<div id="randomdiv2" style="display: none;">
2<!--Сюда можно поместить абсолютно любой контент-->
</div><!--/randomdiv1-->

<div id="randomdiv3" style="display: none;">
3<!--Сюда можно поместить абсолютно любой контент-->
</div><!--/randomdiv1-->
Nexxus
Сообщений: 289
Репутация: 66

Сообщение # 6 | 19:27:07
Цитата ZlatyBoyar ()
Да и таймер ненужен, необходимо при обновлении страницы.

Об этом сразу писать нужно было.
Храните массив уже показанных фраз в куках(cookie) или в локальном хранилище(localStorage).
ZlatyBoyar
Сообщений: 4
Репутация: 0

Сообщение # 7 | 10:20:08

Цитата
Об этом сразу писать нужно было.
Храните массив уже показанных фраз в куках(cookie) или в локальном хранилище(localStorage).
Да, думаю нужно было подробнее расписать, в любом случае спасибо, что откликнулись.

Я выше выкладывал код с куки можете сказать, в чем может быть причина, что не происходит запоминание?
Или подсказать, лучше на примере, как используется локальное хранилище или как это реализуется?
Nexxus
Сообщений: 289
Репутация: 66

Сообщение # 8 | 13:52:52
ZlatyBoyar, вот функция для работы с cookies.
Код
function cookie(name,value,days){
  if(value){
   if(days){
    var date=new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires="; expires="+date.toGMTString();
   }else var expires="";
    document.cookie=name+"="+value+expires+"; path=/";
  }else{
   var nameEQ=name+"=";
   var ca=document.cookie.split(';');
   for(var i=0;i<ca.length;i++){
    var c=ca[i];
    while(c.charAt(0)==' ') c=c.substring(1,c.length);
    if(c.indexOf(nameEQ)==0) return c.substring(nameEQ.length,c.length);
   };
   return null;
  };
};
/*
  cookie("name") - получить значение куки name
  cookie("name","value") - записать/перезаписать значение куки name. Кука будет удалена по завершению сессии(закрытию браузера)
  cookie("name","value",1) - записать/перезаписать значение куки name. Кука будет удалена через 1 день(24 часа) с момента записи
*/
Сообщество uCoz » Вебмастеру » JavaScript, Flash и прочие технологии » Скрипт рандомного вывода текста без повторов
  • Страница 1 из 1
  • 1
Поиск: