www.gusucode.com > Kodexplorer 可道云PHP在线文件管理系统源码程序 > kodexplorer_v4.32/plugins/photoSwipe/static/page.js

    define(function(require, exports) {
	var imageUrl = function(path){
	    if(path.substr(0,4) == 'http'){
			return path;
		}
		//gif 预览
		if(core.pathExt(path) == 'gif'){
			return core.path2url(path);
		}
		
		var imageThumb = G.appHost+'explorer/image';
		if(G.sid){
			imageThumb = G.appHost+'share/image&user='+G.user+'&sid='+G.sid;
		}
		imageThumb += '&path='+urlEncode(path)+'&thumbWidth=1200';
		return imageThumb;
	}

	var itemsArr = [];
	var getImageArr = function(imagePath){
		itemsArr = [];
		var index = -1;
		var itemsPush = function(path,msrc,$dom){
		    if($dom && $dom.attr('data-src')){
				path = $dom.attr('data-src');
				msrc = $dom.attr('data-original');
			}
			var width = 0,height = 0;
			var link  = imageUrl(path);
			if(!msrc){
				msrc = link;
			}
			itemsArr.push({
				src:link,
				msrc:msrc,
				title:core.pathThis(urlDecode(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'));
				if($(this).attr('data-src')){
					thePath = $(this).attr('data-src');
				}
				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'));
			});
		}
		if(itemsArr.length == 0 || index == -1){
		    itemsArr = [];
		    itemsPush(imagePath);
		    index = 0;
		}
		return {items:itemsArr,index:index};
	}

	var options = {
		// history: false,
		focus: true,
		index: 0,
		bgOpacity:0.8,
		maxSpreadZoom:5,
		closeOnScroll:false,

		shareEl: true,
		shareButtons: [
			//{id:'facebook', label:'Facebook', url:'https://www.facebook.com/sharer/sharer.php?u={{url}}'},
			{id:'open', label:LNG.menu_open_window, url:'{{raw_image_url}}', download:false},
		],

		showHideOpacity:false,
		showAnimationDuration: 300,
		hideAnimationDuration: 300,
		fullscreenEl : true,

		// captionEl : false,		
		// tapToClose : false,
		// tapToToggleControls : true,
		getThumbBoundsFn: function(index) {
			var item = itemsArr[index];
			if(!item || !item.$dom || item.$dom.length == 0){//目录切换后没有原图
				return {x:$(window).width()/2,y:$(window).height()/2,w:1,h:1};
			}
			var pageYScroll = window.pageYOffset || document.documentElement.scrollTop; 
			var rect = $(item.$dom).get(0).getBoundingClientRect();
			return {x:rect.left,y:rect.top + pageYScroll,w:rect.width,h:rect.height};
		}
	};

	//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"});
			}
			if($('.pswp').hasClass('pswp--open')){//已经打开
				return;
			}

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