Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Скрипт "картинка-ссылка" на каждый день недели (https://javascript.ru/forum/dom-window/84633-skript-kartinka-ssylka-na-kazhdyjj-den-nedeli.html)

Тапочек 04.11.2022 11:10

Скрипт "картинка-ссылка" на каждый день недели
 
Всем привет и здрасьте!

Очень нужен скрипт, который будет отображать рандомную картинку-ссылку (например, из 50 штук) каждый день. То есть, новый день - новая картинка. Я перелопатил кучу сайтов, но ничего подходящего не нашёл...

Здесь сидят люди разбирающиеся в теме, помогите!
Всем добра!

voraa 04.11.2022 11:30

Если показывать рандомно, то есть вероятность, что два (а то и три) дня подряд будет показываться одна и та же картинка.
Проще иметь массив url картинок и каждый день циклически показывать следующую.

Тапочек 04.11.2022 11:31

Цитата:

Сообщение от voraa (Сообщение 548744)
Проще иметь массив url картинок и каждый день циклически показывать следующую.

Тоже верно. Как это сделать?

Тапочек 04.11.2022 11:41

Цитата:

Сообщение от voraa (Сообщение 548744)
Если показывать рандомно, то есть вероятность, что два (а то и три) дня подряд будет показываться одна и та же картинка.

Хотя и это меня не смущает. Массив из 56 картинок. Даже если что-то будет подряд показываться - да пусть, не принципиально. Важен именно ежедневный рандом (пусть и с повторами)

voraa 04.11.2022 11:52

Показывать циклически можно так.
const picurls = [
	'http://serv/pic1.jpg',
	'http://serv/pic2.jpg',
...
	'http://serv/picN.jpg',
];

const now = Date.now();  // мс с 01.01.1970
const msinday = 1000*60*60*24; // мс в сутках
const nowDay = Math.trunc(now/msinday); // дней с 01.01.1970

const ind = nowDay % picurls.length;

const url = picurls[ind];


Именно рандом на каждый день сделать труднее. Если это рандом для каждого пользователя (разные пользователи в один и тот же день будут видеть разные картинки), то каждый раз надо проверять заходил ли это т пользователь в этот день. Если нет, то вычислять рандомно индекс картинки и запоминать его, например в localStorage. Если уже заходил в этот день, то брать запомненный индекс.
Если все пользователи в этот день должны видеть одну и туже рандомную картинку, то это либо проблема сервера, либо придумывать какой то хеш по дате (например md5). и уже по хешу (беря младшую часть, вычисляя остаток) вычислять номер картинки, которую надо показать. Но нет гарантии, что это будет действительно равномерно распределенное случайное число.

Тапочек 04.11.2022 14:41

Я вижу это примерно так (если не прав - пните): например, есть скрипт, который показывает рандомную картинку при обновлении страницы (но это не подходит). А если сделать так, что в, например, час ночи (по дате пользователя) скрипт рандомно выбирает картинку из массива и показывает её пользователю (всем пользователям). Это нечто вроде "фото дня". Пусть будут повторы - не принципиально

Можно сделать и цикличность (тоже выход, но не совсем), но хотелось бы всё же рандом

Вот как-то так

voraa 04.11.2022 18:14

Тогда это должен сервер делать - выбирать, какую картинку показывать пользователям.

Тапочек 04.11.2022 19:53

Цитата:

Сообщение от voraa (Сообщение 548761)
Тогда это должен сервер делать - выбирать, какую картинку показывать пользователям.

Окай, можно решить вопрос и с цикличностью (сделать псевдорандом - картинки показываются не 1,2,3,4,5... а 3,1,5,4,2 - это не проблема), но я упорно не понимаю, как настроить скрипт на смену картинки каждые 24 часа. Я в JS не силён от слова совсем. Мне бы готовый скрипт... :(

рони 04.11.2022 21:36

Цитата:

Сообщение от Тапочек
Мне бы готовый скрипт...

чем не устраивает код в #3?

Тапочек 04.11.2022 21:58

Цитата:

Сообщение от рони (Сообщение 548763)
чем не устраивает код в #3?

Если это уже готовый скрипт, который меняет картинку каждые 24 часа - меня полностью устраивает (отредактировать я понимаю как). Только вот вместо картинки нужна картинка-ссылка. Как это сделать?

А как сделать, чтобы картинка менялась раз неделю, раз в месяц и раз в год? По аналогии с "фото недели" и "фото месяца"


Часовой пояс GMT +3, время: 10:32.