2017-04-25 21 views
2

我想用PhotoSwipe構建一些簡單的照片庫:http://codepen.io/dimsemenov/pen/ZYbPJM當我添加新的HTML標記時javascript不能正常工作

所有代碼都可以正常工作,但是當我嘗試添加新的HTML時,像Previous/Next按鈕這樣的函數不起作用。

原始代碼

<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( '拇指'); - Alive而模具24分鐘前

@alive死:不行

0

您hashData(在L198)是一個空對象(不.pid)

的fundtion photoswipeParseHash回報{}, 所以如果在L199中不正確, 這會導致您的openPhotoSwipe未執行。

相關問題