Я наткнулся на этот случайный ротатор изображения
var theImages = new Array()
theImages[0] = 'img1"' theImages[1] = 'img2"'......
var shuffled = [];
while (theImages.length) {
shuffled.push(theImages.splice(Math.random() * theImages.length, 1));
}
$(document).ready(function(){
//Runs Script each time there is an <li>
$("#news li").each(function(index){
//Puts Image in front of everything in <li>
$(this).prepend('<img src="'+shuffled[index]+'">');
});
});
И я включил его в карусель jQuery. Здесь вы можете увидеть (моя скрипка). Проблема в том, что структура массива, которую я хочу использовать для карусели, отличается от структуры ротатора. Вращатель использует:
var theImages = new Array()
theImages[0] = 'img1"'
theImages[1] = 'img2"'
theImages[2] = 'img3"'
Но я хочу использовать следующее для карусели, потому что я хочу также ввести ссылку на каждую картинку.
var theImages = [
['img1','url_1'],
['img2','url_2'],
['img3','url_3']];
Результат, который я ищу, будет следующим:
<div id="carousel1">
<div class="1"><a href="url_1"><img src="img1"></a></div>
<div class="1"><a href="url_2"><img src="img2"></a></div>......
Из того, что я прочитал, я должен использовать for in loop
для назначения данных и не могу просто использовать то, что использует ротатор изображения:
$("#carousel1 .1").each(function(index){
$(this).prepend('<a href="'+imgPath+''+shuffled[index]+'"><img
src="'+urlPath+''+shuffled[?url](?url)+'"></a>');
Это правда? Есть ли способ, который позволяет мне заполнять изображения, а также URL-адреса в карусели?
Нет, никогда не использовать for... in
для массивов. Все, что вам нужно сделать, это изменить
'<img src="'+shuffled[index]+'">'
в
'<a href="'+imgPath+shuffled[index][1]+'"><img src="'+urlPath+shuffled[index][0]+'"></a>'
поскольку путь изображения является первым элементом внутреннего массива, а ссылка является второй.
См. Access/process (вложенные) объекты, массивы или JSON для получения дополнительной информации.
(Я предполагаю, что imgPath
и urlPath
фактически определены где-то и содержат URL-адреса. Если нет, вы должны удалить их.)
Ваша проблема в том, что ваш исходный массив (перетасованные значения) содержит только одно значение, но в конечном итоге вы хотите иметь пары значений. Что дополнительные данные должны поступать откуда-то, компьютер не может просто придумать это.
Самый простой способ сделать это - изменить код тасования и вместо того, чтобы перетасовывать одиночные строки, вместо этого перетасовывайте пары строк.
т.е. что-то вроде
var theImages = new Array()
theImages[0] = ['img1"', data1]
theImages[1] = ['img2"', data2]
var theImages = [ ['img1','url_1'], ['img2','url_2'], ['img3','url_3']];
?
for(var i=0;i<theImages.length;i++){
newTheImagesArray.push([theImages[i],theImages[i]])
}
Это должно работать на то, что вы хотите
var imgPath = "/pic/";
var urlPath = "/url/";
, Я сделал предложенное вами изменение, но получил неопределенную ошибку. Я делаю это неправильно? играть на скрипке.splice
возвращает массив удаленных элементов, поэтому вы должны добавить[0]
чтобы получить первый (и единственный) удаленный элемент:shuffled.push(theImages.splice(Math.random() * theImages.length, 1)[0]);
Раньше это только казалось правильным, но на самом делеshuffled
представляло собой массив массивов с отдельными элементами. jsfiddle.net/YrPc7/14