seregadushka
@seregadushka
minsk

Как собрать массив в canvas?

Это небольшая галерея из Codrops , с инструкцией.

Я пробую ее сделать переменной длины. Принцип простой, делал я этой уже не однократно, только без canvas.

PiecesSlider

-------------- было ----------------
<div class="pieces-slider__slide">
	<img class="pieces-slider__image" src="images/1.jpg" alt="">
		<h2 class="pieces-slider__text">Status Quo</h2>
</div>
<div class="pieces-slider__slide">
	<img class="pieces-slider__image" src="images/2.jpg" alt="">
		<h2 class="pieces-slider__text">Amphibia</h2>
</div>
....

-------------- стало ----------------
var str = [`<div class="pieces-slider__slide">
			<img class="pieces-slider__image" src="$img1$" alt="">
				<h2 class="pieces-slider__text">$text1$</h2>
		</div>`,
		<div class="pieces-slider__slide">
			<img class="pieces-slider__image" src="$img2$" alt="">
				<h2 class="pieces-slider__text">$text2$</h2>
		</div>`  
....];

function show() {
   var block = [];
   for (let i = 0; i < 2; i++)
		block.push(str[i]);
   document.getElementById('pieces-slider').innerHTML = block.join('\n');}
window.addEventListener("load",() => { show(); });

<div class="pieces-slider" id="pieces-slider"></div>

я только добавил
1. в div class="pieces-slider" id="pieces-slider">/div> одноименный ID.
================== вывод ===========================
благодаря помощи alexalexes в вернулся к копии авторов. Теперь в вопросе ничего ценного нет.
У авторов более сложный подсчет отдельно картинок и текста. Так же считают индексы .
Если это не надо , то можно смотреть упрощенный вариант "стало".
Он тоже должен работать, но не здесь :)
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
@alexalexes
` .... src="$img1$" .... `
Конечно, названия переменных странные для JS. Если хотите подставлять переменные в строку, образованной тильдами, то нужно использовать синтаксис ${ переменная или вычисляемое выражение }, тогда подстановка будет работать так:
` .... src="${ $img1$ }" .... `
1. Нужно убедиться, что вы корректно генерируете HTML.
2. Если вы не правили demo.js, то знайте, как он подхватывает элементы:
// Get all images and texts, get the `canvas` element, and save slider length
    var sliderCanvas = document.querySelector('.pieces-slider__canvas');
    var imagesEl = [].slice.call(document.querySelectorAll('.pieces-slider__image'));
    var textEl = [].slice.call(document.querySelectorAll('.pieces-slider__text'));
    var slidesLength = imagesEl.length;

То есть, он подхватывает элементы по селекторам классов.
Если вы инициализируете слайдер с помощью demo.js, то переименование контейнеров приведет к потере инициализирующихся элементов.
В общем, либо модифицируйте demo, либо на его основе пишите свой инициализатор слайдера.
3. HTML вы должны подготовить до создания объекта слайдера (до вызова new Pieces({ .... }) ). Либо это делать исключительно через JS. Здесь в примере как раз приведен фрагмент подготовки массива для объекта Pieces:
// Build the array of items to draw using Pieces
    var items = [];
    var imagesReady = 0;
    for (var i = 0; i < slidesLength; i++) {
        // Wait for all images to load before initializing the slider and event listeners
        var slideImage = new Image();
        slideImage.onload = function() {
            if (++imagesReady == slidesLength) {
                initSlider();
                initEvents();
            }
        };
        // Push all elements for each slide with the corresponding options
        items.push({type: 'image', value: imagesEl[i], options: imageOptions});
        items.push({type: 'text', value: textEl[i].innerText, options: textOptions});
        items.push({type: 'text', value: i + 1, options: numberOptions});
        // Save indexes
        textIndexes.push(i * 3 + 1);
        numberIndexes.push(i * 3 + 2);
        // Set image src
        slideImage.src = imagesEl[i].src;
    }

После инициализации объекта-слайдера, изменять состав слайдов можно только методами этого объекта, если они прописаны в библиотеке (как вы будете изучать минимизированный файл библиотеки, без документации - я хз).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы