Как то так
<!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, время: 07:04. |