I've been working for a while on this code and I need a second pair of eyes here.
The idea is as follow :
1. Save the Code in an HTML file.
2. Open in browser.
3. Click the [Drag/Zoom] Icon, change it to Zoom.
4. Click anywhere on the screen and try to zoom into the elephants eye.
You will notice that after 5+ zoom activities, you will lose your target.
Half of the code is a "debug" code, so you can ignore it.
Also, if anyone has a ready made code to receive the same effect (IE5.5+ only) I will consider this as an answer.
--------------------------
----------
----------
----------
----------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> Blank:Document </TITLE>
<META NAME="Author" CONTENT="(C)Avner Cohen">
<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
var initX="";
var initY="";
var bDrag = true;
var bDoReal = true;
function fillDiv(div,basicStr,count
er)
{
var div=document.getElementByI
d(div);
var str="";
for (var i=0;i<counter;i++)
{
str+=basicStr
str+=(i%10==0)?" ":"";
}
div.innerHTML=str;
}
function scrollDiv()
{
var div=document.getElementByI
d("moshe")
;
div.scrollTop=(initY-event
.y);
div.scrollLeft=(initX-even
t.x);
}
function dragDiv(doEnd)
{
var div=document.getElementByI
d("moshe")
;
if (!doEnd)
{
initX=event.x+div.scrollLe
ft;
initY=event.y+div.scrollTo
p;
div.onmousemove=scrollDiv
event.srcElement.style.cur
sor="move"
;
}
else
{
div.onmousemove=null
event.srcElement.style.cur
sor="";
}
}
function actionDiv(doEnd)
{
if (bDrag)
{
dragDiv(doEnd)
}
else
{
drawBox(doEnd);
}
}
var oBox = null;
function drawBox(doEnd)
{
var div=document.getElementByI
d("moshe")
;
if (!doEnd)
{
if (!oBox)
{
oBox=document.createElemen
t("DIV");
document.body.appendChild(
oBox);
div.onmousemove=drawBox
with(oBox.style)
{
position="absolute";
border="2px dashed";
width = "20px";
height = "15px";
}
}
else //Case that mouse is now moving, drag the size
{
with(oBox.style)
{
left = event.x-2
top = event.y-2
}
}
}
else if (oBox)
{
//Box is up, calculate the center of the box and zoom into it.
var oImage = div.firstChild;
var iHeight = parseInt(oBox.offsetHeight
);
var iWidth = parseInt(oBox.offsetWidth)
;
var iPosXImage = posX(oImage)
var iPosYImage = posY(oImage)
var iPosEvent_X = event.clientX;
var iPosEvent_Y = event.clientY;
var iDistanceInImage_X = event.screenX- iPosXImage;
var iDistanceInImage_Y = event.screenY- iPosYImage;
var iCenter_X = Math.round( iDistanceInImage_X -( iWidth));
var iCenter_Y = Math.round(iDistanceInImag
e_Y - (iHeight)) ;
var iZoomFactor = Math.floor((oImage.style.z
oom == "") ? 120 : parseInt(oImage.style.zoom
)*1.2 );
if (iZoomFactor >400)
{
iZoomFactor = 400
}
//Calculate offset of (iScrollTo_X/iScrollTo_Y) from center of Image;
//Center of Image
var iCenterOfImage_X = iPosXImage + (oImage.parentNode.offsetW
idth/2)
var iCenterOfImage_Y = iPosYImage +(oImage.parentNode.offset
Height/2)
//distance from posX of Event
var iDistance_X = iPosEvent_X - iCenterOfImage_X;
var iDistance_Y = iPosEvent_Y - iCenterOfImage_Y;
//Scroll To Point :
var iRelativeScrollTop = Math.round( parseInt(div.scrollTop) ) /// (iZoomFactor/100) );
var iRelativeScrollLeft = Math.round( parseInt(div.scrollLeft) ) /// (iZoomFactor/100) );
var iScrollTo_X = iRelativeScrollLeft + (iDistance_X * -1 ) ;
var iScrollTo_Y = iRelativeScrollTop + (iDistance_Y* -1) ;
//var iScrollTo_X = (iCenter_X + iRelativeScrollLeft + iDistance_X) //* (iZoomFactor/100);
//var iScrollTo_Y = (iCenter_Y + iRelativeScrollTop + iDistance_Y) // * (iZoomFactor/100) ;
//var iScrollTo_Y = (event.y + iRelativeScrollTop + iDistance_Y + iCenter_Y) - (div.offsetHeight/2)
//var iScrollTo_X = (event.x + iRelativeScrollLeft + iDistance_X + iCenter_X) - (div.offsetWidth/2)
var oTA = document.getElementById("o
utput");
oTA.innerText+="\n" +iIndex + ": [X:" + iScrollTo_X+",Y:" + iScrollTo_Y+"]\n"+iIndex + ": [xdis" + iDistance_X + ",ydis" +iDistance_Y+"]";
xPoint.value = xScroll.value = iScrollTo_X;
yPoint.value = yScroll.value = iScrollTo_Y;
DrawPoint(div, iScrollTo_X, iScrollTo_Y);
if (bDoReal)
{
ScrollTo(div, iScrollTo_X, iScrollTo_Y);
oImage.style.zoom = iZoomFactor + "%";
}
else
{
document.getElementById("x
Should").i
nnerText = div.scrollTop;
document.getElementById("y
Should").i
nnerText = div.scrollLeft;
}
//debugger;
oBox.parentNode.removeChil
d(oBox);
div.onmousemove=null
oBox = null;
event.srcElement.style.cur
sor="";
}
}
function ScrollTo(oParent, x, y )
{
oParent.scrollTop = x;
oParent.scrollLeft = y;
}
//Debug
var iIndex = 0;
function DrawPoint(oParent, x, y )
{
var oPoint = document.createElement("DI
V");
oPoint.innerText = iIndex;
with (oPoint.style)
{
fontSize="9px";
zIndex=999
overflow="hidden";
backgroundColor = "yellow";
height=oPoint.style.width=
"10px";
position="absolute";
left= x ;
top= y;
}
oParent.appendChild(oPoint
);
++ iIndex;
}
//Debug
function changeDoReal()
{
bDoReal = !bDoReal;
document.getElementById("D
oReal").in
nerText = bDoReal;
}
function changeZoomState(oButton)
{
bDrag = !bDrag;
oButton.innerText = (bDrag) ?"Drag" : "Zoom";
}
function posX(obj)
{
var curleft = 0;
while (obj.offsetParent)
{
curleft += obj.offsetLeft
obj = obj.offsetParent;
}
return curleft;
}
function posY(obj)
{
var curtop = 0;
while (obj.offsetParent)
{
curtop += obj.offsetTop
obj = obj.offsetParent;
}
return curtop;
}
-->
</SCRIPT>
</HEAD>
<BODY>
<button onclick ="changeDoReal()" >Do Real</button>[<span id="DoReal">true</span>]<B
R>
<button onclick="DrawPoint(documen
t.getEleme
ntById('mo
she'), xPoint.value, yPoint.value);">Draw Point</button><br>
X <input type="text" style="width:30px" id="xPoint" value="10">, Y <input type="text" style="width:30px" id="yPoint" value="15"><br>
<button onclick="ScrollTo(document
.getElemen
tById('mos
he'), xScroll.value, yScroll.value);">Scroll To</button><br>
X <input type="text" style="width:30px" id="xScroll" value="10">, Y <input type="text" style="width:30px" id="yScroll" value="15"><br>
Should Be: <br>
X[<span id="xShould"></span>], Y [<span id="yShould"></span>]<br>
<button onclick="changeZoomState(t
his)">Drag
</button>(
Drag/Zoom)
<button onclick="document.getEleme
ntById('mo
she').firs
tChild.sty
le.zoom=''
">Reset Zoom</button><br>
<textarea cols="26" rows="27" id="output"></textarea>
<DIV style="position:absolute;w
idth:395px
;height:53
0px;top:10
%;left:30%
;backgroun
d-color:re
d;overflow
:scroll" id="moshe">
<img src="
http://www.templetons.com/brad/elephant.jpg" src1="TIFImage.png" width="360px" onmousedown="actionDiv()" onmouseup="actionDiv(true)
" onselectstart="return false;" ondragstart="return false;">
</DIV><br>
</BODY>
</HTML>
--------------------------
----------
----------
-------
Good luck and thanks for the effort.
Regards,
Avner.
Start Free Trial