Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Mike Lewis on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Drag and Drop - Prevent Image overlap

Status
Not open for further replies.

rbarnett10

Programmer
Dec 18, 2008
1
US
I have a drag and drop code that works fine except I'm trying to prevent images from overlapping. I succeeded in this except that after I drop the image I can no longer drag the image back to it's original place because it recognizes that original place as having an image. Below is the javascript code in its entirety but I believe the issue is in the movemouse function.

I would be very grateful if someone has any thoughts on this.

<script Language="JavaScript">
function winOpen(urlValue, winName) {
win = window.open(urlValue,winName,'width=750,height=600,status=yes,resizable=yes,scrollbars=yes');
}


function submitForm (opr) {
var theForm = document.CourseList;
theForm.action.value = opr;
if ( opr == 'Search' )
theForm.submit();
else if ( opr == 'Update' ) {
answer = confirm("Are you sure you want to update these students?");
if ( answer == true ) {
theForm.submit();
}
}
else
return;
}

var gSelected = -1;
var gDownTime;

function engageMe(num, evt) {
var el = document.getElementById("imgDiv" + num) || document.getElementById("imgDivNewKid" + num);

gSelected = num;
gDownTime = new Date();
el.style.backgroundColor="#ECF2D3";

return false;

}

function unengageMe(num, evt) {
var el = document.getElementById("imgDiv" + num) || document.getElementById("imgDivNewKid" + num);
el.style.backgroundColor="#FFFFFF";
}

function showAttendanceWindow(num) {
var rowID = document.getElementById("rowID" + num).value;

winOpen("attperiodselect.html?date=`STRING(TODAY)`&course=" + document.getElementById("courseSectionSeq").value
+ "&sps=" + document.getElementById("schoolPeriodsSeq").value
+ "&stu=" + rowID,
"attendace");
}


function positionEm() {
var numKids = document.getElementById("numKids").value;
var i;
var posEl;
var pos;
for (i = 1; i <= numKids; i++) {
posEl = document.getElementById("imgPos" + i);
if (posEl) {
posArr = posEl.value.split(',');
divEl = document.getElementById("imgDiv" + i);
if (divEl) {
divEl.style.left = posArr[0];
divEl.style.top = posArr[1];
}
}
}
}

function Trim(str)
{ while(str.charAt(0) == (" ") )
{ str = str.substring(1);
}
while(str.charAt(str.length-1) == " " )
{ str = str.substring(0,str.length-1);
}
return str;
}

function positionIt(e) {
initPosSplit = initPos.value.split(',');
noPx = /[px]/ig;
xPos = initPosSplit[0].replace(noPx, "");
yPos = initPosSplit[1].replace(noPx, "");

var yPosTrimmed;
yPosTrimmed = Trim(yPos);
yPosTrimmed = Trim(yPos);
dobj.style.top = yPosTrimmed;
dobj.style.left = xPos;
}

var ie=document.all;
var nn6=document.getElementById&&!document.all;

var isdrag=false;
var x,y;
var dobj;

function findPos(obj) { //from var curleft = curtop = 0;
if (obj.offsetParent) {
curleft = obj.offsetLeft
curtop = obj.offsetTop
while (obj = obj.offsetParent) {
curleft += obj.offsetLeft
curtop += obj.offsetTop
}
}
return [curleft,curtop];
} //end quirksmode code


function movemouse(e)
{
if (isdrag)
{
dobj.style.left = nn6 ? tx + e.clientX - x + "px" : tx + event.clientX - x + "px";
dobj.style.top = nn6 ? ty + e.clientY - y + "px" : ty + event.clientY - y + "px";
return false;
}

initPos = document.getElementById("imgPos" + gSelected);

initPosSplit = initPos.value.split(',');
noPx = /[px]/ig;
xPos = initPosSplit[0].replace(noPx, "");
yPos = initPosSplit[1].replace(noPx, "");

var numKids = document.getElementById("numKids").value;
var i;

if(dobj.offsetLeft < 0 || dobj.offsetTop < 330) {
positionIt(initPos);
window.alert("You cannot place the image there.");
}else {
// check to see if they overlap

var numKids = document.getElementById("numKids").value;
var i;
var posEl;
var pos;
var posY;
var PosX;

for (i = 1; i <= numKids; i++) {
if( i != parseInt(gSelected)) {
posY = parseInt(dobj.style.top.replace('px'));
PosX = parseInt(dobj.style.left.replace('px'));
//window.alert(i + " " + numKids + " " + gSelected);
posEl = document.getElementById("imgPos" + i);
if (posEl) {
posArr = posEl.value.split(',');
posArr[0] = parseInt(posArr[0].replace('px'));
posArr[1] = parseInt(posArr[1].replace('px'));
myPos = findPos( document.getElementById("imgPos" + gSelected));
xStart = myPos[0]; //initial position of image just moved
yStart = myPos[1];

//if( (PosX >= xStart && PosX < (xStart + `cImgWidth`)) || (PosY >= yStart < (yStart + `cImgHeight`)) )// within the image
//(PosX < xStart && PosX > (xStart + `cImgWidth`)) && (PosY < yStart > (yStart + `cImgHeight`)) &&
divEl = document.getElementById("imgDiv" + i);
if( (PosX >= posArr[0] && PosX < (posArr[0] + `cImgWidth`)) || (posArr[0] >= PosX && posArr[0] < (PosX + `cImgWidth`)) ){
//window.alert(divEl.name);
positionIt(initPos);
}
}
}
}
document.getElementById("imgPos" + gSelected).value = dobj.style.left + ', ' + dobj.style.top;
}
}

function selectmouse(e)
{
var fobj = nn6 ? e.target : event.srcElement;
var topelement = nn6 ? "HTML" : "BODY";
while (fobj.tagName != topelement && fobj.className != "imgDiv" && fobj.className != "imgDivNewKid")
{
fobj = nn6 ? fobj.parentNode : fobj.parentElement;
}

if (fobj.className=="imgDiv" || fobj.className=="imgDivNewKid")
{
isdrag = true;
dobj = fobj;
tx = parseInt(dobj.style.left+0);
ty = parseInt(dobj.style.top+0);
x = nn6 ? e.clientX : event.clientX;
y = nn6 ? e.clientY : event.clientY;
document.onmousemove=movemouse;
return false;
}
}

document.onmousedown=selectmouse;
document.onmouseup=new Function("isdrag=false");

</script>
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top