Лого www.SiteHere.ru

Как сделать воспроизведение GIF по клику — ускоряем загрузку сайта путем загрузки GIF при клике

Тему оптимизации сайта сейчас затрагивают все чаще и чаще. И не зря, так как веб становится все более быстрым, а информации становиться все больше. Только посмотрите на количество сервисов оптимизации изображений, CSS стилей, JS стилей появилось в последнее время. Добиться быстрой загрузки сайта стало куда проще, чем это было раньше. Но даже здесь не все решается простыми сервисами. Сегодня мы рассмотрим простой способ загружать GIF только при клике.

Если вы хотите изучить более детально тему скорости загрузки, то рекомендую следующие статьи к прочтению:

Так как статья относится именно к GIF изображениям, то рекомендую изучить статью по созданию GIF онлайн:

Примеров до и после не будет, так как здесь все понятно будет на цифрах. А ниже вы можете посмотреть и скачать готовый пример загрузки GIF изображения при клике:

СМОТРЕТЬ ДЕМОСКАЧАТЬ ДЕМО

Плюсы и минусы загрузки GIF при клике

Чтобы наглядно оценить все "за" и "против" данного способа я представил все наглядно в таблице:

КритерийОбычная вставка GIFЗагрузка GIF по клику
1. Необходимость подключения jQueryнетда
2. Необходимость дополнительного JS функционаланетда
3. Необходимость дополнительных телодвижений (создание preview изображения)нетда
4. Увеличение скорости загрузки в 10-и разнетда

Первый пункт немного спорный, потому что можно ведь было написать скрипт на чистом Javascript, тогда он бы отсутствовал, но вот остальные точно останутся в любом случае.

Пока что не до конца понятно в чем же тогда смысл данного способа, если же у него столько минусов. Но вот последний плюс для многих (и для меня в том числе) будет намного важнее всех минусов, которые указаны выше. Чтобы добиться хорошей скорости загрузки — необходимо кое-что сделать.

Сейчас хочу немного поговорить о последнем способе загрузки и показать на цифрах как сильно отличаются загружаемые объемы данных при простой вставке GIF, а также во втором случае. Я приведу на примерах тех GIF изображений, которые вы можете увидеть в демо.

КритерийОбычная вставка GIFЗагрузка GIF по клику
Объем всех загружаемых браузером файлов в первый раз8413,95 Kb185,69 Kb

Конкретно в данном примере отличия колоссальные!

Что нужно сделать до начала внедрения кода…

Что нужно сделать до начала внедрения кода

Допустим, вас воодушевил данный способ и вы понимаете, что на вашем сайте находится большое количество GIF изображений, а вот скорость загрузки страдает. И вы решили внедрить данный функционал у себя на проекте (возможно будущем). Есть небольшая предварительная процедура, при которой нужно подготовить preview изображения, которые необходимо показывать как только загрузился сайт. То есть это именно те изображения, которые пользователь видит пока не кликнул на кнопку Play.

Что можно поставить на preview изображение? Здесь есть 2 варианта: либо делать для каждого GIF изображения свое preview, которое является его первым кадром, либо сделать одно изображение, которое будет использоваться на всем сайте, вне зависимости от GIF изображения. Но, решить как будет лучше для вашего проекта, вам необходимо самостоятельно.

Итак, вы подготовили все preview изображения для каждого GIF изображения и сейчас готовы внедрить функционал, тогда переходим к самому интересному блоку! 🙂

Блок "СКОПИРОВАЛ-ВСТАВИЛ"

Здесь все будет действительно просто, а если нет, тогда просто скачайте демо пример и посмотрите как все устроено внутри и сделайте соответствующие действия для своего проекта.

Начнем, как обычно, с разметки:

1 этап. HTML разметка

HTML КОД
1
2
3
<div class="gif-with-play">
    <img src="img/self-portrait.jpg" alt="Self Portrait" data-srcgif="img/self-portrait.gif">
</div>

ВАЖНО: все изображения должны находиться в блоке с классом "gif-with-play". И второе важное замечание: необходимо указать адрес до preview изображения в атрибуте "src" и ОБЯЗАТЕЛЬНО указать адрес до GIF изображения в атрибуте "data-alt".

Здесь все! Идем дальше…

2 этап. CSS стили

На самом деле можно обойтись и без CSS стилей, а внедрить функционал и все. Но ведь человек вряд ли поймет, что можно кликнуть на изображение и просто проскроллит страницу далее. Поэтому все же нужны стили, которые помогут пользователю понять как работать с этим компонентом страницы:

CSS КОД
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
 
.gif-with-play {
  position: relative;
  background: url('../img/loading.gif') transparent no-repeat center center;
}
 
.gif-with-play:hover {
  cursor: pointer;
}
 
.gif-with-play:hover:before {
  background-color: rgba(255,255,255,.56);
}
 
.gif-with-play:after,
.play.gif-with-play:after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  margin: auto;
  height: 120px;
  width: 120px;
  -webkit-background-size: cover;
  background-size: cover;
  z-index: 10;
  -webkit-transition: all .35s ease;
  -o-transition: all .35s ease;
  transition: all .35s ease;
  opacity: 1;
}
 
.gif-with-play:after {
  background-image: url('../img/player-buttons/play_button.svg');
}
 
