2016-11-21 6 views
0

画像ギャラリーがありますので、画像をクリックして関連画像を4つ表示したいと思います。関連する画像を表示するために、各画像にまったく新しいページを作成せずにこれを行う最善の方法は何ですか?ギャラリーから画像をクリックして複数の画像を同じページに表示

私はイメージギャラリーのためにこれを使用しています:私は(、スペースの限界に)1つのPNGファイルに4枚の画像を表示するには、Adobe InDesignのを使用している今の http://codepen.io/dimsemenov/pen/ZYbPJM

もちろん、より審美的かつスマートな方法があります。ソリューションを提案してください。

<!DOCTYPE html> 
<html > 
<head> 
    <meta charset="UTF-8"> 
    <title>Imgur Results</title> 


    <link rel='stylesheet prefetch' href='https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.1/photoswipe.min.css'> 
<link rel='stylesheet prefetch' href='https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.1/default-skin/default-skin.min.css'> 

     <link rel="stylesheet" href="css/style.css"> 



</head> 

<body> 
    <h2>Banana:</h2> 

    <div class="my-gallery" itemscope itemtype="http://schema.org/ImageGallery"> 

    <figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject"> 
     <a href="imgur/banana/banana1.png" itemprop="contentUrl" data-size="900x900"> 

      <img src="imgur/banana/3NlNsLB.jpg" itemprop="thumbnail" alt="Image description" /> 

     </a> 

    </figure> 



    <figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject"> 
     <a href="imgur/banana/banana2.tif" itemprop="contentUrl" data-size="900x900"> 
      <img src="imgur/banana/6gqpgDV.jpg" itemprop="thumbnail" alt="Image description" /> 
     </a> 
    </figure> 

https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.1/photoswipe.min.js'>

<script src="js/index.js"></script> 

js:

var initPhotoSwipeFromDOM = function(gallerySelector) { 

    // parse slide data (url, title, size ...) from DOM elements 
    // (children of gallerySelector) 
    var parseThumbnailElements = function(el) { 
     var thumbElements = el.childNodes, 
      numNodes = thumbElements.length, 
      items = [], 
      figureEl, 
      linkEl, 
      size, 
      item; 

     for(var i = 0; i < numNodes; i++) { 

      figureEl = thumbElements[i]; // <figure> element 

      // include only element nodes 
      if(figureEl.nodeType !== 1) { 
       continue; 
      } 

      linkEl = figureEl.children[0]; // <a> element 

      size = linkEl.getAttribute('data-size').split('x'); 

      // create slide object 
      item = { 
       src: linkEl.getAttribute('href'), 
       w: parseInt(size[0], 10), 
       h: parseInt(size[1], 10) 
      }; 



      if(figureEl.children.length > 1) { 
       // <figcaption> content 
       item.title = figureEl.children[1].innerHTML; 
      } 

      if(linkEl.children.length > 0) { 
       // <img> thumbnail element, retrieving thumbnail url 
       item.msrc = linkEl.children[0].getAttribute('src'); 
      } 

      item.el = figureEl; // save link to element for getThumbBoundsFn 
      items.push(item); 
     } 

     return items; 
    }; 

    // find nearest parent element 
    var closest = function closest(el, fn) { 
     return el && (fn(el) ? el : closest(el.parentNode, fn)); 
    }; 

    // triggers when user clicks on thumbnail 
    var onThumbnailsClick = function(e) { 
     e = e || window.event; 
     e.preventDefault ? e.preventDefault() : e.returnValue = false; 

     var eTarget = e.target || e.srcElement; 

     // find root element of slide 
     var clickedListItem = closest(eTarget, function(el) { 
      return (el.tagName && el.tagName.toUpperCase() === 'FIGURE'); 
     }); 

     if(!clickedListItem) { 
      return; 
     } 

     // find index of clicked item by looping through all child nodes 
     // alternatively, you may define index via data- attribute 
     var clickedGallery = clickedListItem.parentNode, 
      childNodes = clickedListItem.parentNode.childNodes, 
      numChildNodes = childNodes.length, 
      nodeIndex = 0, 
      index; 

     for (var i = 0; i < numChildNodes; i++) { 
      if(childNodes[i].nodeType !== 1) { 
       continue; 
      } 

      if(childNodes[i] === clickedListItem) { 
       index = nodeIndex; 
       break; 
      } 
      nodeIndex++; 
     } 



     if(index >= 0) { 
      // open PhotoSwipe if valid index found 
      openPhotoSwipe(index, clickedGallery); 
     } 
     return false; 
    }; 

    // parse picture index and gallery index from URL (#&pid=1&gid=2) 
    var photoswipeParseHash = function() { 
     var hash = window.location.hash.substring(1), 
     params = {}; 

     if(hash.length < 5) { 
      return params; 
     } 

     var vars = hash.split('&'); 
     for (var i = 0; i < vars.length; i++) { 
      if(!vars[i]) { 
       continue; 
      } 
      var pair = vars[i].split('='); 
      if(pair.length < 2) { 
       continue; 
      }   
      params[pair[0]] = pair[1]; 
     } 

     if(params.gid) { 
      params.gid = parseInt(params.gid, 10); 
     } 

     return params; 
    }; 

    var openPhotoSwipe = function(index, galleryElement, disableAnimation, fromURL) { 
     var pswpElement = document.querySelectorAll('.pswp')[0], 
      gallery, 
      options, 
      items; 

     items = parseThumbnailElements(galleryElement); 

     // define options (if needed) 
     options = { 

      // define gallery index (for URL) 
      galleryUID: galleryElement.getAttribute('data-pswp-uid'), 

      getThumbBoundsFn: function(index) { 
       // See Options -> getThumbBoundsFn section of documentation for more info 
       var thumbnail = items[index].el.getElementsByTagName('img')[0], // find thumbnail 
        pageYScroll = window.pageYOffset || document.documentElement.scrollTop, 
        rect = thumbnail.getBoundingClientRect(); 

       return {x:rect.left, y:rect.top + pageYScroll, w:rect.width}; 
      } 

     }; 

     // PhotoSwipe opened from URL 
     if(fromURL) { 
      if(options.galleryPIDs) { 
       // parse real index when custom PIDs are used 
       // http://photoswipe.com/documentation/faq.html#custom-pid-in-url 
       for(var j = 0; j < items.length; j++) { 
        if(items[j].pid == index) { 
         options.index = j; 
         break; 
        } 
       } 
      } else { 
       // in URL indexes start from 1 
       options.index = parseInt(index, 10) - 1; 
      } 
     } else { 
      options.index = parseInt(index, 10); 
     } 

     // exit if index not found 
     if(isNaN(options.index)) { 
      return; 
     } 

     if(disableAnimation) { 
      options.showAnimationDuration = 0; 
     } 

     // Pass data to PhotoSwipe and initialize it 
     gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, items, options); 
     gallery.init(); 
    }; 

    // loop through all gallery elements and bind events 
    var galleryElements = document.querySelectorAll(gallerySelector); 

    for(var i = 0, l = galleryElements.length; i < l; i++) { 
     galleryElements[i].setAttribute('data-pswp-uid', i+1); 
     galleryElements[i].onclick = onThumbnailsClick; 
    } 

    // Parse URL and open gallery if it contains #&pid=3&gid=1 
    var hashData = photoswipeParseHash(); 
    if(hashData.pid && hashData.gid) { 
     openPhotoSwipe(hashData.pid , galleryElements[ hashData.gid - 1 ], true, true); 
    } 
}; 

