Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Помогите разобраться скрипт для сайта (https://javascript.ru/forum/jquery/79411-pomogite-razobratsya-skript-dlya-sajjta.html)

shiyri 04.02.2020 13:41

Помогите разобраться скрипт для сайта
 
Добрый день, делаю сайт в котором хочу сделать смену обоев на главной в зависимости от времени года, с некоторым рандомом из галереи.
Вот тут рандом работает, в месяц не отрабатывается, насколько я понял
m.getMonth() возвращает число месяца, причем январь это 0.
и насколько я еще понял время берется от времени устройства с, которого загрущается сайт.


<script type="text/javascript">
$(document).ready(function() {
var m=new Date();
document.write(m.getMonth());
var bgArray = ['1.jpg', '2.jpg','3.jpg'];
var bgArrayz = ['4.jpg','5.jpg','6.jpg'];
if (3 < document.write(m.getMonth()) < 10) {
var bg = bgArray[Math.floor(Math.random() * bgArray.length)];
} else {
var bg = bgArrayz[Math.floor(Math.random() * bgArrayz.length)];
}

$('moving-home').css('background', bg);

// If you have defined a path for the images
var path = 'panoram/';

// then you can put it right before the variable 'bg'
$('moving-home').css('background', path+bg);

});
</script>

рони 04.02.2020 14:49

shiyri,
document.write(m.getMonth())
красное лишнее

laimas 04.02.2020 14:56

shiyri, а разве это время года? Определить время года по месяцу, это, для JS, добавить к номеру месяца 1, затем это разделить на 3, затем разделить по модулю 4. Полученное значение от 0 до 3 и будет указывать на время года: 0 - зима, 1 - весна, 2 - лето, 3 - осень.

let season_image = 'name1.jpg name2.jpg name3.jpg name4.jpg'.split(' '),
    season = Math.floor((new Date().getMonth()+1) / 3) % 4;
    
alert(season_image[season]);

shiyri 04.02.2020 16:03

Цитата:

Сообщение от рони (Сообщение 519620)
shiyri,
document.write(m.getMonth())
красное лишнее

$(document).ready(function() {
	var m=new Date();	
    var bgArray = ['1.jpg', '2.jpg','3.jpg'];
	var bgArrayz = ['4.jpg','5.jpg','6.jpg'];
	if (3 < m.getMonth() < 10) {
	 var bg = bgArray[Math.floor(Math.random() * bgArray.length)];
	}  else {
	var bg = bgArrayz[Math.floor(Math.random() * bgArrayz.length)];
	}
    
    $('moving-home').css('background', bg);

    // If you have defined a path for the images
    var path = 'panoram/';

    // then you can put it right before the variable 'bg'
    $('moving-home').css('background', path+bg);

});

вот так все равно летние и зимние показывает

laimas 05.02.2020 07:47

Цитата:

Сообщение от shiyri
вот так все равно летние и зимние показывает

Вы чего хотите получить, картинку случайную для времени года? Тогда то что вы упорно пытаетесь делать не имеет отношения к этому. Во-первых, время года, это три месяца, квартал, и какой из месяцев принадлежит тому или иному времени года нужно узнавать так как показано выше. Во-вторых, иметь четыре массива изображений для каждого из времен года, которые поместить в общий массив. То есть, полученное время года, это будет индекс этого массива, который будет указывать на вложенный в него массив изображений для времени года. Затем получив длину массива изображений времени года (ибо они могут иметь разные размеры), сформировать случайное число от 0 до длина массива минус 1. И только потом по этим индексам (время года и случайное число) извлечь изображение.

А вы чего пытаетесь сделать?

shiyri 08.02.2020 19:23

Делаю сайт для школы, фото весны и осени не особо различаются, и приняли решение сделать только зиму и лето. Я пытаюсь сделать случайное фото из массива зима либо лето в зависимости от текущей даты.

laimas 08.02.2020 22:42

shiyri, тут надо еще думать как сделать. Например, если при каждом неком событии на открытой странице сайта или по таймеру нужно менять случайно изображение текущего времени года, тогда есть резон это делать на клиенте посредством javascript. В этом случае на клиент нужно передавать массив изображений, но только текущего времени года, изображения всех времен года отдавать ему нет смысла.

Другими словами, еще сервер должен определить что отдавать клиенту. Пусть как написано выше, изображение меняется на странице многократно и будем отдавать клиенту массив. У сервера при этом есть три варианта получения массива изображений:

1) Изображения (их имена и пути к ним) описаны в базе соответственно времени года, то есть одно поле в таблице, это идентификатор времени года (только начиная не с 0, а с 1 - зима, 2 - весна, 3 - лето, 4 - осень). В этом случае запрос к базе по id определенным по текущему времени года вернет изображения как массив, который после json кодирования размещается в тег script.

2) Изображения лежат в каталогах с именами по названию времен года. По определенному времени года, из массива описывающего имена каталогов, выбирается каталог текущего времени года, а из него считываются изображения и помещаются в массив как и в случае 1).

3) Все изображения находятся в одном каталоге, но имеют имена как название времени года плюс нумерация или только номера, где первое/последнее число, это индекс времени года (0 - 4), а через дефис - обычная нумерация, могут быть и имена.

Если на сервере РНР, тогда:

Для случая 1):

//определить время года - это для всех вариантов
$season = date('n') / 3 % 4;
//запрос в базу, пример для mysqli
$q = $mysqli->query('SELECT image FROM season_images WHERE season=' . ($season + 1));
//полученный ответ как массив
$ims = json_encode($q->fetch_all(MYSQLI_NUM));


А на странице где формируется html код ее вставка в тег sript:

<script>var ims=<?=$ims?></script>


Для случая 2):

//каталоги времен года с изображениями
$seasons = ['winter', 'spring', 'summer', 'autumn'];
//определить время года
$season = date('n') / 3 % 4;
//получить изображения каталога
$ims = glob('path/'.$seasons[$season].'/*');


Для случая 3):

Предположим, что имена в одном каталоге хранятся как хххххх-0.jpg, ... хххххх-3.jpg, где x любое количество любых символов.

//определить время года
$season = date('n') / 3 % 4;
//получить изображения времени года
$ims = glob('path/*{-'.$season.'}*', GLOB_BRACE);


Если одно случайное изображение на каждой странице, то серверу можно его сразу и отдать, перемешав массив и выбран из него первое:

//перемешать массив полученных изображений времени года
shuffle($ims);
//взять первое
$img = $ims[0];


Но, для России, к примеру, может быть расхождение макс. в 8 часов, для Камчатки, у них уже весна, а сервер будучи в Москве все предлагает зиму. Но можно получать изображения и в процессе загрузки страницы, асинхронным запросом.


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