chevron-left chevron-right

Piotr Nalepa Frontend, architecture and AI

[CSS][jQuery] Ciekawa galeria zdjęć z efektem scenicznym

This version
blog.piotrnalepa.pl/2009/11/26/cssjquery-ciekawa-galeria-zdjec-z-efektem-scenicznym
Published
Author
, Staff Software Engineer
Categories
CSS, JavaScript
Feedback
Write to me · Post on X

This post is 16 years old. Browsers and tools may have changed since then, so check the code against current documentation before you use it.

Po dłuższym okresie bez pisania nowych artykułów postanowiłem się z Wami podzielić czymś nowym. Dzisiaj będzie to sposób na ciekawą prezentację zdjęć w galerii. Wyobraźcie sobie ciemną scenę i światło padającego na jednego aktora. Tego typu efekt osiągnięcie podążając śladem tego artykułu.

Zaczynamy od kodu HTML, który jak zwykle nie jest niczym wyszukanym:

Example 1HTML
<div class="galeria">
    <ul>
    <li><a href="#"><img src="img/logo.jpg" /></a></li>
    <li><a href="#"><img src="img/logo2.jpg" /></a></li>
    <li><a href="#"><img src="img/logo.jpg" /></a></li>
    <li><a href="#"><img src="img/logo2.jpg" /></a></li>
    <li><a href="#"><img src="img/logo2.jpg" /></a></li>
    <li><a href="#"><img src="img/logo.jpg" /></a></li>
    <li><a href="#"><img src="img/logo2.jpg" /></a></li>
    <li><a href="#"><img src="img/logo.jpg" /></a></li>
    <li><a href="#"><img src="img/logo.jpg" /></a></li>
    <li><a href="#"><img src="img/logo2.jpg" /></a></li>
    <li><a href="#"><img src="img/logo.jpg" /></a></li>
    <li><a href="#"><img src="img/logo2.jpg" /></a></li>
    <li><a href="#"><img src="img/logo2.jpg" /></a></li>
    <li><a href="#"><img src="img/logo.jpg" /></a></li>
    <li><a href="#"><img src="img/logo2.jpg" /></a></li>
    <li><a href="#"><img src="img/logo.jpg" /></a></li>
    </ul>
</div>
Następnie dodajemy trochę stylów do naszej galerii:
Example 2CSS
.galeria ul {
	list-style-type: none;
	margin: 0px;
	padding: 0px;
}
.galeria ul li {
	float: left;
}
.galeria ul li a img {
	width: 120px;
	position: relative;
	border: none;
}
.galeria ul li a img.aktywny {
	border: 4px solid #fff;
	z-index: 1;
	left: -4px;
	top: -4px;
}
A na koniec dodajemy skrypt JavaScript opart o bibliotekę jQuery (którą należy też dodać do kodu strony, bo inaczej przykład nie zadziała).
Example 3JavaScript
$(window).load(function(){
	var aktor = {
		 // tutaj ustawiamy "przeźroczystość" obrazków
		opacity : 0.2,
		// te zmienne odpowiadają za ustawienie tej samej szerokości i wysokości dla 'li' na podstawie wysokości i szerokości obrazków
		imgWidth : $('.galeria ul li').find('img').width(),
		imgHeight : $('.galeria ul li').find('img').height() 
	};
	// ustawia taką samą wysokość i szerokość pozycji w liście jaką mają obrazki
	$('.galeria ul li').css({ 'width' : aktor.imgWidth, 'height' : aktor.imgHeight });
	// kiedy kursor jest nad pozycją z listy...
	$('.galeria ul li').hover(function(){
		//... znajduje obrazek w tej pozycji i nadaje klasę 'aktywny' i zmienia jego przeźroczystość na 1 (1 to pełna widoczność, a 0 to brak widoczności)
		$(this).find('img').addClass('aktywny').animate({'opacity' : 1}, 100);
		// pobiera inne obrazki z listy i ustawia im przeźroczystość o wartości podanej w atrybutach zmiennej aktor oraz animuje przejścia przeźroczystości
		$(this).siblings('li').find('img').animate({'opacity' : aktor.opacity}, 100)
		// kiedy kursor zmienia położenie ...
	}, function(){
		//... pobierz obrazek z pozcyji opuszczonej i usuń klasę 'aktywny'
		$(this).find('img').removeClass('aktywny');
	});
	// kiedy kursor opuszcza przestrzeń galerii ...
	$('.galeria ul').bind('mouseleave',function(){
		// to zmienia przeźroczystość wszystkich obrazków na 1
		$(this).find('img').animate({'opacity' : 1}, 100);
	});
});
W ten sposób osiągnięcie bardzo fajną galerię, którą będziecie mogli się pochwalić wsyzstkim na swojej stronie 🙂
Demo z tego artykułu znajdziecie tutaj: Galeria zdjęć z efektem scenicznym

Share
Feedback

About the author

Staff Software Engineer

I've been writing this blog since 2009 and building for the web professionally for 14 years. Today I lead the frontend of the Cosmos platform at Bishop Fox, where I've been since day one of the project. Before that I worked at OLX, KUDO, Auto1 and eZ Systems. Here I write about what I've learned in practice: JavaScript, TypeScript, React, CSS and frontend architecture. I've also spoken at conferences across Poland and Europe. Got a question or an idea for a post? Let me know!