// execute above function 
initPhotoSwipeFromDOM('.my-gallery'); 

はここにCSSです:

.my-gallery { 
    width: 100%; 
    float: left; 
} 

.my-gallery img { 
    width: 200px; 
    height: 200px; 
    display: block; 
} 
.my-gallery figure { 
    display: block; 
    float: left; 
    margin: 0px 15px 20px 0; 
    border: 3px solid #000; 

} 

.my-gallery figcaption { 
    display: none; 
} 

はまた、上記のこのライブラリを使用せずに、この画像ギャラリーを持ってする簡単な方法はありますか?

基本的に私はあなたが画像をクリックすると、このような何かを表示したいと思います: enter image description here ^上記けれどもアドビイラストレーターで作られており、HTML/CSSでそれをするとよいでしょう。 enter image description here

+0

このCSS Modalのようなものを使って、4枚の画像を取り込んだらhttp://codepen.io/ohnoitsaustin/pen/zGmJjz – s0rfi949

答えて

1

あなたはFancyboxを使用することによって、これを達成することができます:

これは、ギャラリー自体が示した方法です。この例では

See this Fiddle.

、可視画像をクリックするとFancyboxを使用して隠されたギャラリーを開き、クリックイベントをトリガします。

HTML

<!-- Your visible image(s) --> 
    <a class="fancyboxLauncher" href="http://fancyapps.com/fancybox/demo/1_b.jpg" title="one"><img src="http://fancyapps.com/fancybox/demo/1_s.jpg" alt="" /></a> 

<!-- Your hidden gallery -->  
    <div style="display: none;"> 
    <a class="fancybox" href="http://farm4.staticflickr.com/3712/9032543579_1217e6566b_b.jpg" title="one"></a> 

<a class="fancybox" href="http://farm4.staticflickr.com/3818/9036037912_83576fe5ab_b.jpg" title="two"></a> 

JS

// Trigger event 
$(".fancyboxLauncher").on("click", function() { 
    $(".fancybox").eq(0).trigger("click"); 
    return false; 
}); 

// Init Fancybox 
$(".fancybox") 
    .attr('rel', 'gallery') 
    .fancybox({ 
    padding: 0 
}); 
あなたはまだコースの4-IN-1の画像を使用することができます

、ちょうどかかわらず、代わりに4の1枚の画像を使用し、あなたは多くのオプションを持っていますそれと。

関連する問題