Polymer 聚合物错位的光擦除

Polymer 聚合物错位的光擦除,polymer,polymer-1.0,photoswipe,Polymer,Polymer 1.0,Photoswipe,我正在尝试使用他们提供的技术,制作一个小型web应用程序。对于我的web应用程序的一部分,我想制作一个照片库。幸运的是,这其中有一个因素。不幸的是,这方面没有任何因素。因此,我开始着手创建自己的自定义元素,基于 因此,我决定从简单开始,只实现他们作为示例()提供的代码。我只是将这段代码复制到一个自定义元素中,看看它是如何工作的,但不幸的是,它不能100%工作 对于小型显示,照片的显示正确,但当屏幕较高时,第三张和第四张照片不再与中心对齐,而是滑动到右下角。查看图像时,最简单的方法是按全屏按钮。下

我正在尝试使用他们提供的技术,制作一个小型web应用程序。对于我的web应用程序的一部分,我想制作一个照片库。幸运的是,这其中有一个因素。不幸的是,这方面没有任何因素。因此,我开始着手创建自己的自定义元素,基于

因此,我决定从简单开始,只实现他们作为示例()提供的代码。我只是将这段代码复制到一个自定义元素中,看看它是如何工作的,但不幸的是,它不能100%工作

对于小型显示,照片的显示正确,但当屏幕较高时,第三张和第四张照片不再与中心对齐,而是滑动到右下角。查看图像时,最简单的方法是按全屏按钮。下面是一个图像,您可以清楚地看到右下角的偏移

我重新检查了一下,这在他们自己的代码笔中不是问题,但我似乎找不到是否有重叠的样式或其他东西正在破坏它。有IDE吗

<dom-module id="photo-album">
  <link rel="import" type="css" href="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.0/photoswipe.css"> <!-- photoswipe/photoswipe.css -->
  <link rel="import" type="css" href="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.0/default-skin/default-skin.css"> <!-- photoswipe/default-skin/default-skin.css -->
  <template>
    <style>
      :host {
        display: block;
      }
      .my-gallery {
        width: 100%;
        float: left;
      }
      .my-gallery img {
        width: 100%;
        height: auto;
      }
      .my-gallery figure {
        display: block;
        float: left;
        margin: 0 5px 5px 0;
        width: 150px;
      }
      .my-gallery figcaption {
        display: none;
      }
    </style>
    <iron-ajax url="" params="" handle-as="json" last-response="{{photos}}"></iron-ajax>
    <!--<template is="dom-repeat" items="{{photos}}">
      <iron-image style="width:400px; height:400px; background-color: lightgray;" sizing="cover" preload fade src="{{item}}"></iron-image>
    </template>-->

    <div class="my-gallery" id="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>
      </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>
      </figure>

      <figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
        <a href="https://farm7.staticflickr.com/6175/6176698785_7dee72237e_b.jpg" itemprop="contentUrl" data-size="1024x683">
            <img src="https://farm7.staticflickr.com/6175/6176698785_7dee72237e_m.jpg" itemprop="thumbnail" alt="Image description" />
        </a>
      </figure>

      <figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
        <a href="https://farm6.staticflickr.com/5023/5578283926_822e5e5791_b.jpg" itemprop="contentUrl" data-size="1024x768">
            <img src="https://farm6.staticflickr.com/5023/5578283926_822e5e5791_m.jpg" itemprop="thumbnail" alt="Image description" />
        </a>
      </figure>

    </div>


    <div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
      <div class="pswp__bg"></div>
      <div class="pswp__scroll-wrap">
          <div class="pswp__container">
              <div class="pswp__item"></div>
              <div class="pswp__item"></div>
              <div class="pswp__item"></div>
          </div>
          <div class="pswp__ui pswp__ui--hidden">

              <div class="pswp__top-bar">
                  <div class="pswp__counter"></div>
                  <button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
                  <div class="pswp__preloader">
                      <div class="pswp__preloader__icn">
                        <div class="pswp__preloader__cut">
                          <div class="pswp__preloader__donut"></div>
                        </div>
                      </div>
                  </div>
              </div>

              <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
                  <div class="pswp__share-tooltip"></div> 
              </div>

              <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)"></button>

              <button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)"></button>

              <div class="pswp__caption">
                  <div class="pswp__caption__center"></div>
              </div>
          </div>
      </div>

  </div>
  </template>

  <script src="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.0/photoswipe.min.js"></script> <!-- photoswipe/photoswipe.min.js -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.0/photoswipe-ui-default.min.js"></script> <!-- photoswipe/photoswipe-ui-default.min.js -->
  <script>
    Polymer({
      is: 'photo-album',
      properties: {
        items: {
          type: Array,
          notify: true,
        }
      },
      ready: function() {
        this.initPhotoSwipeFromDOM();
      },
      initPhotoSwipeFromDOM: function(){
        var gallerySelector = this.$.gallery;
        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;
            }

            options.showAnimationDuration = 0;
            options.hideAnimationDuration = 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 = this.$.gallery;

        galleryElements.setAttribute('data-pswp-uid', 1);
        galleryElements.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 );
        }
      }
    });
  </script>

</dom-module>

:主持人{
显示:块;
}
.我的画廊{
宽度:100%;
浮动:左;
}
.我的画廊{
宽度:100%;
高度:自动;
}
.我的画廊{
显示:块;
浮动:左;
边距:0 5px 5px 0;
宽度:150px;
}
.我的画廊{
显示:无;
}
聚合物({
是‘相册’,
特性:{
项目:{
类型:数组,
通知:正确,
}
},
就绪:函数(){
this.initPhotoSwipeFromDOM();
},
initPhotoSwipeFromDOM:function(){
var gallerySelector=this.$.gallery;
var parseThumbnailElements=函数(el){
var thumbElements=el.childNodes,
节点=thumbElements.length,
项目=[],
菲格尔,
linkEl,
大小,
项目;
对于(变量i=0;i1){
//内容
item.title=figureEl.children[1].innerHTML;
}
如果(linkEl.childrence.length>0){
// = 0) {
//如果找到有效索引,请打开Photosweep
openphotosweep(索引,clickedGallery);
}
返回false;
};
//从URL解析图片索引和图库索引(#&pid=1&gid=2)
var photoswipparsehash=函数(){
var hash=window.location.hash.substring(1),
params={};
if(hash.length<5){
返回参数;
}
var vars=hash.split('&');
对于(变量i=0;igetThumbBoundsFn”部分
var thumbnail=items[index].el.getElementsByTagName('img')[0],//查找缩略图
pageYScroll=window.pageYOffset | | document.documentElement.scrollTop,
rect=thumbnail.getBoundingClientRect();
返回{x:rect.left,y:rect.top+pageYScroll,w:rect.width};
}
};
//从URL打开Photosweep
if(fromURL){
if(选项.galleryPIDs){
//使用自定义PID时解析实索引
// http://photoswipe.com/documentation/faq.html#custom-url中的pid
对于(var j=0;j