|
|
Модератор форума: JonMagon |
Сообщество uCoz Вебмастеру JavaScript, Flash и прочие технологии Скрипт рандомного вывода текста без повторов |
Скрипт рандомного вывода текста без повторов |
Добрый день! Есть скрипт, от которого требуется выводить текст, главное, чтобы он выводился случайным образом, но не повторялся.
Помогите собрать работоспособный скрипт, вот что есть: Код 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> //вывод текста |
Нужно довести до ума часть скрипта, в которой закомментирован вызов функции.
Если её раскомментировать, то функция начнет грузить стек. Код 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(); |
Немного не так. Данные все равно чаще повторяются, получается часть фактов долго не показывается. Да и таймер ненужен, необходимо при обновлении страницы. Ключевой фактор, данные не должны повторяться.
Мб, есть еще варианты? |
Пробовал вот такой код, который должен запоминать показанный ранее результат в куки, но и он все равно, повторяет данные.
Код <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--> |
Цитата Об этом сразу писать нужно было. Храните массив уже показанных фраз в куках(cookie) или в локальном хранилище(localStorage). Я выше выкладывал код с куки можете сказать, в чем может быть причина, что не происходит запоминание? Или подсказать, лучше на примере, как используется локальное хранилище или как это реализуется? |
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 часа) с момента записи */ |
| |||
| |||