Как добавить другое слайд-шоу изображений в html на одной странице? - PullRequest
0 голосов
/ 02 февраля 2020

Из API я получаю массив изображений, а при повторном запросе API я получаю другой массив разных изображений. Когда я нажимаю кнопку, я хочу добавить массив изображений в галерею bootstrap, а когда нажимаю снова, я хочу добавить второй массив в другую галерею. Я не понимаю, как использовать один и тот же шаблон bootstrap html и создавать разные галереи изображений на одной странице html. Объект API:

 {
  "title": "rodeo",
  "author": "consectetur",
  "images": [
"http://example/photo.jpg",
"http://example/photostwo.jpg",
"http://example/photosone.jpg"
  ],
  "year": "1998"
} 

<div>
  <div id="container"></div>
  <button id="dataBtn"></button>
</div>

<div id="carouselExampleControls" class="carousel slide" data-ride="carousel">
    <div class="carousel-inner">
      <div class="carousel-item active">
    <img class="d-block w-100" src="...">
      </div>
    </div>
    <a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-slide="prev">
      <span class="carousel-control-prev-icon" aria-hidden="true"></span>
      <span class="sr-only">Previous</span>
    </a>
    <a class="carousel-control-next" href="#carouselExampleControls" role="button" data-slide="next">
      <span class="carousel-control-next-icon" aria-hidden="true"></span>
      <span class="sr-only">Next</span>
    </a>
  </div>

function test(){
const carouselItem = document.querySelector('.carousel-item');

function create(element) {
    return document.createElement(element);
}

function append(parent, el) {
    return parent.appendChild(el);
}


for (image of data.images) {
    let img = create('img');
    img.classList.add(‘d - block’, ‘w - 100’);
    img.src = image;
    append(carouselItem, img);

} 
}
test();
document.getElementById("dataBtn").addEventListener("click", test);

Ответы [ 2 ]

0 голосов
/ 03 февраля 2020

Попробуй ..

image
0 голосов
/ 03 февраля 2020

С bootstrap эти задачи были бы намного проще при использовании jQuery Framework! Поскольку вы упоминаете только Javascript в тегах «Вопрос», это метод, показывающий, как мы могли бы сделать это в чистом Javascript, который вы могли бы легко включить в ваш проект.

Мы клонируем контейнер Карусель Затем мы заполняем динамически добавленные клоны новыми изображениями.

//An initial status we could check later
var initial = true;
//A global counter that could be used to distinguish between non-DOM duplicates
let i = 0;

function test() {

	//Here A random array of pics would be used
	//Just to simulate an API call
	var rand = Math.floor(Math.random() * Math.floor(2));
	var pix = JSON.parse('{"data":[{"title":"rodeo","author":"consectetur","images":["https://images.unsplash.com/photo-1533522688752-ef641aa0607b?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=125&q=60","https://images.unsplash.com/photo-1550543941-281cef85c281?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=125&q=60","https://images.unsplash.com/photo-1565291707930-351bfd98e772?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=125&q=60"],"year":"1998"},{"title":"Flasher","author":"Photo Addict","images":["https://images.unsplash.com/photo-1516724562728-afc824a36e84?ixlib=rb-1.2.1&auto=format&fit=crop&w=125&q=60","https://images.unsplash.com/photo-1505739998589-00fc191ce01d?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=125&q=60","https://images.unsplash.com/photo-1516962126636-27ad087061cc?ixlib=rb-1.2.1&auto=format&fit=crop&w=125&q=80","https://images.unsplash.com/photo-1518890414976-bb41382be43e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=125&q=80"],"year":"2020"},{"title":"Domotics","author":"iOting","images":["https://images.unsplash.com/photo-1528255671579-01b9e182ed1d?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=125&q=60","https://images.unsplash.com/photo-1505739998589-00fc191ce01d?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=125&q=60","https://images.unsplash.com/photo-1494351416886-f6b4ed2a1d68?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=125&q=60","https://images.unsplash.com/photo-1547938094-b000547cbeb9?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=125&q=60"],"year":"2020"}]}');
	const carouselItem = document.querySelector('.carousel-item');

	function create(element) {
		return document.createElement(element);
	}
	function append(parent, el) {
		return parent.appendChild(el);
	}

	var model = document.getElementById('carouselExampleControls');

	function duplicate() {
		i++;
		//We clone the default laoded Gallery container
		var clone = model.cloneNode(true);
		clone.id = "cloneGallery" + i;
		model.parentNode.appendChild(clone);
		//We identify the dynamically newly added picture container
		var clItem = document.getElementsByClassName('carousel-item')[i];
		//We empty it... so we could replace by new pics
		clItem.innerHTML = '';
		for (image of pix.data[rand].images) {
			var img = create('img');
			img.classList.add('d-block', 'w-100');
			img.src = image;
			append(clItem, img);
		}
	}
	if (initial) {
		for (image of pix.data[rand].images) {
			var img = create('img');
			img.classList.add('d-block', 'w-100');
			img.src = image;
			append(carouselItem, img);
		}
	} else {
		duplicate();
	}
	initial = false;
}
document.getElementById("dataBtn").addEventListener("click", test);
<div>
  <div id="container"></div>
  <button id="dataBtn">Add Pictures!</button>
</div>
<div id="carouselExampleControls" class="carousel slide" data-ride="carousel">
    <div class="carousel-inner">
      <div class="carousel-item">
    
      </div>
    </div>
    <a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-slide="prev">
      <span class="carousel-control-prev-icon" aria-hidden="true"></span>
      <span class="sr-only">Previous</span>
    </a>
    <a class="carousel-control-next" href="#carouselExampleControls" role="button" data-slide="next">
      <span class="carousel-control-next-icon" aria-hidden="true"></span>
      <span class="sr-only">Next</span>
    </a>
  </div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...