|
|
//拖拽签章
|
|
|
|
|
|
/**
|
|
|
* 获取当前标签相对于页面的横向坐标
|
|
|
* @param e 标签对象
|
|
|
*/
|
|
|
function getLeft(e) {
|
|
|
var offset = e.offsetLeft;
|
|
|
if (e.offsetParent != null)
|
|
|
offset += getLeft(e.offsetParent);
|
|
|
return offset;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取当前标签相对于页面的纵向坐标
|
|
|
* @param e 标签对象
|
|
|
*/
|
|
|
function getTop(e) {
|
|
|
var offset = e.offsetTop;
|
|
|
if (e.offsetParent != null)
|
|
|
offset += getTop(e.offsetParent);
|
|
|
return offset;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取签章偏移量,仅对拖拽签章有效
|
|
|
*/
|
|
|
function $getDragSignPosition() {
|
|
|
var dragSignPosition = {
|
|
|
X: $_$CurDragPosX,
|
|
|
Y: $_$CurDragPosY
|
|
|
}
|
|
|
return dragSignPosition;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取拖拽印章图片
|
|
|
* @param stampID 印章DIV的id
|
|
|
*/
|
|
|
function $DragSeal(stampID, strCertID, strSealID) {
|
|
|
BWS_GetStampPic(strCertID, strSealID, function (ret) {
|
|
|
if (ret.retVal == "") {
|
|
|
//ie11以下ie浏览器,若签章失败必须清空当前div,否则会影响前一个div
|
|
|
deleteSigDiv(stampID);
|
|
|
// $GetLastErrJS();
|
|
|
return;
|
|
|
}
|
|
|
var sealObj = document.getElementById($_$Seal_Img_Name);
|
|
|
sealObj.src = "data:image/gif;base64," + ret.retVal;
|
|
|
// $_$sealImg.src = "data:image/gif;base64," + ret.retVal;
|
|
|
var sealDivObj = document.getElementById($_$Seal_Pic_Div_Name);
|
|
|
sealDivObj.style.display = "block";
|
|
|
var parMainObj = document.getElementById($_$Seal_Pic_Main_Div_Name);
|
|
|
parMainObj.style.display = "block";
|
|
|
$_$bPos = false;
|
|
|
|
|
|
if($_$is_windows) {
|
|
|
ESeal_GetStampPicWH(function(ret){
|
|
|
document.getElementById($_$Seal_Img_Name).style.width = ret.width;
|
|
|
document.getElementById($_$Seal_Pic_Div_Name).style.width = ret.width;
|
|
|
})
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 删除页面中的印章元素
|
|
|
* @param stampID 印章DIV的id
|
|
|
*/
|
|
|
function deleteSigDiv(stampID) {
|
|
|
var sealPicMainDivName = "sealPicMain" + stampID;
|
|
|
var sealObj = document.getElementById(sealPicMainDivName);
|
|
|
if (sealObj != null)
|
|
|
sealObj.parentNode.removeChild(sealObj);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 拖拽印章
|
|
|
* @param strCertID 证书ID,仅对信创平台有效
|
|
|
* @param strSealID 印章ID,仅对信创平台有效
|
|
|
* @param orgdata 原文
|
|
|
* @param stampID 印章DIV的id
|
|
|
* @param container_name 签名容器
|
|
|
*/
|
|
|
function BWS_DragSign(strCertID, strSealID, orgdata, stampID, container_name)
|
|
|
{
|
|
|
$_$CurStampID = stampID;
|
|
|
$_$CurOrgData[stampID] = orgdata;
|
|
|
$_$CurCertID[stampID] = strCertID;
|
|
|
$_$CurSealID[stampID] = strSealID;
|
|
|
|
|
|
//清空Main div
|
|
|
deleteSigDiv(stampID);
|
|
|
|
|
|
//Main div
|
|
|
$_$Seal_Pic_Main_Div_Name = "sealPicMain" + stampID;
|
|
|
var sealPicMainDiv = document.createElement("div");
|
|
|
sealPicMainDiv.setAttribute("id", $_$Seal_Pic_Main_Div_Name);
|
|
|
sealPicMainDiv.style.position = "relative";
|
|
|
sealPicMainDiv.className = $_$Seal_Pic_Main_Div_Name;
|
|
|
if (container_name) {
|
|
|
$_$CurContainerName = container_name;
|
|
|
var containerDiv = document.getElementById($_$CurContainerName);
|
|
|
if (containerDiv) {
|
|
|
containerDiv.appendChild(sealPicMainDiv);
|
|
|
}
|
|
|
} else {
|
|
|
container_name = "BODY";
|
|
|
$_$CurContainerName = container_name;
|
|
|
document.body.appendChild(sealPicMainDiv);
|
|
|
}
|
|
|
|
|
|
//印章div
|
|
|
$_$Seal_Pic_Div_Name = "sealPicDiv" + stampID;
|
|
|
var sealDiv = document.createElement("div");
|
|
|
sealDiv.setAttribute("id", $_$Seal_Pic_Div_Name);
|
|
|
sealDiv.className = $_$Seal_Pic_Div_Name;
|
|
|
sealDiv.style.position = "relative";
|
|
|
sealDiv.style.left = "100px";
|
|
|
sealDiv.style.top = "100px";
|
|
|
sealDiv.style.display = "none";
|
|
|
document.getElementById($_$Seal_Pic_Main_Div_Name).appendChild(sealDiv);
|
|
|
|
|
|
//图片
|
|
|
$_$Seal_Img_Name = "sealImg" + stampID;
|
|
|
var img = document.createElement("img");
|
|
|
img.setAttribute("id", $_$Seal_Img_Name);
|
|
|
document.getElementById($_$Seal_Pic_Div_Name).appendChild(img);
|
|
|
|
|
|
//拖拽签章
|
|
|
$DragSeal(stampID, strCertID, strSealID, function(ret){
|
|
|
if (typeof cb == 'function') {
|
|
|
var retObj = {retVal:ret.value};
|
|
|
cb(retObj);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
document.ondragstart = function () {
|
|
|
return false;
|
|
|
};
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 鼠标拖动印章
|
|
|
*/
|
|
|
document.onmousemove = function (event) {
|
|
|
event = event || window.event;
|
|
|
|
|
|
if ($_$bPos)
|
|
|
return;
|
|
|
|
|
|
var sealPic = window.document.getElementById($_$Seal_Pic_Div_Name);
|
|
|
var sealImg = window.document.getElementById($_$Seal_Img_Name);
|
|
|
var mainDIV = window.document.getElementById($_$Seal_Pic_Main_Div_Name);
|
|
|
var containerDIV = $_$CurContainerName;
|
|
|
if (containerDIV == "" || mainDIV == null || sealPic == null || sealImg == null /*|| $_$sealImg.src == ""*/)
|
|
|
return;
|
|
|
|
|
|
//luoxing 因适配高dpi显示,图片的像素可能会比实际需要展示的像素大,div的像素大于内部img对象的显示会产生部分页面区域被覆盖无法点击
|
|
|
//var sealPicWidth = $_$sealImg.width;
|
|
|
//var sealPicHeight = $_$sealImg.height;
|
|
|
//sealPic.style.width = sealPicWidth + "px";
|
|
|
//sealPic.style.height = sealPicHeight + "px";
|
|
|
|
|
|
var containerObj = window.document.getElementById(containerDIV);
|
|
|
if (containerObj == null)
|
|
|
return;
|
|
|
|
|
|
sealPic.style.display = "block";
|
|
|
//鼠标在印章div的外面,加1,从而定位
|
|
|
var pixelLeft = document.body.scrollLeft + event.clientX + 1;
|
|
|
var pixelTop = document.body.scrollTop + event.clientY + 1;
|
|
|
|
|
|
var t = containerObj.offsetTop; //获取该元素对应父容器的上边距
|
|
|
var l = containerObj.offsetLeft; //对应父容器的上边距
|
|
|
//判断是否有父容器,如果存在则累加其边距
|
|
|
while (containerObj = containerObj.offsetParent) {//等效 obj = obj.offsetParent;while (obj != undefined)
|
|
|
t += containerObj.offsetTop; //叠加父容器的上边距
|
|
|
l += containerObj.offsetLeft; //叠加父容器的左边距
|
|
|
}
|
|
|
sealPic.style.left = pixelLeft - l + "px";
|
|
|
sealPic.style.top = pixelTop - t + "px";
|
|
|
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* 鼠标点击盖章
|
|
|
*/
|
|
|
document.onmousedown = function (event) {
|
|
|
event = event || window.event;
|
|
|
if (oMenu) {
|
|
|
var srcObj = event.srcElement ? event.srcElement : event.target;
|
|
|
var srcObjName = srcObj.id.substr(0, 5);
|
|
|
if (srcObjName != "liObj") {
|
|
|
oMenu.style.display = "none";
|
|
|
}
|
|
|
}
|
|
|
if (event.button == 1 || event.button == 0) {
|
|
|
//ie11 是0,ie9 是1
|
|
|
if ($_$bPos)
|
|
|
return;
|
|
|
|
|
|
var evtObj = event.srcElement ? event.srcElement : event.target;
|
|
|
var sealPic = window.document.getElementById($_$Seal_Pic_Div_Name);
|
|
|
var sealImg = window.document.getElementById($_$Seal_Img_Name);
|
|
|
var mainDIV = window.document.getElementById($_$Seal_Pic_Main_Div_Name);
|
|
|
var containerDIV = $_$CurContainerName;
|
|
|
if (containerDIV == null || mainDIV == null || sealPic == null || sealImg == null /*|| $_$sealImg.src == ""*/)
|
|
|
return;
|
|
|
|
|
|
var posX;
|
|
|
var posY;
|
|
|
|
|
|
// luoxing 获取浏览器版本
|
|
|
var explorer = window.navigator.userAgent.toLowerCase();
|
|
|
var explorer_obj;
|
|
|
if (explorer.indexOf("firefox") >= 0) {
|
|
|
var ver = explorer.match(/firefox\/([\d.]+)/)[1];
|
|
|
explorer_obj ={ type: "Firefox", version: ver };
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
explorer_obj ={ type: "", version: ver };
|
|
|
}
|
|
|
|
|
|
var containerObj = window.document.getElementById(containerDIV);
|
|
|
if (containerObj == null)
|
|
|
return;
|
|
|
|
|
|
//坐标补偿
|
|
|
// if (event.x == undefined) 这个在IE下可能造成获取坐标错误,待检验浏览器兼容性
|
|
|
if (event.pageX)
|
|
|
{
|
|
|
var sealPosX = event.pageX;
|
|
|
var sealPosY = event.pageY;
|
|
|
}else
|
|
|
{
|
|
|
var sealPosX = event.x;
|
|
|
var sealPosY = event.y;
|
|
|
}
|
|
|
|
|
|
var scroll_top = 0;
|
|
|
if (document.documentElement && document.documentElement.scrollTop) {
|
|
|
scroll_top = document.documentElement.scrollTop;
|
|
|
}
|
|
|
else if (document.body) {
|
|
|
scroll_top = document.body.scrollTop;
|
|
|
}
|
|
|
|
|
|
posX = document.body.scrollLeft + sealPosX - containerObj.offsetLeft - mainDIV.offsetLeft;
|
|
|
// if (explorer_obj.type == "Firefox")
|
|
|
// {
|
|
|
// posY = sealPosY - containerObj.offsetTop - mainDIV.offsetTop;
|
|
|
// }else
|
|
|
// {
|
|
|
posY = sealPosY + scroll_top - containerObj.offsetTop - mainDIV.offsetTop;
|
|
|
// }
|
|
|
|
|
|
sealPic.style.left = posX + "px";
|
|
|
sealPic.style.top = posY + "px";
|
|
|
|
|
|
var ele = document.getElementById($_$CurContainerName);
|
|
|
if (ele != null) {
|
|
|
//标签相对页面左上角的绝对坐标
|
|
|
var rtElementLeft, rtElementTop;
|
|
|
rtElementLeft = getLeft(ele);
|
|
|
rtElementTop = getTop(ele);
|
|
|
$_$CurDragPosX = posX + rtElementLeft;
|
|
|
$_$CurDragPosY = posY + rtElementTop;
|
|
|
}
|
|
|
|
|
|
if (containerDIV != "BODY") {
|
|
|
var containerObj = window.document.getElementById(containerDIV);
|
|
|
if (containerObj != null) {
|
|
|
//容器相对页面左上角的绝对坐标
|
|
|
containerObj = document.getElementById(containerDIV);
|
|
|
var containerElementLeft,
|
|
|
containerElementTop;
|
|
|
containerElementLeft = getLeft(containerObj);
|
|
|
containerElementTop = getTop(containerObj);
|
|
|
|
|
|
//再计算相对坐标
|
|
|
$_$CurDragPosX -= containerElementLeft;
|
|
|
$_$CurDragPosY -= containerElementTop;
|
|
|
}
|
|
|
}
|
|
|
$_$bPos = true;
|
|
|
|
|
|
BWS_Sign($_$CurCertID[$_$CurStampID], $_$CurOrgData[$_$CurStampID], $DragSignCallback);
|
|
|
|
|
|
//document.getElementById('sealPicDiv').style.display = 'none';
|
|
|
//document.getElementById('sealPicDiv').style.backgroundImage = "";
|
|
|
} else if (event.button == 2) {
|
|
|
//右键取消
|
|
|
if ($_$bPos)
|
|
|
return;
|
|
|
//document.getElementById($_$Seal_Pic_Div_Name).style.display = "none";
|
|
|
deleteSigDiv($_$CurStampID);
|
|
|
$_$bPos = true;
|
|
|
// document.getElementById($_$Seal_Pic_Div_Name).style.backgroundImage = "";
|
|
|
}
|
|
|
}; |