webForumDet fria alternativet

Flytta lager efter pekare

13 svar · 472 visningar · startad av Riri

RiriMedlem sedan dec. 2000182 inlägg
#1

Nu har jag följande funktion som visar aktuellt lager och flyttar det till en fast position:

<SCRIPT LANGUAGE="JavaScript">
function ShowHideLayer(namn,varde,w,h)		
{
if (document.all)								//Explorer
{
	document.all[namn].style.visibility=varde;	//Synlighet
	document.all[namn].style.pixelLeft=w;	//Från vänster
	document.all[namn].style.pixelTop=h;		//Från höger
}
else if (document.layers)						//Netscape
{
	document.layers[namn].visibility=varde;		//Synlighet
	document.layers[namn].left = w;			//Från vänster
	document.layers[namn].top = h; 			//Från höger
}
}
//-->
</SCRIPT>

Skulle dock vilja ha det så att dess position följer pekaren. Hur f*n gör jag? Får det inta att funka... :(

------------------
DÖDEN ÄR LIVET - FAST TVÄRTOM
richardhallgren@usa.net

JohnsenMedlem sedan juli 2000836 inlägg
#2

Du får starta en funktion, när musen rör sig, som kollar var musen finns och som sätter lagrets top och left efter det.

<script language="JavaScript"><!--
if(document.layers) document.captureEvents(Event.MOUSEMOVE);
document.onmousemove = mouseMove
	
function mouseMove(e) {
var x = (document.layers)? e.pageX : event.x+document.body.scrollLeft
var y = (document.layers)? e.pageY : event.y+document.body.scrollTop

if(document.layers){ //Netscape
document.layers["namn"].top=y;
document.layers["namn"].left=x;
}
else{ //Explorer
document.all("namn").style.top=y;
document.all("namn").style.left=x;
}
}
//-->
</script>

------------------
Eskimåer har över 40 ord för snö, men bara 3 för bottenlån med rörlig ränta.

HugoMedlem sedan jan. 2001219 inlägg
#3

Kan man få igång den koden i mozilla?

JojoxxMedlem sedan juni 20004 308 inlägg
#4
<script type="text/javascript"><!--
function mouseMove(e) {
	var x = (document.all)? event.x+document.body.scrollLeft : e.pageX;
	var y = (document.all)? event.y+document.body.scrollTop : e.pageY;
	if(document.getElementById){
		document.getElementById("namn").style.top=y; document.getElementById("namn").style.left=x;
	}
	else if(document.layers){
		document.layers["namn"].top=y; document.layers["namn"].left=x;
	}
	else if(document.all){
		document.all("namn").style.top=y; document.all("namn").style.left=x;
	}
}
if(document.layers) document.captureEvents(Event.MOUSEMOVE);
document.onmousemove = mouseMove
//-->
</script>
HugoMedlem sedan jan. 2001219 inlägg
#5

Dom här två raderna sänker hela scriptet för mig i Firefox.

	var x = (document.all)? event.x+document.body.scrollLeft : e.pageX;
	var y = (document.all)? event.y+document.body.scrollTop : e.pageY;
JojoxxMedlem sedan juni 20004 308 inlägg
#6

Funkar kanon för mig i Firefox 0.8

HugoMedlem sedan jan. 2001219 inlägg
#7

Då har jag väl klantat till det någon annanstans, kan jag få html-koden också inklusive lagret som ska föja med pekaren?

JojoxxMedlem sedan juni 20004 308 inlägg
#8

Hittade något som skulle kunna ställa till problemet. Validerar du dokumentet mot xhtml måste man ange enhet ("px" i detta fall). Hade glömt det i första exemplet.

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="sv" lang="sv">
<head>
	<title>...</title>
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>

<script type="text/javascript"><!--
function mouseMove(e) {
	var x = (document.all)? event.x+document.body.scrollLeft : e.pageX;
	var y = (document.all)? event.y+document.body.scrollTop : e.pageY;
	if(document.getElementById){
		document.getElementById("namn").style.top=y+"px"; document.getElementById("namn").style.left=x+"px";
	}
	else if(document.layers){
		document.layers["namn"].top=y; document.layers["namn"].left=x;
	}
	else if(document.all){
		document.all("namn").style.top=y; document.all("namn").style.left=x;
	}
}
if(document.layers) document.captureEvents(Event.MOUSEMOVE);
document.onmousemove = mouseMove
//-->
</script>
<div id="namn" style="position:absolute;">Ett lager</div>

</body>
</html>
HugoMedlem sedan jan. 2001219 inlägg
#9

Nu funkar det fint, men....
I ett annat projekt vill jag kunna ploppa upp en ruta vid muspekaren när man håller över en bild, hur gör jag för att anropa scriptet via en OnMouseOver()
Det räcker om det hämtar positionen en gång och sätter rutan där.
Jag har försökt att modifiera scriptet men blir inte riktigt klok på denna rad:
if(document.layers) document.captureEvents(Event.MOUSEMOVE);
Samt (e) i funktionsanropet, vad gör dom egentligen?

JojoxxMedlem sedan juni 20004 308 inlägg
#10

Hugo skrev:

Jag har försökt att modifiera scriptet men blir inte riktigt klok på denna rad:
if(document.layers) document.captureEvents(Event.MOUSEMOVE);

Den är bara till för Netscape 4.x och talar om att vi vill avlyssna just eventet mousemove - när man flyttar musmarkören.

Hugo skrev:

Samt (e) i funktionsanropet, vad gör dom egentligen?

e namnger objektet som används för att lagra data om eventet (i detta fall var muspekaren är). I Internet Explorer är det alltid "event" min i Mozilla-baserade webbläsare får du alltså namnge det efter tycke och smak.

HugoMedlem sedan jan. 2001219 inlägg
#11

Då borde jag väl kunna anropa funktionen med:

<a href="" OnMouseOver="mouseMove">Dra här över</a>

Men jag får det inte att fungera.

JojoxxMedlem sedan juni 20004 308 inlägg
#12

Nej, det måste ske via eventet mousemove

HugoMedlem sedan jan. 2001219 inlägg
#13

Men om jag bara vill läsa av muspekarens position en gång högst upp i en funktion då?

JojoxxMedlem sedan juni 20004 308 inlägg
#14

Gör variablerna för mus-koodinaterna globala och läs av dem från din funktion:

<script type="text/javascript">
function showmouse(){
	alert(xmouse+":"+ymouse);
}
var xmouse,ymouse;
function mouseMove(e) {
	xmouse = (document.all)? event.x+document.body.scrollLeft : e.pageX;
	ymouse = (document.all)? event.y+document.body.scrollTop : e.pageY;
}
if(document.layers) document.captureEvents(Event.MOUSEMOVE);
document.onmousemove = mouseMove
</script>

<a href="#" onclick="showmouse();">Visa koordinater</a>
134 ms totalt · 3 externa anrop · v20260731065814-full.1211964f
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)