(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 = "
" +
"
![]()
";
var listHtml=""
for(var i=0;i
"+
"
"+
" ";
}else{
listHtml+=""+
"

"+
"
";
}
}
listHtml+="";
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 = "" +
"
![]()
";
var listHtml=""
for(var i=0;i
"+
"
"+
" ";
}else{
listHtml+=""+
"

"+
"
";
}
}
listHtml+="";
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;inew 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;inew 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));