You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
457 lines
18 KiB
457 lines
18 KiB
(function (window, document) { |
|
var ImgView = function (targetDom, options,listTargetDom) { |
|
// 判断是用函数创建的还是用new创建的。这样我们就可以通过MaskShare("dom") 或 new MaskShare("dom")来使用这个插件了 |
|
if (!(this instanceof ImgView)) return new ImgView(targetDom, options,listTargetDom); |
|
// 参数 |
|
this.options = this.extend({ |
|
dataList: [],//[{src:"",isSelected:false}] |
|
currentSrc: "" |
|
}, options); |
|
// 获取dom |
|
this.targetDom = document.getElementById(targetDom); |
|
this.listTargetDom = document.getElementById(listTargetDom); |
|
if(this.options.dataList.length>0) |
|
{ |
|
this.options.currentSrc=this.options.dataList[0].AttachLocationPath; |
|
} |
|
var html = "<div id='imgViewContent' class='img-view-content' draggable>" + |
|
"<img id='dialogImg' class='dialog-img' src=''></div>"; |
|
var listHtml="<div id='imgs-container'>" |
|
for(var i=0;i<this.options.dataList.length;i++) |
|
{ |
|
if(this.options.dataList[i].isCheck){ |
|
listHtml+="<div id='smallImgBox' class='swiper-box' data-id='3'>"+ |
|
"<img class='smallImg' style='border:3px solid red' src='"+this.options.dataList[i].AttachLocationPath+"' />"+ |
|
"</div>"; |
|
|
|
}else{ |
|
listHtml+="<div id='smallImgBox' class='swiper-box' data-id='3'>"+ |
|
"<img class='smallImg' src='"+this.options.dataList[i].AttachLocationPath+"' />"+ |
|
"</div>"; |
|
} |
|
} |
|
listHtml+="</div>"; |
|
this.listTargetDom.innerHTML=listHtml; |
|
this.targetDom.innerHTML = html; |
|
this.btnClose = document.getElementById("closeDialog"); |
|
this.btnRotate = document.getElementById("rotateDialog"); |
|
this.btnPrev = document.getElementById("prevDialog"); |
|
this.btnNext = document.getElementById("nextDialog"); |
|
//this.imgViewDiv = document.getElementById("imgViewDiv"); |
|
this.imgViewContent = document.getElementById("imgViewContent"); |
|
this.dialogImg = document.getElementById("dialogImg"); |
|
this.imgIdx=document.getElementById("imgIdx") |
|
this.imgCount=document.getElementById("imgCount") |
|
this.imgListContainer=document.getElementById("imgs-container") |
|
this.num = 0; |
|
this.winWidth = 0; |
|
this.winHeight = 0; |
|
this.startX = 0, this.startY = 0, this.x = 0, this.y = 0; |
|
this.index = 1; |
|
this.ScrollVal=0; |
|
var wsImpl = window.WebSocket || window.MozWebSocket; |
|
this.Socket=new wsImpl('ws://localhost:7080/'); |
|
|
|
|
|
this.event(); |
|
} |
|
ImgView.prototype = { |
|
init: function (options) { |
|
this.options.dataList=options; |
|
|
|
if(this.options.dataList.length>0) |
|
{ |
|
this.options.currentSrc=this.options.dataList[0].AttachLocationPath; |
|
} |
|
var html = "<div id='imgViewContent' class='img-view-content' draggable>" + |
|
"<img id='dialogImg' class='dialog-img' src=''></div>"; |
|
var listHtml="<div id='imgs-container'>" |
|
for(var i=0;i<this.options.dataList.length;i++) |
|
{ |
|
if(this.options.dataList[i].isCheck){ |
|
listHtml+="<div id='smallImgBox' class='swiper-box' data-id='3'>"+ |
|
"<img class='smallImg' style='border:3px solid red' src='"+this.options.dataList[i].AttachLocationPath+"' />"+ |
|
"</div>"; |
|
|
|
}else{ |
|
listHtml+="<div id='smallImgBox' class='swiper-box' data-id='3'>"+ |
|
"<img class='smallImg' src='"+this.options.dataList[i].AttachLocationPath+"' />"+ |
|
"</div>"; |
|
} |
|
} |
|
listHtml+="</div>"; |
|
this.listTargetDom.innerHTML=listHtml; |
|
this.imgIdx=document.getElementById("imgIdx") |
|
this.imgCount=document.getElementById("imgCount") |
|
this.imgListContainer=document.getElementById("imgs-container") |
|
this.event(); |
|
}, |
|
extend: function (obj, obj2) { |
|
for (var k in obj2) { |
|
obj[k] = obj2[k]; |
|
} |
|
return obj; |
|
}, |
|
event: function () { |
|
var _this = this; |
|
_this.thisSrc = _this.options.currentSrc; |
|
//var dataList = _this.options.dataList; |
|
//var index = dataList.indexOf(_this.thisSrc); |
|
_this.checkImg(_this.options.currentSrc); |
|
// // 关闭 |
|
// _this.btnClose.addEventListener("click", function () { |
|
// _this.close(_this); |
|
// }); |
|
// 旋转 |
|
// _this.btnRotate.addEventListener("click", function () { |
|
// _this.rotate(_this); |
|
// }); |
|
// // 上一张 |
|
// _this.btnPrev.addEventListener("click", function () { |
|
// _this.prev(_this); |
|
// }); |
|
// // 下一张 |
|
// _this.btnNext.addEventListener("click", function () { |
|
// _this.next(_this); |
|
// }); |
|
// 鼠标按下 |
|
_this.imgViewContent.addEventListener("mousedown", function (event) { |
|
_this.mousedown(_this, event); |
|
}); |
|
// 滚轮事件 chrome & ie |
|
_this.imgViewContent.addEventListener("mousewheel", function (event) { |
|
_this.mousewheel(_this, event); |
|
}); |
|
// 滚轮事件 firefox |
|
_this.imgViewContent.addEventListener("DOMMouseScroll", function (event) { |
|
_this.mousewheel(_this, event); |
|
}); |
|
var smallImgDom = document.getElementsByClassName("smallImg"); |
|
for(var i=0;i<smallImgDom.length;i++) |
|
{ |
|
smallImgDom[i].addEventListener("mouseover",function(event){ |
|
_this.setSrc(_this,this.src); |
|
//this.style.border="1px solid rgb(250,0,255)" |
|
}) |
|
smallImgDom[i].addEventListener("click",function(event){ |
|
var imgObj=_this.options.dataList.find(item=>new RegExp(item.FJMC + '$').test(this.src)); |
|
imgObj.isCheck=!imgObj.isCheck; |
|
if(imgObj.isCheck) |
|
{ |
|
this.style.border="3px solid red" |
|
}else |
|
{ |
|
this.style.border="0px solid red" |
|
} |
|
_this.Socket.send(JSON.stringify(imgObj)) |
|
}) |
|
} |
|
}, |
|
// 滚轮事件 |
|
mousewheel: function (_this, event) { |
|
event.preventDefault(); |
|
var delta = (event.wheelDelta && (event.wheelDelta > 0 ? 1 : -1)) || // chrome & ie |
|
(event.detail != 0 && (event.detail > 0 ? -1 : 1)); |
|
if (delta > 0) { |
|
// 向上滚 |
|
_this.index = _this.index + 0.5; |
|
if (_this.index > 4) { |
|
_this.index = 4; |
|
} |
|
|
|
} else if (delta < 0) { |
|
// 向下滚 |
|
_this.index = _this.index - 0.5; |
|
if (_this.index < 0.5) { |
|
_this.index = 0.5; |
|
} |
|
} |
|
_this.imgViewContent.style.marginLeft = _this.imgMarginLeft - ((_this.index - 1) * _this.imgWidth) / 2 + "px"; |
|
_this.imgViewContent.style.marginTop = _this.imgMarginTop - ((_this.index - 1) * _this.imgHeight) / 2 + "px"; |
|
event.target.style.width = _this.imgWidth * _this.index + "px"; |
|
event.target.style.height = _this.imgHeight * _this.index + "px"; |
|
}, |
|
zoom:function(_this,t){ |
|
if(t>0) |
|
{ |
|
_this.index = _this.index + 0.5; |
|
if (_this.index > 4) { |
|
_this.index = 4; |
|
} |
|
}else if(t==0){ |
|
_this.index=1; |
|
}else if(t<0) |
|
{ |
|
_this.index = _this.index - 0.5; |
|
if (_this.index < 0.5) { |
|
_this.index = 0.5; |
|
} |
|
} |
|
_this.imgViewContent.style.marginLeft = _this.imgMarginLeft - ((_this.index - 1) * _this.imgWidth) / 2 + "px"; |
|
_this.imgViewContent.style.marginTop = _this.imgMarginTop - ((_this.index - 1) * _this.imgHeight) / 2 + "px"; |
|
_this.dialogImg.style.width = _this.imgWidth * _this.index + "px"; |
|
_this.dialogImg.style.height = _this.imgHeight * _this.index + "px"; |
|
}, |
|
// 鼠标按下事件(拖拽用) |
|
mousedown: function (_this, event) { |
|
event.preventDefault(); |
|
var imgWidth = _this.imgWidth * _this.index; |
|
var imgHeight = _this.imgHeight * _this.index; |
|
var rotateNum = _this.num * 90; |
|
// 根据旋转的角度不同,坐标也不一样 |
|
if (rotateNum % 90 == 0 && rotateNum % 180 != 0 && rotateNum % 270 != 0 && rotateNum % 360 != 0) { |
|
_this.startX = (imgWidth - imgHeight) / 2 + imgHeight - event.offsetY; |
|
_this.startY = event.offsetX - (imgWidth - imgHeight) / 2; |
|
} else if (rotateNum % 180 == 0 && rotateNum % 360 != 0) { |
|
_this.startX = imgWidth - event.offsetX; |
|
_this.startY = imgHeight - event.offsetY; |
|
} else if (rotateNum % 270 == 0 && rotateNum % 360 != 0) { |
|
_this.startX = (imgWidth - imgHeight) / 2 + event.offsetY; |
|
_this.startY = imgWidth - event.offsetX - (imgWidth - imgHeight) / 2; |
|
} else { |
|
_this.startX = event.offsetX; |
|
_this.startY = event.offsetY; |
|
} |
|
document.addEventListener('mousemove', mousemove); |
|
document.addEventListener('mouseup', mouseup); |
|
// 拖拽 |
|
function mousemove(event) { |
|
_this.y = event.clientY - _this.startY - 10; |
|
_this.x = event.clientX - _this.startX - 10; |
|
_this.imgViewContent.style.marginTop = "" + _this.y + "px"; |
|
_this.imgViewContent.style.marginLeft = "" + _this.x + "px"; |
|
_this.imgViewContent.style.transition = "margin 0s"; |
|
}; |
|
// 鼠标放开 |
|
function mouseup() { |
|
document.removeEventListener('mousemove', mousemove); |
|
document.removeEventListener('mouseup', mouseup); |
|
_this.imgViewContent.style.transition = "all 0.6s"; |
|
} |
|
}, |
|
// 关闭 |
|
close: function (_this) { |
|
var imgViewDiv = document.getElementById("imgViewDiv"); |
|
imgViewDiv.setAttribute("class", "img-view-dialog closing"); |
|
setTimeout(function () { |
|
imgViewDiv.setAttribute("class", "img-view-dialog"); |
|
imgViewDiv.style.display = "none"; |
|
_this.num = 0; |
|
}, 400); |
|
}, |
|
// 旋转 |
|
rotate: function (_this, angle) { |
|
_this.num += angle; |
|
_this.imgViewContent.style.transform = "rotate(" + _this.num + "deg) scale(1, 1)"; |
|
}, |
|
// 适合屏幕 |
|
full: function (_this) { |
|
_this.dialogImg.style.cssText = "width:" + _this.winWidth + "px; height:" + _this.winHeight + "px;"; |
|
_this.imgViewContent.style.cssText = "margin-top:" + 0 + "px; margin-left:" + 0 + "px"; |
|
}, |
|
// 上一张 |
|
prev: function (_this) { |
|
var thisSrc = _this.dialogImg.src; |
|
var dataList = _this.options.dataList; |
|
var imgObj=_this.options.dataList.find(item=>new RegExp(item.FJMC + '$').test(thisSrc)); |
|
var index = dataList.indexOf(imgObj); |
|
if (index > 0 && index <= (dataList.length - 1)) { |
|
index = index - 1; |
|
_this.checkImg(dataList[index].AttachLocationPath, index); |
|
} |
|
}, |
|
// 上一张 |
|
next: function (_this) { |
|
var thisSrc = _this.dialogImg.src; |
|
var dataList = _this.options.dataList; |
|
var imgObj=_this.options.dataList.find(item=>new RegExp(item.FJMC + '$').test(thisSrc)); |
|
var index = dataList.indexOf(imgObj); |
|
if (index >= 0 && index < (dataList.length - 1)) { |
|
index = index + 1; |
|
_this.checkImg(dataList[index].AttachLocationPath, index); |
|
} |
|
}, |
|
// 上一张 |
|
setSelected: function (_this,fjmc,state) { |
|
var thisSrc = fjmc; |
|
var smallImgDom = document.getElementsByClassName("smallImg"); |
|
for(var i=0;i<smallImgDom.length;i++) |
|
{ |
|
if(new RegExp(thisSrc + '$').test(smallImgDom[i].src)){ |
|
if(state) |
|
{ |
|
smallImgDom[i].style.border="3px solid red" |
|
}else |
|
{ |
|
smallImgDom[i].style.border="0px solid red" |
|
} |
|
} |
|
} |
|
}, |
|
// 全选 |
|
SelecteAll: function (_this) |
|
{ |
|
var smallImgDom = document.getElementsByClassName("smallImg"); |
|
var selectcount=0; |
|
var Selected=0; |
|
for(var i=0;i<smallImgDom.length;i++) |
|
{ |
|
if(smallImgDom[i].style.border=="3px solid red") |
|
{ |
|
selectcount++; |
|
} |
|
} |
|
for(var i=0;i<smallImgDom.length;i++) |
|
{ |
|
if(selectcount!=smallImgDom.length) |
|
{ |
|
smallImgDom[i].style.border="3px solid red" |
|
Selected=1; |
|
}else |
|
{ |
|
smallImgDom[i].style.border="0px solid red" |
|
Selected=0; |
|
} |
|
} |
|
for(var i=0;i<this.options.dataList.length;i++) |
|
{ |
|
this.options.dataList[i].isCheck = Selected == 1 |
|
} |
|
_this.Socket.send("SelecteAll:"+Selected) |
|
}, |
|
//全屏查看 |
|
FullScreen: function (_this) |
|
{ |
|
var thisSrc = _this.dialogImg.src; |
|
var imgObj=_this.options.dataList.find(item=>new RegExp(item.FJMC + '$').test(thisSrc)); |
|
if(_this.Socket.readyState==1){ |
|
_this.Socket.send("FullScreen:"+JSON.stringify(imgObj)) |
|
} |
|
}, |
|
// 上一张 |
|
setScroll: function (_this,a) { |
|
var _w=(_this.options.dataList.length*68)+(_this.options.dataList.length*8); |
|
_this.imgListContainer.style.width=_w+"px"; |
|
if(_w<_this.winWidth){ |
|
_this.imgListContainer.style.left="0px"; |
|
}else |
|
{ |
|
var _c=_w-_this.winWidth; |
|
var _cn=_c/76; |
|
if(a>0&&_c>_this.ScrollVal){ |
|
_this.ScrollVal+=_w/_this.options.dataList.length; |
|
_this.imgListContainer.style.left=_this.ScrollVal*-1+"px"; |
|
}else if(a<0) |
|
{ |
|
_this.ScrollVal-=_w/_this.options.dataList.length; |
|
if(_this.ScrollVal<0) |
|
_this.ScrollVal=0 |
|
} |
|
_this.imgListContainer.style.left=_this.ScrollVal*-1+"px"; |
|
} |
|
//alert(_this.imgListContainer); |
|
//var thisSrc = _this.dialogImg.src; |
|
//var dataList = _this.options.dataList; |
|
//var index = dataList.indexOf(thisSrc); |
|
//if (index >= 0 && index < (dataList.length - 1)) { |
|
// index = index + 1; |
|
// _this.checkImg(dataList[index], index); |
|
//} |
|
}, |
|
// 下一张 |
|
setSrc: function (_this, src) { |
|
// var dialogImg = document.getElementById("dialogImg"); |
|
// var thisSrc = dialogImg.attributes[2].value; |
|
// if (thisSrc.indexOf("width:") != -1 || thisSrc.indexOf("height:") != -1) { |
|
// thisSrc = dialogImg.attributes[3].value; |
|
// } |
|
// var dataList = _this.options.dataList; |
|
// var index = dataList.indexOf(thisSrc); |
|
// if (index >= 0 && index < (dataList.length - 1)) { |
|
// index = index + 1; |
|
// _this.checkImg(dataList[index]); |
|
// } |
|
_this.checkImg(src); |
|
}, |
|
// 点击图片 |
|
checkImg: function (thisSrc) { |
|
var _this = this; |
|
_this.index = 1; |
|
_this.num = 0; |
|
_this.dialogImg.style.transform = ""; |
|
_this.imgViewContent.setAttribute("class", "img-view-content"); |
|
_this.getWindowWH(); |
|
/* if (index == 0) { |
|
_this.btnPrev.style.display = "none"; |
|
} else if (index == (dataList.length - 1)) { |
|
_this.btnNext.style.display = "none"; |
|
} else { |
|
_this.btnPrev.style.display = "block"; |
|
_this.btnNext.style.display = "block"; |
|
} */ |
|
var image = new Image(); |
|
image.src = thisSrc; |
|
var width = _this.winWidth;//image.width; |
|
var height = _this.winHeight;//image.height; |
|
// var ww = 860; |
|
// var wh = _this.winHeight - 20; |
|
// if (width < ww && height < wh) { |
|
// width = width; |
|
// height = height; |
|
// } else { |
|
// var scale_x = width / ww; |
|
// var scale_y = height / wh; |
|
// if (scale_x > scale_y) { |
|
// var width = ww; |
|
// var height = parseInt(height / scale_x); |
|
// } else { |
|
// var width = parseInt(width / scale_y); |
|
// var height = wh; |
|
// } |
|
// } |
|
_this.imgWidth = width; |
|
_this.imgHeight = height; |
|
var left = 0;//(_this.winWidth - width) / 2; |
|
var top = 0;//(_this.winHeight - height) / 2; |
|
_this.imgMarginLeft = left; |
|
_this.imgMarginTop = top; |
|
_this.imgViewContent.style.cssText = "margin-top:" + top + "px; margin-left:" + left + "px"; |
|
_this.dialogImg.style.cssText = "width:" + width + "px; height:" + height + "px;"; |
|
_this.dialogImg.setAttribute("src", thisSrc); |
|
_this.imgViewContent.setAttribute("class", "img-view-content loadingImg"); |
|
//setTimeout(function () { |
|
//_this.dialogImg.setAttribute("src", thisSrc); |
|
//_this.imgViewContent.setAttribute("class", "img-view-content loadingImg"); |
|
//}, 600); |
|
|
|
var thisSrc = _this.dialogImg.src; |
|
var dataList = _this.options.dataList; |
|
var imgObj=_this.options.dataList.find(item=>new RegExp(item.FJMC + '$').test(thisSrc)); |
|
var index = dataList.indexOf(imgObj); |
|
_this.imgIdx.innerText=index+1; |
|
_this.imgCount.innerText=dataList.length; |
|
if(_this.Socket.readyState==1){ |
|
_this.Socket.send("Next:"+JSON.stringify(imgObj)) |
|
} |
|
}, |
|
// 获取浏览器宽高 |
|
getWindowWH: function () { |
|
var _this = this; |
|
if (window.innerWidth) |
|
_this.winWidth = window.innerWidth; |
|
else if ((document.body) && (document.body.clientWidth)) |
|
_this.winWidth = document.body.clientWidth; |
|
// 获取窗口高度 |
|
if (window.innerHeight) |
|
_this.winHeight = window.innerHeight; |
|
else if ((document.body) && (document.body.clientHeight)) |
|
_this.winHeight = document.body.clientHeight-74; |
|
// 通过深入 Document 内部对 body 进行检测,获取窗口大小 |
|
if (document.documentElement && document.documentElement.clientHeight && document.documentElement.clientWidth) { |
|
_this.winHeight = document.documentElement.clientHeight-74; |
|
_this.winWidth = document.documentElement.clientWidth; |
|
} |
|
} |
|
} |
|
window.ImgView = ImgView; |
|
}(window, document)); |