.play.gif-with-play:after{
  background-image: url('../img/player-buttons/stop_button.svg');
}
 
.play.gif-with-play:not(:hover):after {
  opacity: .35;
}
 
.gif-with-play:before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
  background-color: rgba(255,255,255,.7);
  z-index: 10;
  -webkit-transition: all .35s ease;
  -o-transition: all .35s ease;
  transition: all .35s ease;
  opacity: 1;
}
 
.play.gif-with-play:before {
  background-color: rgba(255,255,255,0);
}
 
.gif-with-play img {
  opacity: 1;
  -webkit-transition: all .35s ease;
  -o-transition: all .35s ease;
  transition: all .35s ease;
}
 
.gif-with-play.loading-hide img {
  opacity: 0;
}
 
.loading-hide.gif-with-play:after,
.loading-hide.play.gif-with-play:after{
  opacity: 0;
}
 
@media screen and (max-width: 768px) {
  .gif-with-play:after,
  .play.gif-with-play:after {
    height: 60px;
    width: 60px;
  }
}

Это самый базовый набор стилей, чтобы показать кнопку Play. Я их написал только для того, чтобы вы понимали принцип и смогли изменить кнопку (да и любые стили) под себя и свой проект. Если вы заметили, то для GIF изображения, которое будет подставлено с помощью JS вместо preview, блоку-контейнеру (в нашем случае блоку с классом "gif-with-play") добавляется класс "play".

Кто-то скажет, что можно было добавить дополнительные теги в HTML разметку и к ним привязать событие воспроизведения и остановки GIF. Но я мне нравится формат с псевдоэлементами :before и :after.

3 этап. Javascript

Первым делом необходимо подключить библиотеку jQuery. А затем расположить ниже следующий скрипт:

JAVASCRIPT КОД
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
(function($) {
 
  $('.gif-with-play').on('click', function() {
 
    var $this   = $(this),        
        $img    = $this.children('img'),
        $imgSrc = $img.attr('src'),
        $imgSrcgif = $img.attr('data-srcgif'),
        $imgExt = $imgSrcgif.split('.');
 
    if($imgExt[1] === 'gif') {
      $this.addClass('loading-hide');
 
      $img.attr('src', $img.data('srcgif')).attr('data-srcgif', $imgSrc);
 
      $($img).load(function(){
        $this.removeClass('loading-hide');
      });   
    } else {
      $img.attr('src', $imgSrcgif).attr('data-srcgif', $img.data('srcgif'));
    }
 
    $this.toggleClass('play');
 
  });
 
})(jQuery);

Для владельцев WordPress

Для вас есть отличное готовое решение в виде плагина для WordPress. Плагин называется "WP GIF Player". Скачать его можно здесь — скачать плагин "WP GIF Player".

Основные преимущества и возможности плагина "WP GIF Player":

  • "Проигрывание" одновременно только одно изображение GIF
  • Автоматическое создание изображений для превью GIF (выше нам необходимо было это делать самостоятельно)
  • GIF изображения добавляются очень легко, с помощью одной кнопки
  • Есть возможность параллельной загрузки GIF изображений
  • Можно выставить ограничение на максимальное разрешение GIF изображения

Для владельцев WordPress это хорошее решение, потому что постоянно проделывать все действия вручную может занять очень много времени, а свой плагин писать — это не каждому под силу.

Вывод

Сейчас GIF изображения — это отличный способ объяснить самый важный момент. Также многие документации делаются с помощью GIF изображений, так как можно наглядно показать использование какого-либо инструмента локально или с помощью горячих клавиш.

Также в социальных сетях сейчас они набрали популярность, потому что загрузку видео ждать долго, а вот GIF загружается куда быстрее.

Но данный способ тяжело применить на больших объемах, когда вы используете практически на каждой странице, потому что придется доработать этот способ, чтобы сервер сам генерировал preview изображение из GIF.

Успехов!

С Уважением, Юрий Немец

Как сделать воспроизведение GIF по клику — ускоряем загрузку сайта путем загрузки GIF при клике 5.00/5 (100.00%) 12 голос(ов)

Понравилась статья - расскажи друзьям! :)

5 комментариев к записи
  • leon9208

    Полезная статья, но мне тоже интересно было бы узнать как автоматически генерировать превью из GIF-анимации

     
  • Диана

    А если просто вставить гифку в html-код, то она не будет проигрываться?

     
    • Юрий Немец

      Здравствуйте, Диана! Будет проигрываться, но здесь речь идет об ускоренной загрузке страницы, так как GIF-ка большая, и если она будет загружаться сразу, то это сильно увеличит время загрузки.

       
      • Диана

        Спасибо, Юрий!

         
      • leon9208

        Здравствуйте, спасибо за ваш труд, очень классные и полезные примеры. Я сделал немного другим способом, без тега img, у меня замена jpg на gif происходит в стилях, через смену свойств background-image. Но я никак не могу додумать, как сделать прелоадер в моём случае, чтобы перед полной загрузки gif файла была анимация прелоадера? Я только начинаю изучать js/jQuery, поэтому пока не на всё способен ))) 
        Вот ссылка на пример: http://codepen.io/leon9208/pen/rjpZXP?editors=0010

        Спасибо еще раз! ) 

         

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *