Product with Full Image (Top), 4 Images (Left Side)

Description

  • product detail page layout with fullbleed image (top), product gallery 2 columns with 2 images/row
  • view demo – password: abc
  • buy me a coffee

09.26c05v2 Product with Full Image (Top), 4 Images (Left Side)

#1. Install Code

#1.1. Make sure you use this layout on Product Detail Page

09.26c05v2 Product with Full Image (Top), 4 Images (Left Side)

#1.2. Next, use this code to Store Page Header Injection

<!-- 09.26c05v2 Product with Full Image (Top), 4 Images (Left Side) -->
<script>
window.ProductSplitGalleryConfig = {
  desktopMinWidth: 768,
  columnGap: "20px",
  topImageHeight: "400px"
};
</script>
<script>
(function () {
  "use strict";
  var cfg = window.ProductSplitGalleryConfig || {};
  var minW = cfg.desktopMinWidth || 768;
  var gap = cfg.columnGap || "20px";
  var topH = cfg.topImageHeight;

  injectCSS();

  function injectCSS() {
    if (document.getElementById("psg-style")) { return; }
    var topImgRules = topH
      ? "display:block;width:100%;height:" + topH + ";object-fit:cover;object-position:50% 50%;"
      : "display:block;width:100%;height:auto;";
    var css =
      "@media (min-width:" + minW + "px){" +
        "body:not(.sqs-edit-mode-active) .product-detail:not(.psg-ready){visibility:hidden;position:relative;}" +
        "body:not(.sqs-edit-mode-active) .product-detail:not(.psg-ready)::after{content:'';visibility:visible;position:absolute;top:50%;left:50%;width:40px;height:40px;margin:-20px 0 0 -20px;border:3px solid rgba(0,0,0,0.15);border-top-color:rgba(0,0,0,0.6);border-radius:50%;animation:psg-spin 0.8s linear infinite;z-index:10;}" +
        "@keyframes psg-spin{to{transform:rotate(360deg);}}" +
        "body:not(.sqs-edit-mode-active) .product-detail .psg-top-image{width:100%;margin-bottom:" + gap + ";}" +
        "body:not(.sqs-edit-mode-active) .product-detail .psg-top-image img{" + topImgRules + "}" +
        "body:not(.sqs-edit-mode-active) .product-detail .psg-grid{display:grid;grid-template-columns:1fr 1fr;gap:" + gap + ";}" +
        "body:not(.sqs-edit-mode-active) .product-detail .psg-grid-item img{display:block;width:100%;height:auto;}" +
        "body:not(.sqs-edit-mode-active) .product-detail.psg-built .product-gallery-scroll,body:not(.sqs-edit-mode-active) .product-detail.psg-built .product-gallery-slides{display:none !important;}" +
      "}";
    var s = document.createElement("style");
    s.id = "psg-style";
    s.textContent = css;
    (document.head || document.documentElement).appendChild(s);
  }

  function isDesktop() {
    return window.matchMedia("(min-width:" + minW + "px)").matches;
  }

  function isEditMode() {
    return !!(document.body && document.body.classList.contains("sqs-edit-mode-active"));
  }

  function withFormat(u, f) {
    return u + (u.indexOf("?") === -1 ? "?format=" + f : "&format=" + f);
  }

  function build() {
    var detail = document.querySelector(".product-detail");
    if (!detail) { return false; }
    if (detail.getAttribute("data-psg-done") === "1") { return true; }
    var gallery = detail.querySelector('[data-product-gallery="container"]');
    var layoutWrap = detail.querySelector("[data-product-detail-layout]");
    var thumbs = gallery ? gallery.querySelectorAll(".product-gallery-thumbnails-item-image") : [];
    if (!gallery || !layoutWrap || !thumbs.length) { return false; }

    detail.setAttribute("data-psg-done", "1");

    try {
      var urls = [];
      for (var i = 0; i < thumbs.length; i++) {
        var u = thumbs[i].getAttribute("data-image") || thumbs[i].getAttribute("data-src");
        if (u) { urls.push({ url: u, alt: thumbs[i].getAttribute("alt") || "" }); }
      }
      if (urls.length) {
        var topWrap = document.createElement("div");
        topWrap.className = "psg-top-image";
        var topImg = document.createElement("img");
        topImg.src = withFormat(urls[0].url, "2500w");
        topImg.alt = urls[0].alt;
        topWrap.appendChild(topImg);
        detail.insertBefore(topWrap, layoutWrap);

        var grid = document.createElement("div");
        grid.className = "psg-grid";
        for (var j = 1; j < urls.length; j++) {
          var cell = document.createElement("div");
          cell.className = "psg-grid-item";
          var im = document.createElement("img");
          im.src = withFormat(urls[j].url, "1500w");
          im.alt = urls[j].alt;
          cell.appendChild(im);
          grid.appendChild(cell);
        }
        gallery.appendChild(grid);

        detail.classList.add("psg-built");
      }
    } catch (e) {}

    detail.classList.add("psg-ready");
    return true;
  }

  function forceReveal() {
    var d = document.querySelector(".product-detail");
    if (d) { d.classList.add("psg-ready"); }
  }

  function schedule() {
    if (!isDesktop() || isEditMode()) { return; }
    if (!document.querySelector(".product-detail")) { return; }
    var start = Date.now();
    (function poll() {
      if (build()) { return; }
      if (Date.now() - start > 3000) { forceReveal(); return; }
      requestAnimationFrame(poll);
    })();
  }

  if (document.readyState === "loading") {
    document.addEventListener("DOMContentLoaded", schedule);
  } else {
    schedule();
  }
  window.addEventListener("load", schedule);
  window.addEventListener("mercury:load", schedule);
})();
</script>

09.26c05v2 Product with Full Image (Top), 4 Images (Left Side)

Buy me a coffee