webForumDet fria alternativet

Flytta lager efter pekare

JavaScript

13 svar · 472 visningar · startad av Riri

Medlem sedan dec. 2000182 inlägg
Frågan#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

Medlem 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.

Medlem sedan jan. 2001219 inlägg
#3

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

Medlem 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>
Medlem 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;
Medlem sedan juni 20004 308 inlägg
#6

Funkar kanon för mig i Firefox 0.8

Medlem 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?

Medlem 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>
Medlem 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?

Medlem 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.

Medlem 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.

Medlem sedan juni 20004 308 inlägg
#12

Nej, det måste ske via eventet mousemove

Medlem 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å?

Medlem 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>
252 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)