KodExplorer/plugins/photoSwipe/static/page.js

144 lines
4.2 KiB
JavaScript
Raw Normal View History

2017-08-23 19:40:27 +00:00
define(function(require, exports) {
2017-08-26 09:16:57 +00:00
var itemsArr = [];
2017-08-23 19:40:27 +00:00
var getImageArr = function(imagePath){
2017-08-26 09:16:57 +00:00
itemsArr = [];
2017-08-23 19:40:27 +00:00
var index = -1;
2017-08-26 09:16:57 +00:00
var itemsPush = function(path,msrc,$dom){
var width = 0,height = 0;
if(!msrc){
msrc = core.path2url(path);
2017-08-23 19:40:27 +00:00
}
2017-08-26 09:16:57 +00:00
itemsArr.push({
src:core.path2url(path),
msrc:msrc,
title:urlDecode(core.pathThis(path)),
w:width,h:height,
$dom:$dom?$dom:false
});
}
//打开时最后的target对象dom [文件列表;搜索列表;树目录[编辑器压缩文件预览]]
var $lastTarget = kodApp.getLastOpenTarget();
//console.log('test',$lastTarget);
if(!$lastTarget || _.get($lastTarget,'length') == 0){
}else if($lastTarget.hasClass('file-box')){
var $continer = $lastTarget.parents('.file-continer');
$continer.find('.ico.picture').each(function(i){
var $image = $(this).find('img');
var thePath = hashDecode($(this).parents('.file').attr('data-path'));
if(thePath == imagePath){
index = i;
}
itemsPush(thePath,$image.attr('data-original'),$image);
});
}else if($lastTarget.parents('.search-result').exists()){//搜索列表
var $continer = $lastTarget.parents('.search-result');
$continer.find('.file-item').each(function(i){
var thePath = hashDecode($(this).attr('data-path'));
var ext = core.pathExt(thePath);
if(!kodApp.appSupportCheck('photoSwipe',ext)){
return;
}
if(thePath == imagePath){
index = i;
}
itemsPush(thePath,false,$(this).find('.file-icon'));
});
}else if($lastTarget.parents('.ztree').exists()){ //树目录:编辑器或压缩文件内打开
var id = $lastTarget.parents('.ztree').attr('id');
var zTree = $.fn.zTree.getZTreeObj(id);
var fileNum = 0;
$lastTarget.parent().find('li[treenode]').each(function(){
var node = zTree.getNodeByTId($(this).attr('id'));
if(!node) return;
var thePath = node.path;
var ext = core.pathExt(node.path);
if(!kodApp.appSupportCheck('photoSwipe',ext)){
return;
}
if(thePath == imagePath){
index = fileNum;
}
fileNum ++;
itemsPush(thePath,false,$(this).find('.tree_icon'));
});
2017-08-23 19:40:27 +00:00
}
2017-08-26 09:16:57 +00:00
if(itemsArr.length == 0 || index == -1){
itemsPush(imagePath);
2017-08-23 19:40:27 +00:00
}
2017-08-26 09:16:57 +00:00
return {items:itemsArr,index:index};
2017-08-23 19:40:27 +00:00
}
var options = {
history: false,
focus: true,
index: 0,
bgOpacity:0.8,
maxSpreadZoom:5,
closeOnScroll:false,
shareEl: false,
showHideOpacity:false,
showAnimationDuration: 300,
hideAnimationDuration: 300,
getThumbBoundsFn: function(index) {
2017-08-26 09:16:57 +00:00
var item = itemsArr[index];
if(!item || !item.$dom){//目录切换后没有原图
return {x:$(window).width()/2,y:$(window).height()/2,w:1,h:1};
2017-08-23 19:40:27 +00:00
}
var pageYScroll = window.pageYOffset || document.documentElement.scrollTop;
2017-08-26 09:16:57 +00:00
var rect = $(item.$dom).get(0).getBoundingClientRect();
return {x:rect.left,y:rect.top + pageYScroll,w:rect.width,h:rect.height};
2017-08-23 19:40:27 +00:00
}
};
//http://dimsemenov.com/plugins/royal-slider/gallery/
//http://photoswipe.com/documentation/faq.html
return function(imagePath,appStatic,appStaticDefault){
require.async([
appStaticDefault+'PhotoSwipe/photoSwipe.html',
appStatic+'PhotoSwipe/photoswipe.min',
appStatic+'PhotoSwipe/photoswipe-ui-default.min',
appStatic+'PhotoSwipe/photoswipe.css',
appStatic+'PhotoSwipe/default-skin/default-skin.css',
],function(photoSwipeTpl){
if($('.pswp_content').length == 0){
$(photoSwipeTpl).appendTo('body');
$('.pswp__caption__center').css({"text-align":"center"});
}
2017-08-26 09:16:57 +00:00
if($('.pswp').hasClass('pswp--open')){//已经打开
return;
}
2017-08-23 19:40:27 +00:00
var image = getImageArr(imagePath);
options.index = image.index;
var gallery = new PhotoSwipe($('.pswp').get(0),PhotoSwipeUI_Default,image.items,options);
gallery.loadFinished = false;
gallery.listen('gettingData', function(index, item) {
if (item.w < 1 || item.h < 1) {
var img = new Image();
img.onload = function() {
item.w = this.width;
item.h = this.height;
gallery.updateSize(true);
}
img.src = item.src;
}
//打开图片,加载动画起始位置
if(!gallery.loadFinished){
var rect = options.getThumbBoundsFn(index);
item.w = rect.w * 25;
item.h = rect.h * 25;
gallery.loadFinished = true;
}
});
gallery.init();
});
}
});