Привет, друзья. Бывает такое, что из-за использования тяжелых плагинов и сайт грузиться непозволительно долго. В таких случаях я рекомендую избавляться от них, либо искать менее "тяжелый" аналог. Но иногда - его просто нет. В таком случае можно попробовать использовать прелоадер, чтобы немного развлечь (отвлечь) пользователя. Но не все знают, как подобный функционал реализовать...
Первым делом стоит упомянуть, что использование прелоадера целесообразно в случаях, когда долго грузится главный экран или тогда, когда контент грузится кусками. Все это может привести либо к мгновенному уходу пользователя с сайта, либо к негативному впечатлению о компании вцелом.
Как сделать прелоадер для landing page
Прежде чем начать делать preloader, нужно немножко уяснить суть того, как браузер загружает страницу. Не буду расписывать весь цикл, так как у самого довольно абстрактное представление, но важно понять, что в целях экономии времени, браузер грузит (отображает) код поэтапно и не дожидается полной загрузки страницы, а в случае подключения js, так вообще прекращает загрузку, пока не выполнит подключаемый файл. Это значит, что загрузка (отображение) остального контента приостанавливается до полной загрузки js файла. В общем, проблем достаточно, давайте теперь попробуем их решить при помощи прелоадера.
Теперь пару слов для понимания того, что мы делаем:
- В самом начале размещаем div c прелоадером
- Скрываем прелодером содержимое сайта до момента полной загрузки страницы
- Скрываем прелоадер и показываем страницу
Теперь, сразу после открытия тега body разместим следующий div:
<div class="loaderArea"> <div class="loader"></div> </div>
Скорее всего, если у вас проблемы с загрузкой сайта, значит у вас много качественных изображений и различных тяжеловесных скриптов, а значит, вы наверняка используете и jQuery, поэтому для того, чтобы наш preloader исчез после того, как загрузится основное содержимое, воспользуемся следующим скриптом:
<script>
$(window).on('load', function () {
$preloader = $('.loaderArea'),
$loader = $preloader.find('.loader');
$loader.fadeOut();
$preloader.delay(350).fadeOut('slow');
});
</script>
Размещайте его где-нибудь после подключения jQuery.
Немного поясню html. LoaderArea - фоновая область, которая перекрывает основной контент. CSS этого дива такой:
.loaderArea {
background: linear-gradient(90deg, #FF4E50 10%, #F9D423 90%);
overflow: hidden;
position: fixed;
left: 0;
top: 0;
right:0;
bottom:0;
z-index: 100000;
}
Loader - это активная область (сам прелоадер). Так как я решил делать его при помощи только CSS, то у него такие стили:
.loader {
height: 40px;
width: 40px;
position: absolute;
left: 50%;
margin-left: -20px;
top: 50%;
margin-top: -20px;
}
.loader:before,
.loader:after {
content: "";
height: 40px;
width: 40px;
border: 8px solid rgba(255,255,255,.5);
border-radius: 10px;
position: absolute;
top: 0;
}
.loader:before {
animation: animate 2s infinite linear;
}
@keyframes animate {
0% {
transform: rotate(0) skew(0);
}
100% {
transform: rotate(180deg) skew(360deg);
}
}
.loader:after {
animation: animate2 2s infinite linear;
}
@keyframes animate2 {
0% {
transform: rotate(0) skew(0);
}
100% {
transform: rotate(-180deg) skew(-360deg);
}
}
Исходник прелоадера я взял с Codepeen. Вот ссылки на несколько интересных вариантов:
А вы пользуетесь прелоадереми на своих сайтах. Я вот, впервые его использовал. Какие у вас интересные примеры есть?
21 комментарий
Спасибо)
Самое простое объяснение как просто можно сделать Прелоадер_)
Большое спасибо за статью!
Полезный и на уровне изложенный материал!
Молодец!
Доходчиво и просто очень!
Спасибо за статью! Как сделать демо 2 ?
А как можно сделать прелоадер например со своим логотипом?
Сделать анимацию своего логотипа, и поставить его в качестве прелоадера...
ЛУЧШИЙ!
Добрый день!
Спасибо! В принципе статья помогла.
Но не понимаю, почему код из Вашего примера работает, а вот если вставить код из Демо 4 - нет.
Что нужно сделать с кодом из Демо 4, чтоб он и на сайте работал, а не только в Codepen, подскажите, пожалуйста?
Pavel, потому, что на кодепене как правило используются всеки предпроцессоры типа SASS и так далее, т.е. код в них немного отличается от стандартных html и js.
Добрый день,
У меня тоже при переносе на сайт демо4 не работает, в чем может быть ошибка
Добрый день!
А куда в данном случае вставлять содержимое страницы?
Дмирий, здравствуйте не понял вопроса. В содержимое страницы нужно вставлять прелоадер, а не наоборот, в статье же написано вроде, что вставляем после body
dimadv7, добрый день, я вроде так и делаю, в head вношу скрипт и стили, а сразу после body идет код
а далее собственно содержимое страницы. Если это важно — содержимое есть фрейм с большим тяжелым документом pdf, который открывается несколько секунд. Как раз на время открытия и нужен прелоадер. Т.е. далее после выше указанного кода в body идет
В итоге при открытии страницы исправно запускается прелоадер, далее открывается фрейм с документом, а прелоадер так и остается поверх всего.
Что не так делаю?
а без фрейма - все ок? Исчезает после загрузки страницы?
без фрейма прелоадер так и крутиться, никуда не исчезает. Может, дело в скрипте? Пробовал до скрипта подключать jQuery, не помогает.
А в консоли ошибок нет? О том, что jQuery нужен - написано в статье. Скрипт поместите перед закрывающим тегом body.
А такой лоадер, только перед загрузкой картинки, может кто посоветовать? Без плагинов, на JS.
Как сделать в Вордпресс что бы лоадер грузился только на главной странице?
Если бы ещё один раз только показывался, то вообще классно было бы.
(Именно на этом примере)
Martin, загуглите функцию "is_front_page()", а по поводу только 1 раз. Сделайте пометку в cookies или localstorage.
Привет, большое Спасибо за полезную фичу. Есть проблема. Периодически оверлей не исчезает, продолжает крутиться поверх всего уже загруженного контента. Но не всегда. С чем может быть связано? Спасибо
Игорь, возможно появляется какая-то ошибка в консоли браузера, блокирующая дальнейшую работу jQuery. Не сталкивался с таким, но в момент появления ошибки нужно открыть консоль и чекнуть на наличие посторонних ошибок, связанных с js.