Сегодня давайте рассмотрим создание простого слайд-шоу фотографий для веб-сайта в простом HTML и Javascript. Конечно, у большинства CMS для веб-сайтов уже есть плагины для подобных вещей, но допустим, вы делаете что-то действительно простое и не используете CMS.
Обратите внимание, что в настоящее время я не занимаюсь каким-либо стилем, и я не беспокоюсь о реализации мобильных приложений или о чем-то подобном. Почему? Ну, во-первых, я предполагаю, что вы уже используете существующую систему для этого. (например, Bootstrap или Bulma). Во-вторых, я не хочу вступать в какие-либо дебаты о том, какая библиотека css лучше или что-то в этом роде. Я оставлю стиль на ваше усмотрение и, возможно, расскажу об этом позже, если кто-то захочет.
Тег шаблона
Тег ‹template› в HTML, возможно, не совсем вам знаком. Я знаю, что не был до недавнего времени.
Это тег, который позволяет вам иметь содержимое в вашем HTML, скрытое от пользователя, которым можно манипулировать и использовать с помощью Javascript. Идеально, если у вас есть какой-то контент, который вы хотите использовать снова и снова, но не хотите каждый раз «создавать» или «конструировать» его. Вы можете поместить контент в шаблон, а затем использовать Javascript, чтобы получить этот контент и отобразить его так, как вам нравится.
В нашем случае для этого простого слайд-шоу у нас будет шаблон для каждого изображения, которое будет отображаться в слайд-шоу. Таким образом, как только Javascript будет завершен и заработает, вы сможете добавлять или удалять изображения в слайд-шоу, просто добавляя или удаляя шаблон.
HTML
Как упоминалось выше, HTML для этого будет очень простым.
Мы поместим элемент контейнера, в котором будут отображаться изображения. Что-то вроде этого.
‹div id="слайд-шоу"›‹/div›
Я оставлю стиль и размещение на ваше усмотрение.
Затем мы добавим раздел шаблона для каждого из наших изображений, которые мы хотим использовать в слайд-шоу.
Что-то вроде этого.
‹template›
‹img src="images/pic001.png"›
‹/template›
Повторите это столько раз, сколько вам нужно, чтобы включить все ваши изображения. pic002.png, pic003.png и т. д. и т. д. и т. д.
Если вы сейчас откроете страницу в своем веб-браузере, вы заметите, что все эти теги img вообще не видны. Это связано с тем, что тег шаблона скрывает этот контент от зрителя до тех пор, пока он не будет отображаться с использованием Javascript.
JavaScript
Давайте теперь создадим очень простой объект Javascript, который будет управлять показом слайдов. В нем не будет анимации или переходов, но он позволит нам управлять некоторыми вещами. Мы сможем указать элемент-контейнер, в котором будет отображаться слайд-шоу. (Мы создали его ранее с идентификатором «слайд-шоу»)
Мы также сможем установить время показа каждого слайда, указав количество секунд при запуске функции. Кроме того, у нас будут функции для изменения задержки слайда, а также для перехода вперед или назад вручную, если вы хотите это разрешить.
Я создал файл Javascript с оригинальным названием: slideshow.js.
Если вы никогда раньше не имели дело с объектами в Javascript, то это может немного сбить вас с толку. В этом случае наш объект также является конструктивной функцией. Итак, начнем с создания новой функции.
функция SlideShow (container_id, задержка = 5) {
Затем мы добавим некоторые свойства объекта, которые превратят его из обычной функции в объект (оставаясь при этом функцией;))
this.index = 0;
this.templates = document.querySelectorAll («шаблон»);
this.slideDelay = задержка; // В секундах
this.interval = null;
this.container_id = container_id;
index будет удерживать текущую позицию слайд-шоу и будет увеличиваться или уменьшаться при смене слайдов. Довольно просто.
templates получит массив всех тегов шаблона в нашем html, который мы добавили ранее. Они будут содержать изображения для слайд-шоу.
slideDelay удерживает указанное время для показа каждого слайда в секундах. Мы передали это в функцию, а также установили по умолчанию значение 5. Таким образом, каждый слайд должен отображаться в течение указанного количества секунд, прежде чем переходить к следующему.
interval будет содержать ссылку на интервал, который мы создаем для автоматического переключения между слайдами.
container_id — это элемент html, в котором мы будем отображать наши изображения.
С этими объявленными переменными. Теперь давайте создадим метод, который возьмет наш шаблон и отобразит его в элементе контейнера. Мы будем использовать это всякий раз, когда будем двигаться вперед или назад в слайд-шоу.
this.updateSlide = function(template) {
// Очистить элемент контейнера
document.getElementById(this.container_id).innerHTML = '';
// Обновить элемент контейнера с помощью шаблона content
document.getElementById(this.container_id).appendChild(template);
}
Теперь давайте создадим метод, который будет переходить к следующему изображению в нашем слайд-шоу при каждом его вызове. Мы автоматизируем это с помощью устанавливаемой нами задержки, но ее также можно прикрепить к ссылке или кнопке, чтобы вручную продвигать слайд-шоу.
this.Next = function() {
// Увеличиваем индекс
this.index++;
// Проверяем, превышает ли индекс имеющиеся у нас шаблоны
if( this.index › this.templates.length — 1) {
// Если индекс превышает количество шаблонов,
// сбрасываем его на 0, чтобы начать заново
this.index = 0;
}
// Клонируем фрагмент шаблона для этого экземпляра
const templateClone = this.templates[this.index].content.cloneNode(true);
// Обновить новый шаблон в контейнер
this.updateSlide(templateClone);
};
Это достаточно просто. Когда функция вызывается, мы увеличиваем индексную переменную. Затем мы проверяем, не превысили ли мы количество слайдов, которое у нас есть, и если мы это сделали, мы возвращаемся к началу. Затем мы клонируем тег шаблона, соответствующий индексу, и вызываем нашу функцию updateSlide, чтобы отобразить его на странице.
Теперь функция вернуться?
this.Previous = function() {
// Увеличиваем индекс
this.index — ;
// Проверяем, превышает ли индекс имеющиеся у нас шаблоны
if (this.index ‹ 0) {
// Если индекс меньше 0
// сбросить его до последнего шаблона в массиве
this.index = this.elements.length — 1;
}
// Клонируем фрагмент шаблона для этого экземпляра
const templateClone = this.templates[this.index].content.cloneNode(true);
// Обновить новый шаблон в контейнер
this.updateSlide(templateClone);
}
Это почти то же самое, что и функция Next, за исключением того, что здесь мы уменьшаем индекс (потому что мы движемся назад), и затем нам нужно убедиться, что мы не опустились ниже 0. Если мы это сделали, мы вернемся к конец массива шаблонов, чтобы он зацикливался.
Мы не будем использовать метод Previous в этом примере, но он заложен на будущее. Вы можете расширить этот простой пример самостоятельно и разрешить постоянное изменение направления, а не просто возвращаться по одному слайду за раз.
Мы также добавим функцию, которая позволит нам изменять задержку во время работы.
this.changeDelay = function(delay) {
// Очистить существующий интервал, который у нас сейчас есть
clearInterval(this.interval);
// создаем новый интервал с новой задержкой
this.interval = setInterval(‘this.Next()’, this.slideDelay * 1000); // вызов следующей функции с интервалом в миллисекундах
}
Эта функция очищает существующий интервал и создает новый с новой задержкой, которую мы предоставляем. Мы передадим эту задержку в секундах, но системе нужны миллисекунды, поэтому мы умножаем наши секунды на тысячу, чтобы получить правильное значение.
Почти готово. Последний шаг — инициализировать первый слайд, который мы видим сразу, установить наше начальное значение задержки и активировать интервал. Мы все еще внутри нашего объекта/функции построения SlideShow, поэтому мы можем просто добавить эти команды здесь.
// Инициализировать первый слайд
var initialTemplate = this.templates[0].content.cloneNode(true);
this.updateSlide(initialTemplate);
// Установить начальный интервал
this.changeDelay(this.delay);
Затем просто завершите нашу функцию слайд-шоу. (Убедитесь, что вы сохранили файл вместе с HTML-файлом, который мы создали для начала)
}
Это наш простой объект слайд-шоу готов, и мы уже настроили HTML. Нам просто нужно ввести наш javascript на HTML-страницу и вызвать конструктор объекта SlideShow.
Итак, вернемся к HTML-странице. Внизу, прямо над тегом ‹/body› давайте добавим это.
‹script src="slideshow.js"›‹/script›
‹script›
SlideShow(“слайд-шоу”,5);
‹/script›
Как видите, мы включили только что написанный код javascript, а затем вызвали функцию из этого кода. Мы передали ему элемент для удержания слайд-шоу и задержку в пять секунд.
Если все прошло хорошо, вы должны увидеть, как изображения меняются каждые пять секунд и снова возвращаются к началу, когда оно доходит до конца.
Вы можете добавить ссылки или кнопки для перехода вручную или способ изменить задержку. Или вы можете установить его, как хотите, и оставить так, чтобы его нельзя было изменить. Тебе решать.
Это может быть полезно на веб-сайте для фотографа, на сайте обмена изображениями или для любого другого использования. Уверен, вы придумаете, как это использовать.
В будущем мы могли бы подумать о расширении этого, чтобы добавить некоторые стили и дополнительные функции, такие как рандомизация, полноэкранный режим и запоминание того, чем был занят пользователь, когда они возвращаются. Любые другие идеи?