Эффект батута для просмотра изображений


Информация, представленная на этой странице ориентирована в первую очередь для начинающих web-мастеров.

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

Демо-пример Исходники (849 кб)

Если возникают проблемы при скачивании файлов, например, через браузер, скопируйте ссылку (правая кнопка мыши → копировать адрес ссылки) и скачайте файл через Download Master.


Установка на сайт

меткаСкачайте учебный материал в отдельную папку на компьютере, распакуйте, проверьте работу эффекта, открыв поочередно файлы demo.html и demo2html в вашем браузере.

меткаЕсли всё работает, подберите изображения, разместите их в папке img и закачайте все файлы в соответствующие папки на сервер своего сайта. В индексных файлах проверьте соответствие путей к скриптам и стилям.

В общем-то на этом можно и закончить. Выполнив эти два шага, можно самостоятельно легко разобраться и применить данный способ, но, по традиции жанра и, если есть желание, можно ознакомиться с пояснениями.

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

<div id="morph-shape" class="morph-shape" data-morph-next="M301,301c0,0-83.8-21-151-21C71.8,280-1,301-1,301s21-65.7,21-151C20,79.936-1-1-1-1s73,11,151,11c85 0,151-11,151-11s-21,66.43-21,151C280,229.646,301,301,301,301z">
	<svg width="100%" height="100%" viewBox="0 0 300 300" preserveAspectRatio="none">
		<path d="M301,301c0,0-83.8,0-151,0c-78.2,0-151,0-151,0s0-65.7,0-151C-1,79.936-1-1-1-1s73,0,151,0c85,0,151,0,151,0s0,66.43,0,151
C301,229.646,301,301,301,301z">
	</svg>
</div>

В этом участке кода пропишите пути к вашим изображениям и заполните все необходимые поля с названиями:


<div class="stack">
<ul id="elasticstack" class="stack__images">
<li><img src="img/1.jpg" alt="Су-27"></li>
<li><img src="img/2.jpg" alt="Т-50"></li>
<li><img src="img/3.jpg" alt="Су-34"></li>
<li><img src="img/4.jpg" alt="Як-130"></li>
<li><img src="img/5.jpg" alt="Су-30"></li>
<li><img src="img/6.jpg" alt="МиГ-35"></li>
<li><img src="img/7.jpg" alt="Су-47"></li>
</ul>
<button id="stack-next" class="stack__next"><i class="icon icon-down"></i><span>Next</span></button>
<ul id="stack-titles" class="stack__titles">
<li class="current">
<p>Су-27 - многоцелевой истребитель-перехватчик</p>
</li>
<li>
<p>Истребитель пятого поколения ПАК ФА Т-50</p>	
</li>
<li>
<p>Су-34 - фронтовой бомбардировщик</p>
</li>
<li>
<p>Як-130 - учебно-боевой самолет</p>
</li>
<li>
<p>Су-30 - двухместный истребитель поколения «4+»</p>
</li>
<li>
<p>Истребитель МиГ-35</p>
</li>
<li>
<p>Российский истребитель Су-47 (С-37) «Беркут»</p>
</li>
</ul>
</div>

Форма morph должна быть растянута на всю страницу:


.morph-shape {
	position: absolute;
	width: 100%; 
	height: 100%;
	top: 0;
	left: 0;
}

.morph-shape svg {
	position: absolute;
	margin: 0;
	pointer-events: none;
}

Стили для картинок определяются свойством stack. Используется перспектива в ul для изображений, так чтобы можно было позиционировать их в 3D-пространстве. Последние два свойства в этом блоке отвечают за возможность смены картинок путём перетаскивания.


.stack ul {
	position: relative;
	margin: 0 auto;
	padding: 0;
	list-style: none;
}

.stack ul li {
	position: absolute;
	width: 100%;
	opacity: 0;
}

ul.stack__images {
	width: 400px;
	height: 300px;
	z-index: 10;
	perspective: 1000px;
	perspective-origin: 50% -50%;
}

@media screen and (max-height: 530px), screen and (max-width: 400px) {
	ul.stack__images {
		width: 260px;
		height: 195px;
	}
}

.stack__images li {
	top: 0;
	z-index: 1;
	transform: translate3d(0, 0, -180px);
	transform-style: preserve-3d;
}

.stack__images li img {
	display: block;
	max-width: 100%;
	pointer-events: none;
}

.stack__images li:hover {
	cursor: url(../img/cursor_vulcan.png), auto;
}

.stack__images li:active {
	cursor: -webkit-grabbing;
	cursor: grabbing;
}

.stack__images li.animate {
	transition: all 0.3s ease-out;
}

.stack__images li.move-back {
	transition-timing-function: cubic-bezier(0.175, 0.885, 0.470, 1.515);
}

Проверьте путь к изображению курсора.

Другие элементы, такие как кнопки навигации и названия имеют следующие стили:


.stack__next {
	border: none;
	background: none;
	display: block;
	padding: 0;
	overflow: hidden;
	width: 36px;
	height: 36px;
	margin: 10px auto 0;
	font-size: 30px;
	position: relative;
	cursor: pointer;
	color: #067ba7;
}

.stack__next:hover {
	color: #fff;
}

.stack__next:focus {
	outline: none;
}

.stack__next span {
	position: absolute;
	top: 200%;
}

ul.stack__titles {
	height: 18vh;
	max-width: 560px;
	width: 95%;
}

.stack__titles blockquote {
	margin: 0;
	text-align: center;
	font-size: 1.4em;
}

.stack__titles blockquote footer {
	font-size: 50%;
	padding-bottom: 1em;
	font-family: 'Montserrat', Arial, sans-serif;
}

.stack__titles li {
	pointer-events: none;
	transition: opacity 0.45s ease;
}

.stack__titles li.current {
	opacity: 1;
	pointer-events: auto;
}

В демо-версии №2 сделано небольшое изменение, благодаря которому появилась возможность вращения контейнера на 10 градусов на Z-оси и -6deg на X-оси:


.morph-shape svg {
	fill: #01AEF0;
	transition: fill 0.1s ease-out;
}

.navigate-next .morph-shape svg {
	fill: #01a0dc;
	transition-duration: 0.45s;
}

.container {
	transition: transform 0.1s cubic-bezier(0.6, 0, 0.5, 1);
}

.demo-1.navigate-next .container {
	transition-duration: 0.45s;
	transform: translate3d(0, 0, -600px);
}

.demo-2.navigate-next .container {
	transition-duration: 0.45s;
	transform: rotate3d(-0.5, 0, 1, -6deg) translate3d(0, 0, -600px);
}

.demo-2 .morph-shape svg {
	fill: #A2CD72;
}

.demo-2.navigate-next .morph-shape svg {
	fill: #95C264;
}

Вот и все! Буду надеяться, что эффект и урок Вам понравились. Спасибо за внимание. Посещайте мой сайт. Пока! L.M.


Ваше мнение по материалу, изложенному на сайте




  © 2015–2024  dynamic-site.olerant.ru  L.M. Служба поддержки Яндекс.Метрика