Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 23.12.2015, 17:54
Аспирант
Отправить личное сообщение для orionpro Посмотреть профиль Найти все сообщения от orionpro
 
Регистрация: 23.12.2015
Сообщений: 39

Сообщение от laimas Посмотреть сообщение
Ну так как он работает?
Я ошибался, когда думал, что циклом я получу массив из картинок... А в примере был создан именно массив.
Ответить с цитированием
  #12 (permalink)  
Старый 23.12.2015, 17:56
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 30,127

Сообщение от 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);
}
Ответить с цитированием
  #13 (permalink)  
Старый 23.12.2015, 18:02
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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


var block_img = document.querySelectorAll('.block_img img'); - ну так запуская цикл именно для block_img, указывая block_img.length, понимаете же, что это коллекция. Циклом вы лишь перебираете ее, что может потребоваться для каких-то операций.
Ответить с цитированием
  #14 (permalink)  
Старый 23.12.2015, 18:15
Аспирант
Отправить личное сообщение для orionpro Посмотреть профиль Найти все сообщения от orionpro
 
Регистрация: 23.12.2015
Сообщений: 39

Сообщение от рони Посмотреть сообщение
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]? Он оставляет один элемент в массиве, если их больше?
Ответить с цитированием
  #15 (permalink)  
Старый 23.12.2015, 18:18
Аспирант
Отправить личное сообщение для orionpro Посмотреть профиль Найти все сообщения от orionpro
 
Регистрация: 23.12.2015
Сообщений: 39

Или rand - случайное значение массива, т.е. в данном случае - картинка случайная?
Ответить с цитированием
  #16 (permalink)  
Старый 23.12.2015, 18:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 30,127

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

Последний раз редактировалось рони, 23.12.2015 в 18:23.
Ответить с цитированием
  #17 (permalink)  
Старый 23.12.2015, 20:17
Аспирант
Отправить личное сообщение для orionpro Посмотреть профиль Найти все сообщения от orionpro
 
Регистрация: 23.12.2015
Сообщений: 39

Сообщение от рони Посмотреть сообщение
orionpro,
splice возвращает "вырезку" в виде массива, поэтому [img], вырезали случайно 1 элемент из block_img, чтоб эта картинка больше не участвовала в конкурсе получили массив из одной картинки -- но нам нужна сама картинка а не массив, поэтому [img][0]
Большое спасибо, я ещё поэкспериментирую с этим, чтобы лучше понять.
Ответить с цитированием
  #18 (permalink)  
Старый 23.12.2015, 20:29
Аспирант
Отправить личное сообщение для orionpro Посмотреть профиль Найти все сообщения от orionpro
 
Регистрация: 23.12.2015
Сообщений: 39

Особенно эту строчку
block_img = [].slice.call(block_img);
. Мы в ней создаем пустой массив, потом... splice возвращает, а call... пока не понимаю. Создаем массив из картинок, что-ли, но потом мы это применяем в переменной arrImg и там опять splice .
Ответить с цитированием
  #19 (permalink)  
Старый 23.12.2015, 20:59
Аспирант
Отправить личное сообщение для orionpro Посмотреть профиль Найти все сообщения от orionpro
 
Регистрация: 23.12.2015
Сообщений: 39

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

Мы вызываем метод slice прототипа Array (то бишь массива) и применяем его к аргументу block_img ? Поправьте меня пожалуйста. Может я не так понимаю.
Ответить с цитированием
  #20 (permalink)  
Старый 23.12.2015, 21:05
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 30,127

Сообщение от orionpro
Создаем массив из картинок
да
Сообщение от orionpro
там опять splice
откуда опять?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать чтобы код не исполнялся когда ненадо и вставить его туда? Nerow Общие вопросы Javascript 16 09.01.2015 22:17
достал уже IE (не работает код) Weise Internet Explorer 11 29.03.2010 12:46
Не работает код из внешнего файла в IE6 Petka jQuery 2 03.03.2010 15:09
Почему не работает код? JSprog Общие вопросы Javascript 4 16.08.2009 13:39
Код не работает в седьмом Эксплорере... vol4ara Общие вопросы Javascript 0 14.07.2008 17:53