JavaScript Slideshow Dasar
<figure>
<img src="" id="image" alt="">
<span id="loading">Loading...</span>
<nav>
<span id="prev"><a href="javascript:navigate(0);">Prev</a></span>
- <strong id="num"></strong> -
<span id="next"><a href="javascript:navigate(1);">Next</a></span>
</nav>
</figure>
<script>
var slide = [
"image/image1.jpg",
"image/image1.jpg",
"image/image1.jpg",
"image/image1.jpg",
"image/image1.jpg"
],
prev = document.getElementById('prev'),
next = document.getElementById('next'),
curr = document.getElementById('num'),
prev_a = prev.innerHTML,
next_a = next.innerHTML,
prev_d = prev_a.replace(/<\S[^>]*>/g, ""),
next_d = next_a.replace(/<\S[^>]*>/g, ""),
img = document.getElementById('image'),
loading = document.getElementById('loading'),
i = 0;
img.setAttribute('src', slide[i]);
if (i == 0) {
prev.innerHTML = prev_d;
curr.innerHTML = "Image " + (i + 1) + " of " + slide.length;
}
// SISTEM NAVIGASI
function navigate(dir) {
prev.innerHTML = prev_a;
next.innerHTML = next_a;
if (dir == 1) {
i++;
img.setAttribute('src', slide[i]);
if (i == slide.length - 1) next.innerHTML = next_d;
} else {
i--;
img.setAttribute('src', slide[i]);
if (i == 0) prev.innerHTML = prev_d;
}
curr.innerHTML = "Image " + (i + 1) + " of " + slide.length;
loading.style.display = "block";
img.style.display = "none";
}
img.onload = function() {
loading.style.display = "none";
this.style.display = "block";
};
</script>
Penjelasan Singkat
Kerangka slideshow terdiri dari elemen <figure>
dimana di dalamnya terdapat elemen gambar dengan nilai src
kosong dan juga navigasi:
<figure>
<img src="" id="image" alt="">
<span id="loading">Loading...</span>
<nav>
<span id="prev"><a href="javascript:navigate(0);">Prev</a></span>
- <strong id="num"></strong> -
<span id="next"><a href="javascript:navigate(1);">Next</a></span>
</nav>
</figure>
Setiap slide dikumpulkan dalam array, dan akan digilir penyisipan URL gambarnya setiap kali navigasi diklik:
var slide = [ // Setiap slide dikumpulkan dalam array
"image/image1.jpg", // slide[0]
"image/image1.jpg", // slide[1]
"image/image1.jpg", // slide[2]
"image/image1.jpg", // slide[3]
"image/image1.jpg" // slide[4]
// Dan seterusnya...
// Tambahkan sendiri. Pisahkan setiap slide dengan tanda koma
];
Meringkas semua elemen yang ditemukan menjadi variabel:
prev = document.getElementById('prev'), // Navigasi mundur
next = document.getElementById('next'), // Navigasi maju
curr = document.getElementById('num'), // Deskripsi halaman saat ini
prev_a = prev.innerHTML, // Duplikat konten navigasi mundur
next_a = next.innerHTML, // Duplikat konten navigasi maju
prev_d = prev_a.replace(/<\S[^>]*>/g, ""), // Navigasi mundur berupa teks mati
next_d = next_a.replace(/<\S[^>]*>/g, ""), // Navigasi maju berupa teks mati
img = document.getElementById('image'), // Gambar
loading = document.getElementById('loading'), // Indikator sedang memuat/loading
i = 0; // Awal
Set gambar dengan nilai src
berupa array slide[i]
. Saat ini nilai i
adalah 0
, jadi array yang akan diambil adalah slide[0]
yaitu "image/image1.jpg"
// Set gambar dengan nilai src berupa array slide[0]
// Dalam hal ini: slide[i] = slide[0] = "image/1.jpg"
img.setAttribute('src', slide[i]);
Set tampilan navigasi slideshow pada posisi awal (yaitu navigasi mundur berupa tombol mati dan navigasi maju berupa tombol hidup). slide.length
adalah jumlah nilai di dalam slide
:
// Awalan: set tampilan navigasi mundur sebagai teks mati
// set deskripsi halaman saat ini menjadi "Image 1 of 5"
// Dalam hal ini: i = 0; (i + 1) = 1; slide.length = 5;
if (i == 0) {
prev.innerHTML = prev_d;
curr.innerHTML = "Image " + (i + 1) + " of " + slide.length;
}
Sistem Navigasi
Pada dasarnya ini hanyalah sebuah sistem untuk menambah dan mengurangi nilai i
. Pada awal deklarasi, nilai i
adalah 0
, saat navigasi maju diklik, maka nilai i
akan berubah menjadi 1
, kemudian menjadi 2
, menjadi 3
dan seterusnya. Begitu pula sebaliknya, saat navigasi mundur diklik, maka nilai i
akan berkurang. Proses peningkatan dan penambahan variabel ini berfungsi untuk mengganti nilai array slide[i]
dalam img.setAttribute('src', slide[i]);
sehingga URL gambar yang disisipkan akan berganti secara bergiliran dan berurutan:
// SISTEM NAVIGASI
function navigate(dir) {
// Langkah reset: Isi navigasi mundur dan maju dengan masing-masing duplikatnya
prev.innerHTML = prev_a;
next.innerHTML = next_a;
// Jika dir == 1, artinya navigasi maju, selain itu berarti navigasi mundur
// <a href="javascript:navigate(1);"> ** maju!
// <a href="javascript:navigate(0);"> ** mundur!
if (dir == 1) {
// Tingkatkan nilai i dengan 1 (i++ = i+1)
i++;
// Set gambar dengan nilai src berupa array slide[berikutnya]
img.setAttribute('src', slide[i]);
// Jika i < (5-1), set tampilan navigasi maju sebagai teks mati
if (i == slide.length - 1) next.innerHTML = next_d;
} else {
// Kurangi nilai i dengan 1 (i-- = i-1)
i--;
// Set gambar dengan nilai src berupa array slide[sebelumnya]
img.setAttribute('src', slide[i]);
// Jika i == 0, set tampilan navigasi mundur sebagai teks mati
if (i == 0) prev.innerHTML = prev_d;
}
// Set ulang deskripsi halaman saat ini setiap kali fungsi dieksekusi
// Dalam hal ini: setiap kali navigasi diklik
curr.innerHTML = "Image " + (i + 1) + " of " + slide.length;
// Tampilkan indikator sedang memuat
loading.style.display = "block";
// Sembunyikan gambar
img.style.display = "none";
}
Saat ini elemen gambar masih disembunyikan: img.style.display = "none";
Sedangkan indikator 'sedang memuat' ditampilkan: loading.style.display = "block";
Setelah gambar termuat, sembunyikan indikator “sedang memuat” dan tampilkan gambar:
// Saat gambar termuat...
img.onload = function() {
// Hilangkan indikator sedang memuat
loading.style.display = "none";
// tampilkan kembali gambar yang kita sembunyikan tadi
this.style.display = "block";
}
CSS
figure {
display:inline-block;
border:1px solid black;
background-color:white;
padding:10px;
margin:10px auto;
text-align:center;
}
figure nav {margin:10px 0 0;}
figure img {display:none;}
figure span {background-color:yellow;}
Labels: Gambar, JavaScript, Potongan
9 Comments:
wahhh nambah ilmu nihh
By abang ichal, at Sunday, July 8, 2012 at 5:32:00 PM GMT+7
Ternyata FeelingQ bener pasti sekali ngepost tentang Slideshow :D
By Sinto, at Sunday, July 8, 2012 at 6:39:00 PM GMT+7
muncul kembali mas topik :D
By Bayu Handono, at Sunday, July 8, 2012 at 9:08:00 PM GMT+7
Udah dapat wangisit setelah hilang dan tidak di ketahui keberadaan-nya beberapa pekan...heheee
keren dah dan perlu di coba ini....
By Unknown, at Monday, July 9, 2012 at 1:16:00 PM GMT+7
pertanyaan ane satu gan. bagaimana caranya setiap gambar yang di slider diberi keterangan masing-masing. terima kasih jawabannya.
By Lilih, at Wednesday, December 19, 2012 at 8:52:00 PM GMT+7
Tambahkan array satu lagi untuk daftar judul. Katakanlah namanya title:
var title = [
"Judul Gambar 1",
"Judul Gambar 2",
"Judul Gambar 3",
"Judul Gambar 4",
"Judul Gambar 5"
];
Jumlahnya harus sama dengan jumlah URL di dalam array slide. Setelah itu ganti semua kode ini:
curr.innerHTML = "Image " + (i + 1) + " of " + slide.length;
dengan kode ini, untuk menampilkan judul di samping keterangan indeks dan jumlah gambar:
curr.innerHTML = title[i] + " (Image " + (i + 1) + " of " + slide.length + ")";
Demo: http://jsfiddle.net/tovic/4Xtuy/
By Taufik Nurrohman, at Thursday, December 20, 2012 at 6:27:00 PM GMT+7
mau nanya nih mas tofik
http://tympanus.net/Tutorials/CSS3FluidParallaxSlideshow/
bisa gak mas arrowsnya yang di sebelah kanan gak ilang walaupun slidenya udah abis (terakhir). jadi kedua arrowsnya bisa muncul walaupun slidenya udah abis/belum di putar. sehingga efek parallaxnya juga gak bolak-balik jadinya
intinya kita bisa mencet arrow yang di kanan terus X@
contohnya yang gak ilang2
http://tympanus.net/Tutorials/SlideshowJmpress/
(binggung mau jelasinnya kayak gimana)
tapi makasi ya mas sebelumnnya
By Unknown, at Tuesday, December 25, 2012 at 7:47:00 PM GMT+7
Tidak bisa kalau memakai CSS3.
By Taufik Nurrohman, at Tuesday, December 25, 2012 at 10:07:00 PM GMT+7
jadi solusinya gimana mas tofik??
pake url gambar ???
kayak gimana kodenya ???
thank's
By Unknown, at Tuesday, December 25, 2012 at 10:30:00 PM GMT+7
Post a Comment
<< Home