Prefetch Manager

Progress:0/0
Success
0
Failed
0
Pending
0
Time
0s
Success URLs(0)
Failed URLs(0)
Pending URLs(0)

Cara membuat Gambar di Website / Blog kamu menggunakan Fitur Lightbox (Vanilla Javascript)

Di dunia web development sekarang, bikin interface yang elegan dan user-friendly itu jadi prioritas utama. Salah satu cara ampuh buat ningkatin user experience di website kamu adalah dengan implementasi fitur lightbox image. Lightbox memungkinkan kamu buat nampilin gambar dalam overlay yang bebas gangguan, makanya jadi pilihan favorit buat showcase gallery atau gambar-gambar berukuran besar. Di tutorial kali ini, kita bakal ngebantu kamu bikin custom lightbox image pakai vanilla JavaScript, jadi kamu bisa integrasiin dengan mulus ke halaman web kamu sendiri.

Styling yang Kece

Pertama-tama, tambahin CSS berikut ini:

/*! Image Lightbox CSS
 * Copyright: Han Haoyu - Platform
 * License: MIT
 */
.LightboxImagebyHHC{position:relative}
.LightboxImagebyHHC::before{content:'';position:absolute;top:10px;right:5px;width:30px;height:30px;display:flex;margin:0 5px;background: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23363637' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3'/></svg>") center / 14px no-repeat;background-color:rgba(0,0,0,.2);border-radius:50%;z-index:2;opacity:0;transition:all 0.2s ease;cursor:pointer}
.LightboxImagebyHHC:hover::before{opacity:1}
.LightboxImagebyHHC img {cursor:zoom-in;}
.LBimgByHHC{position:fixed;top:0;left:0;bottom:0;right:0;background:rgba(0,0,0,0.75);display:flex;align-items:center;justify-content:center;z-index:999;-webkit-backdrop-filter:saturate(180%) blur(15px);backdrop-filter:saturate(180%) blur(15px);opacity:0;visibility:hidden;transition:all 0.4s ease;}
.LBimgByHHC.active{opacity:1;visibility:visible}
.LBimgByHHC a, .LBimgByHHC a:hover{opacity:1}
.LBimgByHHC img{display:block;max-width:92%;max-height:92%;width:auto;margin:auto;border-radius:10px;box-shadow:0 5px 30px 0 rgba(0,0,0,.05);transform:scale(0.4);transition:all 0.4s ease;transition-property:transform;}
.LBimgByHHC.active img {transform:scale(1);cursor:zoom-out;}
.LBimgByHHC img.full{left:auto;right:auto;border-radius:10px;width:auto}
.LBimgByHHC::after{content:'\2715';line-height:16px;font-size:14px;color:#fffdfc;background:#482dff;position:fixed;bottom:-20px;right:-20px; display:flex;align-items:center;justify-content:center;width:45px;height:45px;border-radius:50%;opacity:0;visibility:hidden;transition:all 0.4s ease;}
.LBimgByHHC.active::after{bottom:20px;right:20px;opacity:1;visibility:visible;cursor:pointer}

Buat mastiin lightbox kamu cocok sama desain website, jangan lupa sesuaikan style CSS-nya. Kamu bisa atur style container lightbox, tombol close, dan elemen-elemen lainnya sesuai kebutuhan supaya tampilannya cohesive dan enak dilihat. Semuanya bisa kamu custom sesuka hati buat bikin pengalaman visual yang lebih ciamik.

Keajaiban JavaScript

Nah sekarang, mari kita selami kode JavaScript-nya buat bikin fungsionalitas lightbox kamu jalan dengan smooth. Tambahin kode JavaScript berikut ke script yang udah ada atau bikin file JavaScript baru:

/*! Image Lightbox Script
 * Copyright: Han Haoyu - Platform
 * License: MIT
 */
(function (options) {
  function getType (e) {
      return Object.prototype.toString.call(e).replace(/(?:^\[object\s(.*?)\]$)/,"$1").toLowerCase();
  }
  const images = Array.prototype.filter.call(
      getType(options.selectors) === "string" ?
          document.querySelectorAll(options.selectors) :
          (getType(options.selectors) === "array" ?
            document.querySelectorAll(options.selectors.join(",")) :
            []),
      function (image) {
          return image.tagName === "IMG" && (getType(options.ignoreClass) === "string" && options.ignoreClass ? !image.classList.contains(options.ignoreClass) : true);
      }
  );
  if (images.length === 0) {
      return;
  }
  const lightBox = document.createElement("div");
  lightBox.className = options.classes.lightboxWrapper;
  lightBox.addEventListener("click", function (event) {
      lightBox.classList.remove("active");
  });
  lightBox.addEventListener("transitionend", function (event) {
      if (event.propertyName === "opacity" && getComputedStyle(lightBox).getPropertyValue("opacity") === "0" && !lightBox.classList.contains("active")) {
          lightBox.parentNode.removeChild(lightBox);
      }
  });
  images.forEach(function (image) {
      const imageContainer = document.createElement("div");
      imageContainer.className = options.classes.imageWrapper;
      image.parentNode.insertBefore(imageContainer, image);
      imageContainer.appendChild(image);
      imageContainer.addEventListener("click", function (event) {
          event.preventDefault();
          lightBox.innerHTML = image.outerHTML;
          document.body.appendChild(lightBox);
          setTimeout(function () {
              lightBox.classList.add("active");
          }, 40);
      });
  });
}).call(this, {
  selectors: "#postBody img",
  ignoreClass: "noLb",
  classes: {
    imageWrapper: "LightboxImagebyHHC",
    lightboxWrapper: "LBimgByHHC"
  }
});

Kode ini bakal dengerin setiap klik di gambar gallery kamu terus nampilin gambar yang dipilih dalam mode lightbox. Selain itu, user juga bisa nutup lightbox dengan gampang tinggal klik tombol close atau area di luar gambar. Simple tapi powerful banget kan?

Kesimpulan

Dengan bikin custom lightbox image pakai vanilla JavaScript, kamu dapet kontrol penuh atas fungsionalitas dan tampilannya. Ini memungkinkan kamu buat integrasiin dengan mulus ke desain website, sekaligus kasih pengalaman image viewing yang menyenangkan buat pengunjung. Inget ya, jangan ragu buat sesuaikan style dan fungsionalitasnya supaya cocok sama kebutuhan project kamu. Selamat berkreasi dan semoga fitur versatile ini bisa bikin website kamu makin keren. Happy coding!

Copyright (c):
hanhaoyu.com

About the author

Han Haoyu
Hai semuanyaa, it's me, i'm here~ Hai semuanyaa, it's me, i'm here~

Posting Komentar

Terima kasih atas kunjungan Anda di website kami. Kami sangat menghargai setiap komentar dan masukan yang diberikan oleh pembaca kami. Sebelum mengirimkan komentar, harap diingat untuk tetap mengikuti etika dan sopan santun dalam berkomunikasi. Kami tidak akan mentoleransi komentar yang mengandung pelecehan, intimidasi, diskriminasi, atau konten yang tidak pantas.

Pastikan komentar yang Anda sampaikan relevan dengan topik postingan dan tidak melanggar hak cipta atau privasi orang lain. Kami berhak untuk meninjau, mengedit, atau menghapus komentar yang tidak sesuai dengan kebijakan kami tanpa pemberitahuan sebelumnya.

Kami mengundang Anda untuk memberikan masukan yang konstruktif dan berguna bagi pembaca kami. Silakan berikan pendapat, saran, atau pengalaman Anda yang dapat meningkatkan kualitas konten kami dan memberikan manfaat bagi pembaca lainnya. Terima kasih atas partisipasi Anda dalam komunitas kami. Silakan berkomentar dengan bijak dan santun.

Gabung dalam percakapan

Gabung dalam percakapan