Ротация содержимого Javascript в процентах
-
06-07-2019 - |
Вопрос
Мне нужно иметь возможность вращать содержимое внутри элемента-заполнителя, основываясь на процентах, подобных этому. Поворот будет происходить при загрузке страницы. Поэтому каждый раз, когда пользователь перезагружает страницу, у него есть шансы увидеть контент 1, 2 или 3 в заполнителе контента:
Содержание 1 = показывать 50% времени
Содержание 2 = показать 25% времени
Содержание 3 = показывать 25% времени
Я предпочитаю Javascript, но если есть более простой способ сделать это в ASP.NET на внешнем шаблоне, а не на коде, это также приемлемо. Если у вас есть решение или вы можете указать мне на существующий сценарий, я был бы признателен. Спасибо!
Решение
На самом деле не нужно ничего умножать / floor / ceil: функция Math.random ()
дает значение, которое больше или равно 0 и меньше 1.
Следующий код будет немного проще поддерживать, если вы измените количество опций или процент вероятности.
var contentId, random = Math.random();
if (random < 0.5) {
// option 1: chance 0.0–0.499...
contentId = 0;
} else (random < 0.75) {
// option 2: chance 0.50—0.7499...
contentId = 1;
} else {
// option 3: chance 0.75–0.99...
contentId = 2;
}
loadContent(contentId);
Другие советы
Для случайной части скрипта вам просто нужно поиграть с Math.random Что-то уродливое и закодированное будет выглядеть так:
var contentToShow = -1;
var NB_MAX = 4;
var myRand = Math.floor(Math.random()*NB_MAX);
if(myRand<1) contentToShow = 1;
else if (myRand<2) contentToShow = 2;
else contentToShow = 3;
Тогда вам просто нужно загрузить контент с помощью ajax.
Пример в jQuery может выглядеть следующим образом:
var myPlaceHolder = $("#myPlaceHolder")
$.myPlaceHolder.load("/mycontents/mycontent_" + contentToShow + ".asp");
Но использование ajax-запроса при загрузке страницы - не самый лучший способ. (2 запроса к серверу вместо 1, если случайный контент обрабатывается сервером)
Вот быстрый взлом, возможно, есть лучший способ.
var randomnumber=Math.floor(Math.random()*4)
if((num==0) || (num==1)) {
//show hidden div or document.write (50% probability)
} else if (num==2) {
//show hidden div or document.write (25% probability)
} else {
//show hidden div or document.write (25% probability)
}