photoSwipe-前端畫廊js插件

github地址:https://github.com/dimsemenov/photoswipe

文檔地址:https://photoswipe.com/documentation/getting-started.html

近2萬的star,絕對可用

1. 安裝

# npm安裝
npm i photoswipe

或者

# git安裝
git clone https://github.com/dimsemenov/PhotoSwipe.git

2. 使用

  • 引入css,js
<link rel="stylesheet" href="path/to/photoswipe.css"> 
<link rel="stylesheet" href="path/to/default-skin/default-skin.css"> 
<script src="path/to/photoswipe.min.js"></script> 
<script src="path/to/photoswipe-ui-default.min.js"></script> 
  • 在頁面上增加html片段
<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>
                <button class="pswp__button pswp__button--share" title="Share"></button>
                <button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>
                <button class="pswp__button pswp__button--zoom" title="Zoom in/out"></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>
  • 初始化和顯示畫廊
var pswpElement = document.querySelectorAll('.pswp')[0];
var items = [
    {
        src: 'https://placekitten.com/600/400',
        w: 600,
        h: 400
    },
    {
        src: 'https://placekitten.com/1200/900',
        w: 1200,
        h: 900
    }
];
var options = {
    index: 0
};
var gallery = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options);
gallery.init();

3. 配合jquery簡單封裝

圖片不是一成不變的,可能會隨着條件動態刷新。我們希望點擊圖片以後展示圖片畫廊,並且定位到具體點擊的那一副照片。假設要顯示的圖片的class是showImg

$(function() {
    //給.showImg註冊點擊事件,並且未來元素也會註冊事件(新增加的dom元素也有效果,見jquery事件綁定)
    $("body").on("click", ".showImg", function() {
        var index = $(".showImg").index(this);//獲取點擊圖片在所有要顯示圖片裏面的位置
        var items = [];//將圖片列表處理封裝成photoSwipe需要的items的格式
        $(".showImg").each(function(index, value) {
            items.push({
                src: $(value).prop("src"),
                w: 600,
                h: 600,
                title: $(value).prop("title")
            });
        });
        console.log(items);
        openGallary(items, index);
    });
});
//打開畫廊
function openGallary(items, index) {
    var pswpElement = document.querySelectorAll(".pswp")[0];
    var items = items;
    var options = {
        index: index,
        fullscreenEl: false,//不顯示全屏
        shareEl: false//不顯示分享
    };
    var gallery = new PhotoSwipe(
        pswpElement,
        PhotoSwipeUI_Default,
        items,
        options
    );
    gallery.init();
}

4. 抽出多餘的部分,再次封裝

把每次都要重複的代碼封裝到一個js文件中(my-photoSwipe.js)

  • 增加css,js
  • 增加html片段
  • 註冊圖片點擊事件

這樣別的功能需要使用畫廊插件直接引入my-photoSwipe.js,不需要做任何操作。

這樣做的好處是簡單,能批量化使用,要修改統一修改。壞處就是個性化配置困難了。

var photoSwipePath = __CreateJSPath("my-photoSwipe.js");
photoSwipePath = photoSwipePath.substring(0, photoSwipePath.length - 1);

document.write(
  '<link rel="stylesheet" href="' + photoSwipePath + '/photoswipe.css" />'
);

document.write(
  '<link rel="stylesheet" href="' +
    photoSwipePath +
    '/default-skin/default-skin.css" />'
);

document.write(
  '<script src="' +
    photoSwipePath +
    '/photoswipe.min.js" type="text/javascript" ></script>'
);

document.write(
  '<script src="' +
    photoSwipePath +
    '/photoswipe-ui-default.min.js" type="text/javascript" ></script>'
);

//打開畫廊
function openGallary(items, index) {
  var pswpElement = document.querySelectorAll(".pswp")[0];
  // build items array
  var items = items;
  // define options (if needed)
  var options = {
    // optionName: 'option value'
    // for example:
    index: index, // start at first slide
    fullscreenEl: false,
    shareEl: false
  };
  // Initializes and opens PhotoSwipe
  var gallery = new PhotoSwipe(
    pswpElement,
    PhotoSwipeUI_Default,
    items,
    options
  );
  gallery.init();
}

function addGallaryDom() {
  if ($(".pswp").length > 0) return;
  html =
    ' <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>" +
    "         <button" +
    '           class="pswp__button pswp__button--share"' +
    '           title="Share"' +
    "         ></button>" +
    "         <button" +
    '           class="pswp__button pswp__button--fs"' +
    '           title="Toggle fullscreen"' +
    "         ></button>" +
    "         <button" +
    '           class="pswp__button pswp__button--zoom"' +
    '           title="Zoom in/out"' +
    "         ></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>";
  $("body").append(html);
}

function __CreateJSPath(js) {
  var scripts = document.getElementsByTagName("script");
  var path = "";
  for (var i = 0, l = scripts.length; i < l; i++) {
    var src = scripts[i].src;
    if (src.indexOf(js) != -1) {
      var ss = src.split(js);
      path = ss[0];
      break;
    }
  }
  var href = location.href;
  href = href.split("#")[0];
  href = href.split("?")[0];
  var ss = href.split("/");
  ss.length = ss.length - 1;
  href = ss.join("/");
  if (
    path.indexOf("https:") == -1 &&
    path.indexOf("http:") == -1 &&
    path.indexOf("file:") == -1 &&
    path.indexOf("/") != 0
  ) {
    path = href + "/" + path;
  }
  return path;
}

$(function() {
  addGallaryDom();
  $("body").on("click", ".showImg", function() {
    var index = $(".showImg").index(this);
    console.log(index);
    var items = [];
    $(".showImg").each(function(index, value) {
      items.push({
        src: $(value).prop("src"),
        w: 600,
        h: 600,
        title: $(value).prop("title")
      });
    });
    console.log(items);
    openGallary(items, index);
  });
});

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章