/* * @copyright QiaoQiaoShiDai Internet Technology(Shanghai)Co.,Ltd * @license https://www.oaooa.com/licenses/ * * @link https://www.oaooa.com * @author zyx(zyx@oaooa.com) */ (function($,document,window) { $.fn.dzzthumb = function(options) { var defaults = { root: 'body', selector: 'img[data-original]', container: $('body'), allowdownload:0 ,//是否允许下载按钮 callback:null, event:'click' }, opts = $.extend(defaults, options), angle = 0, scale=1, $imgs=[], current = 0; $imgs[opts['root']] = $(this); $imgs[opts['root']].off(opts['event']+'.'+opts['root']).on(opts['event']+'.'+opts['root'], function() { var self = this; $imgs[opts['root']].each(function(index) { if(this == self) current = index; }); setupDom(); showContent(); return false; }); var setupDom = function() { $('html,body').addClass('dzzthumb_body'); if(!document.getElementById('MsgContainer')) { $('
').appendTo(opts['container']); } else { $('#MsgContainer').empty().show(); } $('#MsgContainer').on('contextmenu',function(){ return false; }); var html = ''; html += ''; $(html).appendTo('#MsgContainer'); $.getScript('static/js/jquery.mousewheel.min.js'); if($imgs[opts['root']].length<=1){ $('.pr-btn-prev').hide(); $('.pr-btn-next').hide(); }else{ if(current==0){ $('.pr-btn-prev').hide(); $('.pr-btn-next').show(); }else if(current==$imgs[opts['root']].length-1){ $('.pr-btn-prev').show(); $('.pr-btn-next').hide(); }else{ $('.pr-btn-prev').show(); $('.pr-btn-next').show(); } } $('#preview_Container').css({ height: '100%', width: '100%' }).show(); $('#preview-box b').on('mouseenter', function() { var btn = $(this).attr('btn'); $('#' + btn + '-tips').show(); }); $('#preview-box b').on('mouseleave', function() { var btn = $(this).attr('btn'); $('#' + btn + '-tips').hide(); }); $(document).on('keyup.'+opts['root'], function(event) { var e; if(event.which != "") { e = event.which; } else if(event.charCode != "") { e = event.charCode; } else if(event.keyCode != "") { e = event.keyCode; } switch(e) { case 27: //Ctrl + Alt + ← $(document).off('.'+opts['root']); $('#MsgContainer').empty().hide(); break; case 37: //Ctrl + Alt + ← if(current == 0) { $('#popup-hint').find('span').html(__lang.has_last_picture); $('#popup-hint').show(); window.setTimeout(function() { $('#popup-hint').hide(); }, 3000); }else if(current == 1) { current = current - 1; $('.pr-btn-prev').hide(); if($imgs[opts['root']].length>1) $('.pr-btn-next').show(); showContent(); } else { current = current - 1; showContent(); if($imgs[opts['root']].length>1){ $('.pr-btn-next').show(); $('.pr-btn-prev').show(); } } break; case 39: //Ctrl + Alt + → if(current == $imgs[opts['root']].length - 1) { $('#popup-hint').find('span').html(__lang.has_last_picture1); $('#popup-hint').show(); window.setTimeout(function() { $('#popup-hint').hide(); }, 3000); }else if(current == $imgs[opts['root']].length - 2) { current = current + 1; $('.pr-btn-next').hide(); if($imgs[opts['root']].length>1) $('.pr-btn-prev').show(); showContent(); } else { current = current + 1; showContent(); if($imgs[opts['root']].length>1){ $('.pr-btn-next').show(); $('.pr-btn-prev').show(); } } break; } }); $('#previewer-photo').on('click.'+opts['root'], function() { $(document).off('.'+opts['root']); $('#MsgContainer').empty().hide(); $('html,body').removeClass('dzzthumb_body'); }); $('#MsgContainer [btn],#previewer-photo').on('click.'+opts['root'], function() { var btn = $(this).attr('btn'); switch(btn) { case "close": $(document).off('.'+opts['root']); $('#MsgContainer').empty().hide(); $('html,body').removeClass('dzzthumb_body'); break; case "prev": if(current == 0) { $('#popup-hint').find('span').html(__lang.has_last_picture); $('#popup-hint').show(); window.setTimeout(function() { $('#popup-hint').hide(); }, 3000); }else if(current == 1) { current = current - 1; $('.pr-btn-prev').hide(); if($imgs[opts['root']].length>1) $('.pr-btn-next').show(); showContent(); } else { current = current - 1; showContent(); if($imgs[opts['root']].length>1){ $('.pr-btn-next').show(); $('.pr-btn-prev').show(); } } jQuery(document).trigger('showIcos_done'); break; case "next": if(current == $imgs[opts['root']].length - 1) { $('#popup-hint').find('span').html(__lang.has_last_picture1); $('#popup-hint').show(); window.setTimeout(function() { $('#popup-hint').hide(); }, 3000); }else if(current == $imgs[opts['root']].length - 2) { current = current + 1; $('.pr-btn-next').hide(); if($imgs[opts['root']].length>1) $('.pr-btn-prev').show(); showContent(); } else { current = current + 1; showContent(); if($imgs[opts['root']].length>1){ $('.pr-btn-next').show(); $('.pr-btn-prev').show(); } } break; case "download": var img = $imgs[opts['root']].get(current); //var dpath = $(img).data('dpath'); var url = $(img).data('download');//downurl + '&path=' + dpath; if(!url) break; if(!document.getElementById('hideframe')) { $('').appendTo('body'); } $('#hideframe').attr('src', url); break; case "newwindow": var $img = $($imgs[opts['root']].get(current)); if($img.data('original')){ var original_img=$img.data('original'); window.open(original_img); } break; case "rotate": var el = $('#previewer-photo img'); angle += 90; var rotation = ((angle % 360) / 90); if(scale!=1){ el.css('transform','rotate('+angle+'deg) scale('+scale.toFixed(1)+')'); el.css({ 'transform': 'rotate(' + (angle) + 'deg) scale('+scale.toFixed(1)+')', '-webkit-transform': 'rotate(' + (angle) + 'deg) scale('+scale.toFixed(1)+')', '-moz-transform': 'rotate(' + (angle) + 'deg) scale('+scale.toFixed(1)+')', '-o-transform': 'rotate(' + (angle) + 'deg) scale('+scale.toFixed(1)+')', '-ms-transform': 'rotate(' + (angle) + 'deg) scale('+scale.toFixed(1)+')' }); }else{ el.css({ 'transform': 'rotate(' + (angle) + 'deg)', '-webkit-transform': 'rotate(' + (angle) + 'deg)', '-moz-transform': 'rotate(' + (angle) + 'deg)', '-o-transform': 'rotate(' + (angle) + 'deg)', '-ms-transform': 'rotate(' + (angle) + 'deg)' }); } break; } return false; }); } var showContent = function() { var img = $imgs[opts['root']].get(current); angle=0; $('#file_name').html(img.title); $('#popup-hint').hide(); $('#previewer-photo').empty().hide(); if(!$(img).data('download')){ $('#contents-panel li[btn="newwindow"],#contents-panel li[btn="download"]').addClass('hide'); }else{ $('#contents-panel li[btn="newwindow"],#contents-panel li[btn="download"]').removeClass('hide'); } $('#pre_loading').show(); var el = $('#previewer-photo'); var screenWidth = opts['container'].width(); var screenHeight = opts['container'].height(); imgReady($(img).data('original'), function() { var width = 0; var height = 0; var imgw = this.width * 1; var imgh = this.height * 1; var bodyWidth = screenWidth - 6; var bodyHeight = screenHeight - $('#btn_hand').height() - 6; var ratio = bodyWidth / bodyHeight; var ratio1 = imgw / imgh; if(ratio > ratio1) { if(bodyHeight < imgh) { height = bodyHeight; width = imgw / imgh * bodyHeight; } else { width = imgw; height = imgh; } } else { if(bodyWidth < imgw) { width = bodyWidth; height = imgh / imgw * bodyWidth; } else { width = imgw; height = imgh; } } var left = (screenWidth - width) / 2; var top = (bodyHeight - height) / 2; var el1 = $('').appendTo(el); el1.get(0).onmousedown = function(event) { try {dragMenu(el1.get(0), event, 1); } catch(e) {} }; el1.on('click', function() { return false }); try{ $('#previewer-photo').off('mousewheel.preview').on('mousewheel.preview','',function(e,delta, deltaX, deltaY){ pic_resize(delta,imgw,imgh,$(img).data('original')); return false; }); }catch(e){}; }); if(opts.callback)opts.callback(current,img) }; var pic_resize=function(delta,imgw,imgh,src){ if(delta>=0) delta=1; else delta=-1; var el = $('#previewer-photo'); var step=Math.max(imgw/900,imgh/900); var $img=el.find('img'); var width=parseInt($img.attr('width')); var height=parseInt($img.attr('height')); var el=$('#previewer-photo>img'); var dx=delta*0.5; if(dx>1) dx=1; if(delta<0){ scale+=dx; if(scale<0.1) scale=0.1 }else{ scale+=dx; } /*if(width*scale>imgw || height*scale>imgh){ if($img.attr('ismax')!='1'){ $img.attr('ismax',1).attr('src',src+'&original=1'); } }*/ if(angle){ el.css('transform','rotate('+angle+'deg) scale('+scale.toFixed(1)+')'); }else{ el.css('transform',"scale("+scale.toFixed(1)+")"); } } var imgReady = (function() { var list = [], intervalId = null, // 用来执行队列 tick = function() { var i = 0; for(; i < list.length; i++) { list[i].end ? list.splice(i--, 1) : list[i](); } !list.length && stop(); }, // 停止所有定时器队列 stop = function() { clearInterval(intervalId); intervalId = null; }; return function(url, ready, load, error) { var onready, width, height, newWidth, newHeight, img = new Image(); img.src = url; // 如果图片被缓存,则直接返回缓存数据 if(img.complete) { ready.call(img); load && load.call(img); return; } width = img.width; height = img.height; // 加载错误后的事件 img.onerror = function() { error && error.call(img); onready.end = true; img = img.onload = img.onerror = null; }; // 图片尺寸就绪 onready = function() { newWidth = img.width; newHeight = img.height; if(newWidth !== width || newHeight !== height || // 如果图片已经在其他地方加载可使用面积检测 newWidth * newHeight > 1024 ) { ready.call(img); onready.end = true; } }; onready(); // 完全加载完毕的事件 img.onload = function() { // onload在定时器时间差范围内可能比onready快 // 这里进行检查并保证onready优先执行 !onready.end && onready(); load && load.call(img); // IE gif动画会循环执行onload,置空onload即可 img = img.onload = img.onerror = null; }; // 加入队列中定期执行 if(!onready.end) { list.push(onready); // 无论何时只允许出现一个定时器,减少浏览器性能损耗 if(intervalId === null) intervalId = setInterval(tick, 40); } }; })(); //var btnClick= } })(jQuery,document,window);