Как то так
<!DOCTYPE html>
<html lang="ru">
<head>
<title>Блоки</title>
<style>
.limitation,
.fact_block {
position: relative;
width: 300px;
height: 200px;
border: 1px solid blue;
display: none;
}
.limitation {
border: 1px solid red;
}
.show {
display: block;
}
</style>
</head>
<body>
<div id="f1" class="fact_block">Block 1</div>
<div id="f2" class="fact_block">Block 2</div>
<div id="f3" class="fact_block">Block 3</div>
<div id="f4" class="fact_block">Block 4</div>
<div id="f5" class="fact_block">Block 5</div>
<div id="f6" class="fact_block">Block 6</div>
<div id="f7" class="fact_block">Block 7</div>
<div id="f8" class="fact_block">Block 8</div>
<div id="f9" class="fact_block">Block 9</div>
<div id="Limit" class="limitation">Limit Block</div>
<script>
function showRandomBlock() {
const INTERVAL = 15 * 1000; // 15s; 10 * 60 * 60 * 1000 = 10h
const KEY_SHOWNBLOCKS = 'key-shown-blocks';
const KEY_LASTTIMESHOW = 'last-tyme-show';
const getShownBlocks = () => {
let s = window.localStorage.getItem(KEY_SHOWNBLOCKS);
return s ? JSON.parse(s) : [];
};
const addShownBlocks = (idblock) => {
const blocks = getShownBlocks();
blocks.push(idblock);
window.localStorage.setItem(
KEY_SHOWNBLOCKS,
JSON.stringify(blocks)
);
};
const getLastTime = () => {
let s = window.localStorage.getItem(KEY_LASTTIMESHOW);
return s ? Number(s) : 0;
};
const setLastTime = () => {
const time = Date.now();
window.localStorage.setItem(KEY_LASTTIMESHOW, time);
};
const showBlock = (id) => {
document.getElementById(id).classList.add('show');
};
const showLimitationBlock = () => {
const idlimit = document.querySelector('.limitation').id
showBlock(idlimit);
};
const getRandomInt = (min, max) => {
return Math.floor(Math.random() * (max - min) + min);
};
const showNewBlock = () => {
const factBlocks = [
...document.querySelectorAll(
'.fact_block:not(.final_block)'
),
].map((block) => block.id);
const shownBlocks = getShownBlocks();
const availableBlocks = factBlocks.filter(
(id) => !shownBlocks.includes(id)
);
if (availableBlocks.length) {
const index = getRandomInt(0, availableBlocks.length);
const idblock = availableBlocks[index];
showBlock(idblock);
addShownBlocks(idblock);
setLastTime();
}
};
const lastTime = getLastTime();
if (lastTime + INTERVAL < Date.now()) {
showNewBlock();
} else {
showLimitationBlock();
}
}
showRandomBlock();
</script>
</body>
</html>
|
voraa,
Спасибо это не совсем то, но думаю что из этого я под себя подгоню |
Что то не очень получается
Ну вот если кто то сможет вникнуть https://youtu.be/J6Tzqn9GrX0 видео 2 минуты И вот не посредственно если кому то будет интересно посмотреть что за код https://rakipov.ru/web/fact/ |
Сергей Ракипов, то что я скидывал в своём сообщении - тоже не то?
|
Цитата:
|
Не получается.
Есть блоки с фактами, я хочу показывать их раз в сутки. Факты должны показываться в случайно порядке и два раза один и тот же факт показывать не нужно. Когда человеку показали один факт у него одни сутки запрет на показ случайных фактов. Но то что ему уже было показано прятать от него не нужно. А просто сказать ему что типа пока не покажу. Вот тут факты class="fact_block" Вот тут блок с ограничением <div class="limitation"> Достигнуто суточное ограничение </div> НО не прятать от него последний факт, просто прекратить случайного показа. |
Вложений: 1
вот показан показан факт и показано что идет суточное ограничение
|
Техническое задание для скрипта показа случайного блока:
1. Описание задачи: Необходимо разработать скрипт, который будет отображать случайный блок из массива блоков на веб-странице. Каждый блок имеет класс "fact_block". При показе блока также должен быть сохранен его ID в localStorage. Если блок имеет класс "fact_picture_mini_curr", его ID также должен быть сохранен в отдельный массив "fact_picture_mini_curr" в localStorage. 2. Входные данные: - Массив блоков с классом "fact_block" - localStorage для сохранения показанных блоков и блоков с классом "fact_picture_mini_curr" 3. Выходные данные: - Отображение случайного блока на веб-странице - Сохранение ID показанного блока в localStorage - Сохранение ID блока с классом "fact_picture_mini_curr" в отдельный массив в localStorage 4. Описание функций: - getShownBlocks(): функция для получения уже показанных блоков из localStorage. Если такие блоки есть, возвращает массив ID блоков. Если таких блоков нет, возвращает пустой массив. - saveShownBlock(blockId): функция для сохранения ID показанного блока. Получает ID блока и добавляет его в массив показанных блоков в localStorage. Если блок имеет класс "fact_picture_mini_curr", также сохраняет его ID в отдельный массив в localStorage. - removeShowClass(): функция для удаления класса "show" у всех блоков. Проходит по массиву блоков и удаляет класс "show" у каждого блока. - showRandomBlock(): функция для выбора и показа случайного блока. Получает массив показанных блоков и фильтрует массив блоков, оставляя только доступные блоки (которые еще не показаны и имеют ID, содержащий "fact_"). Если доступных блоков нет, показывает последний блок с ID "full_collection". Иначе, выбирает случайный блок из доступных, добавляет ему класс "show" и сохраняет его ID с помощью функции saveShownBlock(). Если у выбранного блока есть соответствующий блок с ID, начинающимся с "mini_", добавляет ему класс "fact_picture_mini_curr" и сохраняет его ID в отдельный массив в localStorage. 5. Шаги выполнения: - Получить все блоки с классом "fact_block" и сохранить их в массив "blocks". - Вызвать функцию removeShowClass() для удаления класса "show" у всех блоков. - Вызвать функцию showRandomBlock() для выбора и показа случайного блока. - Проверить наличие ID блоков с классом "fact_picture_mini_curr" в массиве "factPictureMiniCurrIds" из localStorage. Если такие ID есть, добавить класс "fact_picture_mini_curr" этим блокам. 6. Требования к localStorage: - Ключ "shownBlocks" для хранения массива ID показанных блоков. - Ключ "fact_picture_mini_curr" для хранения массива ID блоков с классом "fact_picture_mini_curr". 7. Тестирование: - Убедиться, что случайный блок отображается на веб-странице при каждом обновлении страницы. - Убедиться, что ID показанного блока сохраняется в localStorage. - Убедиться, что блоки с классом "fact_picture_mini_curr" также сохраняются и отображаются правильно. 8. Ограничение показа случайного блока: - Предусмотреть ограничение показа случайного блока один раз в 10 минут. - Проверять время последнего показа случайного блока в localStorage. - Если время последнего показа блока меньше 10 минут назад, не показывать новый случайный блок и продолжать отображать предыдущий блок. - Если время последнего показа блока больше или равно 10 минут назад, показывать новый случайный блок и обновлять время последнего показа в localStorage. 9. Дополнительные функции: - getLastShownTime(): функция для получения времени последнего показа случайного блока из localStorage. Возвращает время в миллисекундах или 0, если время не сохранено. - saveLastShownTime(): функция |
Вряд ли, кто такое будет делать. Тем более, что иногда написана чушь.
Типа Цитата:
Иногда просто непонятно. Цитата:
Допустим мы как то нашли такой блок и присвоили ему класс fact_picture_mini_curr Читаем далее Цитата:
Ну еще не понятно. Есть блоки с классом fact_block. Некоторые из них имеют id типа "fact_0004", а некоторые "curr_0004". С последними как быть? Вы пишете только про id имеющий "fact_" Вообще можно было бы ограничиться п.8 Только четче его описать. Там непонятно, какую картинку показывать вместе с блоком. Что быдет после показа "full_collection". Всегда, сколько бы дальше человек не заходил показывать только это? (Странное решение) А как писать, в какие массивы, какими функциями - это дело программера |
voraa,
понимаю это, я пошел другим путем |
| Часовой пояс GMT +3, время: 03:40. |