Layer drag&drop
Beat Niedermann
- javascript
Ich habe versucht, das folgende Skript (ursprünglich für NN4/IE geschrieben) für die neuen Browser mit DOM anzupassen. Unter IE5 geht's nur, wenn ie=true gesetzt wird. Unter Mozilla tut sich gar nichts, der Layer kann gar nicht angeklickt werden.
Irgend etwas in meiner DOM-Programmierung stimmt nicht, aber was? Wer kann mir helfen?
<html>
<head>
<style type="text/css"><!--
#pos {position:absolute; index:110; left:26px; top:366px; width:16px; height:16px;}
--></style>
<script language="JavaScript1.2" type="text/javascript">
//Browsererkennung
var nn=false, ie=false, dom=false;
var BrowserName=navigator.appName, BrowserVersion=navigator.appVersion, intBrowserVersion=parseInt(BrowserVersion);
var MSVers=parseInt(BrowserVersion.slice(22,23));
var MSIE=BrowserVersion.slice(17,21);
var s=new String('');
if (BrowserName.indexOf('Microsoft') != -1 && intBrowserVersion <= 4 && MSVers<5) {
ie=true;
}
else {
if ((MSIE="MSIE" && MSVers>=5) || intBrowserVersion >= 5) {
dom=true;
}
else { nn=true; }
}
function setLeft(id,value){
if (dom) {
p=eval(document.getElementById(id));
p.style.left=value+"px";
}
else {
if(nn) p=document.layers[id];if(ie)p=document.all[id].style; p.left=parseInt(value);
}
}
function getLeft(id){
if(dom) {
p=eval(document.getElementById(id));
return parseInt(p.style.left);
}
else {
if(nn)p=document.layers[id];if (ie) p=document.all[id].style; return parseInt(p.left);
}
}
function captureMouse() {
if (dom) {
pObj=eval(document.getElementById("pos"));
pObj.xpos=pObj.style.left+"px";
pObj.ypos=pObj.style.top+"px";
pObj.w=pObj.style.width+"px";
pObj.h=pObj.style.height+"px";
}
if (nn) {
pObj=document.pos;
pObj.xpos=pObj.left;
pObj.ypos=pObj.top;
pObj.w=pObj.clip.width;
pObj.h=pObj.clip.height;
}
if (ie) {
pObj=document.all["pos"].style;
pObj.xpos=pObj.pixelLeft;
pObj.ypos=pObj.pixelTop;
pObj.w=pObj.pixelWidth;
pObj.h=pObj.pixelHeight;
}
dragActive=false;
document.onmousemove=mouseMove;
document.onmousedown=mouseDown;
document.onmouseup=mouseUp;
if (nn) document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP);
}
function mouseDown(e) {
if ((nn)&&(e.which!=1)) return;
if (nn || dom) {var x=e.pageX, y=e.pageY;}
if (ie) {var x=event.x+document.body.scrollLeft, y=event.y+document.body.scrollTop;}
if (pObj==null) return;
dragClickX=x-pObj.xpos;
var l=getLeft("pos");
if (x>=pObj.xpos && x<=pObj.xpos+11) {
dragActive=true;
fDragged=true;
//if (fDragHintVis) hideLayer("draghint");
}
}
function mouseMove(e) {
if (nn || dom) { Xpos=e.pageX; Ypos=e.pageY; }
if (ie) { Xpos=event.x+document.body.scrollLeft; Ypos=event.y+document.body.scrollTop; }
if ((dragActive) && (pObj!=null)) {
pObj.xpos=Xpos-dragClickX;
pObj.left=pObj.xpos;
//moveContent(pObj.xpos);
return false;
}
}
function mouseUp(e) {
if (dragActive) {
dragActive=false;
var l=getLeft("pos");
if (l<0) setLeft("pos",0);
if (l>760) setLeft("pos",760);
}
}
</script>
</head>
<body>
<div id="pos" style="position:absolute; left:26px; top:366px;"><img src="gif/pos.gif" width=16 height=16 border=0 alt="<--Menü-->"></div>
<script language="JavaScript1.2" type="text/javascript"><!--
captureMouse();
//--></script>
</body>
</html>
Vielen Dank, HarryS und mict!
Das Script von Walter Zorn lässt wirklich keine Wünsche offen, das auf Dr. Web läuft bei mir (NS4.6) nicht.
Hallo Beat,
Ich habe versucht, das folgende Skript (ursprünglich für NN4/IE geschrieben) für die neuen Browser mit DOM anzupassen. Unter IE5 geht's nur, wenn ie=true gesetzt wird. Unter Mozilla tut sich gar nichts, der Layer kann gar nicht angeklickt werden.
Für drag&drop musst Du unbedingt bei http://www.walterzorn.de/dragdrop/dragdrop.htm vorbeischauen, seeeehr interessant!
Grüße aus Nürnberg,
HarryS