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 16:48

хочу чтобы находил случайный img, но не работает код
 
Есть div с классом block_img в нём картинки img. (они скрыты) Я их нахожу и вставляю в другой div... но не могу вывести именно случайную картинку, ибо arrImg[rand] как описано во всех примерах не хочет взять эту случайную картинку.
var block_img = document.querySelectorAll('.block_img img');
    var block_image_show_one = document.querySelector('.block_image_show_one');

    for (var i = 0; i < block_img.length; i++) {

        var arrImg = block_img[i];
        var rand = Math.floor(Math.random() * arrImg.length);



        block_image_show_one.appendChild(arrImg);
    }

В итоге я их нахожу и вставляю в нужный мне div , но только все картинки. А надо только одну случайную... В чём проблема? Спасибо за помощь.

laimas 23.12.2015 16:52

Цитата:

Сообщение от orionpro
А надо только одну случайную... В чём проблема?

В цикле.

orionpro 23.12.2015 16:57

Цитата:

Сообщение от laimas (Сообщение 401097)
В цикле.

Не могли бы вы, милейший, более подробно объяснить. Я нахожу ведь все картинки... почему после прохождения цикла, успешно найдя все картинки, я не могу вычленить случайную картинку (.

laimas 23.12.2015 17:01

Цитата:

Сообщение от orionpro
Я нахожу ведь все картинки... почему после прохождения цикла, успешно найдя все картинки, я не могу вычленить случайную картинку

А зачем циклом находить картинки, если вам требуется только одна из них? Одна, значит зная длину массива нужно сформировать число из диапазона индексов массива изображений - от 0 до длина массива - 1.
Сформировали, получаете по этому индексу изображение (путь/имя), отображаете.

orionpro 23.12.2015 17:13

Цитата:

Сообщение от laimas (Сообщение 401100)
А зачем циклом находить картинки, если вам требуется только одна из них? Одна, значит зная длину массива нужно сформировать число из диапазона индексов массива изображений - от 0 до длина массива - 1.
Сформировали, получаете по этому индексу изображение (путь/имя), отображаете.

Так мысль же в том, чтобы случайно взять картинку из массива картинок. А циклом прохожу, чтобы проверить сколько картинок. Вдруг картинок станет больше или меньше? Просто идея в случайности. Из имеющихся картинок я буду выбирать не в одно место, а в три разных блока. Но это потом, в начале хотя бы в один, чтобы работало...

orionpro 23.12.2015 17:21

Вот пример на learn.javascript.ru
var arr = ["Яблоко", "Апельсин", "Груша", "Лимон"];

var rand = Math.floor(Math.random() * arr.length);

alert( arr[rand] );

Он же работает. Случайным образом получает значение массива ...

рони 23.12.2015 17:35

orionpro,
arrImg у вас одна картинка какую длину вы хотите получить у одной картинки в arrImg.length?

рони 23.12.2015 17:37

orionpro,
var block_img = document.querySelectorAll('.block_img img');
var block_image_show_one = document.querySelector('.block_image_show_one');
var rand = Math.floor(Math.random() * block_img.length);
var arrImg = block_img[rand];
block_image_show_one.appendChild(arrImg);

laimas 23.12.2015 17:46

Цитата:

Сообщение от orionpro
Вот пример на learn.javascript.ru

Цитата:

Сообщение от orionpro
Он же работает.


Ну так как он работает? :)

orionpro 23.12.2015 17:52

Цитата:

Сообщение от рони (Сообщение 401109)
orionpro,
var block_img = document.querySelectorAll('.block_img img');
var block_image_show_one = document.querySelector('.block_image_show_one');
var rand = Math.floor(Math.random() * block_img.length);
var arrImg = block_img[rand];
block_image_show_one.appendChild(arrImg);

Получается, что этом коде
var block_img = document.querySelectorAll('.block_img img');

я уже выбираю все картинки? Просто, как-то сталкивался с тем, что только циклом можно было успешно сделать.
var elem = document.querySelectorAll(".historyList");
        // цикл проверяет все элементы с классом historyList 
        for (var i = 0; i < elem.length; i++) {

            elem[i].remove(); // и потом удаляет их

        }

Если убираем цикл и пытаемся удалить elem.remove(); то ничего не работает.(elem.remove is not a function). Наверное из-за этого и решил применить такое и на img. Большое спасибо, Ваш код работает, как надо!


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