2017-04-25 5 views
2

PhotoSwipeで簡単なフォトギャラリーを作成したい:http://codepen.io/dimsemenov/pen/ZYbPJM新しいHTMLタグを追加するとjavascriptが正常に動作しない

すべてのコードは正常ですが、新しいHTMLを追加しようとすると、[前へ/次へ]ボタンのような機能が動作しません。

オリジナルコード

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

<figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject"> 
    <a href="https://farm3.staticflickr.com/2567/5697107145_a4c2eaa0cd_o.jpg" itemprop="contentUrl" data-size="1024x1024"> 
     <img src="https://farm3.staticflickr.com/2567/5697107145_3c27ff3cd1_m.jpg" itemprop="thumbnail" alt="Image description" /> 
    </a> 
    <figcaption itemprop="caption description">Image caption 1</figcaption> 

</figure> 

<figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject"> 
    <a href="https://farm2.staticflickr.com/1043/5186867718_06b2e9e551_b.jpg" itemprop="contentUrl" data-size="964x1024"> 
     <img src="https://farm2.staticflickr.com/1043/5186867718_06b2e9e551_m.jpg" itemprop="thumbnail" alt="Image description" /> 
    </a> 
    <figcaption itemprop="caption description">Image caption 2</figcaption> 
</figure> 

そして、私のフォトギャラリー私が知っている

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

    <div class="col-sm-3 col-md-2 thumb-container" data-image="o3gx9ze57" data-hotlink="9x16er3a7" data-sid="s25"> 
     <div class="thumb"> 

      <figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject"> 
      <a href="https://farm3.staticflickr.com/2567/5697107145_a4c2eaa0cd_o.jpg" itemprop="contentUrl" data-size="1024x1024"> 
      <img src="https://farm3.staticflickr.com/2567/5697107145_3c27ff3cd1_m.jpg" itemprop="thumbnail" alt="Image description" /> 
      </a> 
      <figcaption itemprop="caption description">Image caption 1</figcaption> 

      </figure> 

     </div> 
    </div> 

    <div class="col-sm-3 col-md-2 thumb-container" data-image="o3gx9ze57" data-hotlink="9x16er3a7" data-sid="s25"> 
     <div class="thumb"> 

<figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject"> 
    <a href="https://farm2.staticflickr.com/1043/5186867718_06b2e9e551_b.jpg" itemprop="contentUrl" data-size="964x1024"> 
     <img src="https://farm2.staticflickr.com/1043/5186867718_06b2e9e551_m.jpg" itemprop="thumbnail" alt="Image description" /> 
    </a> 
    <figcaption itemprop="caption description">Image caption 2</figcaption> 
</figure> 

      </div> 

     </div> 
</div> 

から、このコードは、問題は私のJavaSrciptコードからですが、私はそれを修正する見当がつかない。

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); 
} 
}; 

//機能 initPhotoSwipeFromDOM( '私のギャラリー。')上で実行。

これを修正するにはどうすればよいですか?ここ

ライブデモ:http://codepen.io/dimsemenov/pen/ZYbPJM

+0

'上記の関数を実行するinitPhotoSwipeFromDOM( '。thumb');' –

答えて

0

関数initPhotoSwipeFromDOM( '親指。')上で実行。 - 24分前

死ぬ@alive死ぬために生きている:(L198中)

0

あなたhashDataに動作しないが、そう空のオブジェクト

(を.pidなし)fundtion photoswipeParseHashリターン{}、 ですL199が真でない場合は、openPhotoSwipeを実行させない が実行されません。

関連する問題