chevron-left chevron-right

Piotr Nalepa Frontend, architektura i AI

[jQuery] Zmiana widoku listy za pomocą jQuery

Ta wersja
blog.piotrnalepa.pl/2012/06/16/jquery-zmiana-widoku-listy-za-pomoca-jquery
Opublikowano
Autor
, Staff Software Engineer
Kategoria
JavaScript
Uwagi
Napisz do mnie · Napisz na X

Ten wpis ma 14 lat. Od tego czasu przeglądarki i narzędzia mogły się zmienić, więc zanim użyjesz kodu, sprawdź go z aktualną dokumentacją.

Dzisiejszy wpis będzie krótki, lecz treściwy. Jego celem będzie przedstawienie sposobu na dynamiczną zmianę wyglądu listy za pomocą kilku kawałków kodu JS/jQuery.

Sekcja 1Struktura kodu HTML

Na początek musimy przygotować strukturę kodu HTML. W tym przypadku wygląda ono następująco:

Przykład 1HTML
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
<section id="filter" class="span12">
	<ul>
		<li class="span1">
			<span class="btn btn-warning" id="filter-list"><i class="icon-th-list"></i></span>
		</li>
		<li class="span1">
			<span class="btn btn-danger" id="filter-thumb"><i class="icon-th"></i></span>
		</li>
	</ul>
</section>
<section class="span12" id="items">
	<ul class="normal-list">
		<li >
			<figure>
				<img src="img/img.jpg" alt=""/>
				<figcaption>
					<h3>Tekst</h3>
					<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
				</figcaption>
			</figure>
		</li>
		<li >
			<figure>
				<img src="img/img.jpg" alt=""/>
				<figcaption>
					<h3>Tekst</h3>
					<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
				</figcaption>
			</figure>
		</li>
		<li >
			<figure>
				<img src="img/img.jpg" alt=""/>
				<figcaption>
					<h3>Tekst</h3>
					<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
				</figcaption>
			</figure>
		</li>
		....
	</ul>
</section>

Najpierw zdefiniowałem sekcję w której będą przyciski do zmiany widoku. Element o id filter-list będzie odpowiedzialny za włączanie widoku listy, a element o id filter-thumb będzie odpowiedzialny za włączenie widoku miniaturek. W kolejnej sekcji znajduje się lista elementów, które zawierają obrazki oraz tekst pod nimi. W normalnym widoku tekst się pojawia obok obrazków. Natomiast w widoku miniaturek tekst do obrazka będzie się pojawiał jako dymek obok podczas najazdu myszki na obrazek.

Sekcja 2Podstawowe style dla listy

W tym przykładzie postanowiłem wykorzystać kilka klas z frameworka Twitter Bootstrap uzupełnionych moim kodem CSS. Dodatkowy kod CSS wygląda następująco:

Przykład 2CSS
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
ul 				{ list-style: none; }
figure				{ margin: 1.875%; }
h1				{ text-align: center; }
#page				{ margin: auto; }
#filter	ul			{ float: right; }
.normal-list li 		{
	clear: both;
	padding: 0.9375%;
	width: 100%;
}
.normal-list img 		{ 
	float: left;
	width: 10%;
	margin: 0.9375% 0.9375% 0 0;
}
.normal-list figcaption { 
	float: left;
	width: 89%;
}
.thumb-list li {
	width: 22%;
	margin-right: 0.9375%;
	float: left;
	position: relative;
	display: inline-block;
	cursor: pointer;
}
.thumb-list li h3 	{ text-align: center; }
.thumb-list li p 	{
	/* ukrywamy paragraf z tekstem w widoku miniaturek */
	display: none;
	visibility: hidden;
}
.thumb-list li:hover p {
	/* tutaj wyświetlamy paragraf po najechaniu kursora myszki na element listy */
	display: block;
	visibility: visible;
	position: absolute;
	-webkit-border-radius: 4px;
	border-radius: 4px;
	background: #cfcfcf;
	width: 100%;
	right: -110%;
	top: 5px;
	z-index: 3;
	padding: 4%;
	-webkit-box-shadow: 0px 0px 4px 0px #333;
	box-shadow: 0px 0px 4px 0px #333;
}

Jak widać, kod nie jest specjalnie skomplikowany. Wykrozystałem upiększacze ze zbioru CSS3 takie jak: box-shadow i border-radius oraz dla dymka z tekstem ustawiłem pozycjonowanie absolutne aby dymek pojawiał się obok obrazka.

Sekcja 3Interakcje z listą za pomocą kodu JS

W tym miejscu zostanie opisany kod JS odpowiedzialny za przełączanie widoku listy. Został on utworzony przy pomocy biblioteki jQuery, dlatego należy pamiętać, aby ją dołączyć do kodu. Sam kod odpowiedzialny za interkację użytkownika wygląda następująco:

Przykład 3JavaScript
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
$(function () {
 
	function pde(e) {
	    if (e.preventDefault) {
	    	e.preventDefault();
	    } else {
	    	e.returnValue = false;
	    }
	}
 
	$('#filter-list').on('click', function (e) {
		pde(e);
		var items = $('ul','#items');
		if (!items.hasClass('normal-list')) {
			items.removeClass('thumb-list').addClass('normal-list');
		}
 
		var figure = items.find('figure');
		figure.each(function (k,v) {
			if ($(this).hasClass('thumbnail')) {
				$(this).removeClass('thumbnail');
			}
		});
	});
 
	$('#filter-thumb').on('click', function (e) {
		pde(e);
		var items = $('ul','#items');
		if (!items.hasClass('thumb-list')) {
			items.removeClass('normal-list').addClass('thumb-list');
		}
 
		$(items).find('figure').each(function (k) {
			$(this).addClass('thumbnail');
		});
	});
});

Powyższy kod obejmuje obsługę zdarzenia kliknięcia na każdym z przycisków. Po naciśnięciu przycsku następuje usunięcie i dodanie odpowiedniej klasy z/do elementów. W ten sposób można dynamicznie zmieniać wygląd listy.
Można zauważyć tez dodatkową rzecz jaką jest funkcja pde. Jest to funkcja odpowiedzialna za wykrywanie czy przeglądarka obsługuje blokowanie domyślnych zachowań elementów (bardzo przydatne w przypadku starszy wersji IE).

Sekcja 4Podsumowanie

Powyższy kod przedstawia sposób na uzyskanie ciekawego efektu zmiany wyglądu listy za pomocą przełączników. Oprócz samej zmiany klas można kod uzupełnić o inne akcje, np. animacje przejścia między widokami. Tego typu rozwiązanie może być zastosowane w galeriach prac lub produktów, zwiększając przyjemność korzystania ze stron WWW.

Demo z tego artykułu jest dostępne tutaj: jQuery zmiana widoku listy

Udostępnij
Uwagi

O autorze

Staff Software Engineer

Piszę na tym blogu od 2009 roku, a strony i aplikacje webowe tworzę zawodowo od 14 lat. Obecnie w Bishop Fox prowadzę frontend platformy Cosmos, od samego początku projektu. Wcześniej pracowałem m.in. w OLX, KUDO, Auto1 i eZ Systems. Piszę tu o tym, czego nauczyłem się w praktyce: o JavaScripcie, TypeScripcie, Reakcie, CSS-ie i architekturze frontendu. Występowałem też jako prelegent na konferencjach w Polsce i Europie. Masz pytanie albo pomysł na wpis? Daj znać!