DIV soll Mauszeiger folgen.

wusa

wusa

Aktives Mitglied
Thread Starter
Dabei seit
24.08.2006
Beiträge
536
Reaktionspunkte
18
Moin Zusammen,

ich habe ien JS Problem.
Ich versuche gerade mittels JS ein <div> zu realisieren welches auf dery-Achse immer meinem Mauszeiger folgt.

Nun habe ich nach längerem probieren ein Script entdeckt welches mir auch verlässlich immer die xy-Koordinaten des Mauszeigers liefert.

Dazu habe ich eine Funktion gebastelt die das <div> dann verschieben soll.

Code:
function moveMenu(yPos) {

  var m = document.getElementById("menu");
  var y = yPos;
  
  m.style.position = "absolute";
  m.style.top = y;
    
}

Komischerweise funzt das ganze dann im ie7 im FF bewegt sich das div aber keinen Pixel.

Jemand einen Tipp oder evtl auch anregungen wie man das gnaze sonst noch realisieren könnte?

gruß|wusa
 
Hab ich schon mal erwähnt dass jQuery einfach nur geil ist? :D
Code:
$(document).ready(function(){
   $().mousemove(function(e){
      $('#menu').css("top",e.pageY+"px");
   }); 
});

Hier das komplette Beispiel:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      <title>...</title>
      <script type="text/javascript">
         /* <![CDATA[ */ 
         document.write(unescape("%3Cscript src='" + (("https:" == document.location.protocol) ? "https://" : "http://") + "www.google.com/jsapi' type='text/javascript'%3E%3C/script%3E"));
         /* ]]> */
      </script>
      <script type="text/javascript">
         /* <![CDATA[ */
         google.load("jquery", "1.2.6");
         /* ]]> */
      </script>
      <script type="text/javascript">
         /* <![CDATA[ */
         $(document).ready(function(){
            $().mousemove(function(e){
               $('#menu').css("top",e.pageY+"px");
            }); 
         });
         /* ]]> */
      </script>
      <style type="text/css">
         #menu {
            position:absolute;
            left:50px;
         }
      </style>
   </head>
   <body>
      <div id="menu">foo</div>
   </body>
</html>
 
  • Gefällt mir
Reaktionen: wusa
Okay?!?

Vielen Dank dir erstmal...funzt ja auch schön das ganze...allerdings versteh ich nicht wie...jQuery sagt mir gar nix und auch den Source kann ich nich nachvollziehen...

aber ich werde dann ma googlen ;)

gruß|wusa
 
jQuery ist ein JavaScript-Framework (wie MooTools, Prototype, DoJo...) dass Dir eine Menge Arbeit abnehmen kann. Ganz nach dem Motto "Write Less, Do More".
Am Anfang ist's etwas schwer zu verstehen aber wenn man sich mal ein paar Beispiele angeschaut hat wird es super easy.
Infos dazu findest Du auf http://jquery.com/ Dort in der Tutorials-Section kannste Dich mal durchklicken.
 
Ich habe hier mal etwas ähnliches.

Mein Script war ein Test und hatte zum Ziel, Divs (die ich Flowboxen nannte) innerhalb einer Elterndiv (die ich PrisonBox nannte) per Maus verschiebbar zu machen.

Hab es sogar extra schnell noch kommentiert :p

