Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   хочу чтобы находил случайный img, но не работает код (https://javascript.ru/forum/events/60346-khochu-chtoby-nakhodil-sluchajjnyjj-img-no-ne-rabotaet-kod.html)

orionpro 23.12.2015 18:54

Цитата:

Сообщение от laimas (Сообщение 401111)
Ну так как он работает? :)

Я ошибался, когда думал, что циклом я получу массив из картинок... А в примере был создан именно массив.

рони 23.12.2015 18:56

Цитата:

Сообщение от orionpro
в три разных блока

var block_img = document.querySelectorAll('.block_img img');
var block_image_show_one = document.querySelectorAll('.block_image_show_one');//блоки
block_img = [].slice.call(block_img);
for (var i=0; i<block_image_show_one.length; i++)  {
var rand = Math.floor(Math.random() * block_img.length);
var arrImg = block_img.splice(rand,1)[0];
if(arrImg)block_image_show_one[i].appendChild(arrImg);
}

laimas 23.12.2015 19:02

Цитата:

Сообщение от orionpro
Я ошибался, когда думал, что циклом я получу массив из картинок

:)

var block_img = document.querySelectorAll('.block_img img'); - ну так запуская цикл именно для block_img, указывая block_img.length, понимаете же, что это коллекция. Циклом вы лишь перебираете ее, что может потребоваться для каких-то операций.

orionpro 23.12.2015 19:15

Цитата:

Сообщение от рони (Сообщение 401114)
var block_img = document.querySelectorAll('.block_img img');
var block_image_show_one = document.querySelectorAll('.block_image_show_one');//блоки
block_img = [].slice.call(block_img);
for (var i=0; i<block_image_show_one.length; i++)  {
var rand = Math.floor(Math.random() * block_img.length);
var arrImg = block_img.splice(rand,1)[0];
if(arrImg)block_image_show_one[i].appendChild(arrImg);
}

я добавил
var block_image_show_one = document.querySelectorAll('.block_image_show_one, .block_image_show_two,  .block_image_show_three'); //блоки

и всё работает ,супер (добавляет). Вот только я не совсем понял, что происходит в этом коде
var arrImg = block_img.splice(rand,1)[0];
он разделяет массив block_img с помощью rand случайно, но что такое [0]? Он оставляет один элемент в массиве, если их больше?

orionpro 23.12.2015 19:18

Или rand - случайное значение массива, т.е. в данном случае - картинка случайная?

рони 23.12.2015 19:21

orionpro,
splice возвращает "вырезку" в виде массива, поэтому [img], вырезали случайно 1 элемент из block_img, чтоб эта картинка больше не участвовала в конкурсе :) получили массив из одной картинки -- но нам нужна сама картинка а не массив, поэтому [img][0]

orionpro 23.12.2015 21:17

Цитата:

Сообщение от рони (Сообщение 401119)
orionpro,
splice возвращает "вырезку" в виде массива, поэтому [img], вырезали случайно 1 элемент из block_img, чтоб эта картинка больше не участвовала в конкурсе :) получили массив из одной картинки -- но нам нужна сама картинка а не массив, поэтому [img][0]

Большое спасибо, я ещё поэкспериментирую с этим, чтобы лучше понять.

orionpro 23.12.2015 21:29

Особенно эту строчку
block_img = [].slice.call(block_img);
. Мы в ней создаем пустой массив, потом... splice возвращает, а call... пока не понимаю. Создаем массив из картинок, что-ли, но потом мы это применяем в переменной arrImg и там опять splice .

orionpro 23.12.2015 21:59

Как я понял,
[].slice.call(block_img)

Мы вызываем метод slice прототипа Array (то бишь массива) и применяем его к аргументу block_img ? Поправьте меня пожалуйста. Может я не так понимаю.

рони 23.12.2015 22:05

Цитата:

Сообщение от orionpro
Создаем массив из картинок

да
Цитата:

Сообщение от orionpro
там опять splice

откуда опять?


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