HTML:
<html>
	<head>
		<style>
			#flowbox1, #flowbox2 {
				width:		100px;
				height:		100px;
				border:		2px solid black;
			}
			#prisonbox {
				width:		800px;
				height:		600px;
				border:		3px solid black;	
			}
			#flowbox1 {
				position: absolute;
				top:  50px;
				left: 20px;
				background-color: red;
			}
			#flowbox2 {
				position: absolute;
				top:  100px;
				left: 100px;
				background-color: yellow;
			}
		</style>
		<script type="text/javascript">
			
			//Fremde Funktionen
			
			function mouse_pos(evt)
			{
				// diese Funktion habe ich im Internet gefunden. Da es ein klein wenig kompliziert ist, die
				// Mausposition Browserunabhängig zu bestimmen, habe ich das dieser Funktion hier überlassen!
				
			    if(!evt) evt = window.event;
			    var pos = new Object();
			    pos.left = evt.clientX;
			    pos.top = evt.clientY;
			    var b = (window.document.compatMode && window.document.compatMode == "CSS1Compat") ? 
			   window.document.documentElement : window.document.body || null;
			    if (b)
			    {
			        pos.scrollLeft= pos.left + b.scrollLeft;
			        pos.scrollTop = pos.top + b.scrollTop;
			    }
			    else if(document.layers)
			    {
			        // Netscape 4.
			        pos.scrollLeft = evt.pageX;
			        pos.scrollTop = evt.pageY;
			        pos.left = evt.pageX - window.pageXOffset;
			        pos.top = evt.pageY - window.pageYOffset;
			    }
			    return pos;
			}
			
			// globale Variabeln
			
			var on = false;
			var flowID = 0;
			
			
			// Eigene Funktionen
			
			function flow(id) {
				// Diese Funktion kümmert sich darum, dass die Bewegungsfunktion ausgeführt wird, solange die Maus gedrückt ist.
				
				// die flowID gibt an, welche Box gedrückt wurde und ist später in der Bewegungs-Funktion wichtig!
				flowID = id;
				
				if(on)
    			{
    			     if(window.document.releaseEvents)  window.document.releaseEvents( Event.MOUSMOVE);
    			     window.document.onmousemove = null;
    			}else
    			{
    			     if(window.document.captureEvents) window.document.captureEvents(Event.MOUSEMOVE);
    			     window.document.onmousemove = showMousePos;
    			}
    			on = !on;
			}
			
			function showMousePos(e)
			{
				// Diese Funktion sorgt für die Positionierung der FlowBox, für deren einschränkung in die Prisonbox und
				// soll für die Positionierung des Mauszeigers sorgen. Letzteres funktioniert (noch) nicht, verursacht aber auch keine Fehler,
				// sodass der Rest einwandfrei funktioniert.
			    
			    var p = mouse_pos(e);
			    
			    // Die Gefängnisbox, innerhalb derer die Bewegung möglich sein soll
			    var prison = document.getElementById("prisonbox");
			    
			    // Diese Flowbox soll bewegt werden
			    var flowbox = document.getElementById(flowID);
			    
			    // Die Position soll in einem Statusfeld zurückgegeben werden, zum debuggen
			    var status = document.getElementById("state");
			    
			    // Wenn jemand auf eine FlowBox klickt, springt die Maus automatisch in die Mitte der Box.
			    // um dies zu ändern, einfach neue Werte setzen. Zum deaktivieren, einfach die Werte auf 0 setzen
			    var mousesetWidth = flowbox.offsetWidth/2;
			    var mousesetHeight = flowbox.offsetHeight/2;
			    
			    // Der Rand, der zwischen FlowBox und Prisonbox unter jedem Umstand bleiben soll!
			    var offset = 5;
			    
			    // Wenn die Mausposition das Gefängnis nach oben verlässt, setze die Mausposition auf maximale Höhe innerhalb des Gefängnisses!
			    if (p.top < prison.offsetTop+mousesetHeight+offset)
			    	p.top = prison.offsetTop+mousesetHeight+offset;
			    
			    // Wenn die Mausposition das Gefängnis nach unten verlässt, setze die Mausposition auf mindeste Höhe innerhalb des Gefängnisses!
			    if (p.top > prison.offsetHeight+prison.offsetTop-flowbox.offsetHeight+mousesetHeight-offset)
			    	p.top = prison.offsetHeight+prison.offsetTop-flowbox.offsetHeight+mousesetHeight-offset;
			    
			    // Wenn die Mausposition das Gefängnis nach links verlässt, setze die Mausposition auf minimale Weite innerhalb des Gefängnisses!
			    if (p.left < prison.offsetLeft+mousesetWidth+offset)
			    	p.left = prison.offsetLeft+mousesetWidth+offset;
			    
			    // Wenn die Mausposition das Gefängnis nach rechts verlässt, setze die Mausposition auf maximale Weite innerhalb des Gefängnisses!
			    if (p.left > prison.offsetWidth+prison.offsetLeft-flowbox.offsetWidth+mousesetWidth-offset)
			    	p.left = prison.offsetWidth+prison.offsetLeft-flowbox.offsetWidth+mousesetWidth-offset;
			    	
			    // Dokumentiere die Soll-Koordinaten der Maus 
			    document.getElementById("top").value = p.top;
			    document.getElementById("left").value = p.left;
			    
			    // Koordiniere die Flowbox mit den sollkoordinaten der Maus.
			    document.getElementById(flowID).style.top = p.top-mousesetHeight;
			    document.getElementById(flowID).style.left = p.left-mousesetWidth;
			}
		</script>
	</head>
	
	<body>
		<input id="top" size="5" type="text"><input id="left"><input id="state">
		<div id="prisonbox">
			<div id="flowbox1" onmousedown="flow('flowbox1')" onmouseup="flow('flowbox1')">&nbsp;</div>
			<div id="flowbox2" onmousedown="flow('flowbox2')" onmouseup="flow('flowbox2')">&nbsp;</div>
		</div>
	</body>
</html>
 
  • Gefällt mir
Reaktionen: wusa
Zurück
Oben Unten