webForumDet fria alternativet

Flyttbar div med textarea...

11 svar · 662 visningar · startad av learn

learnMedlem sedan jan. 20051 130 inlägg
#1

Jag kör detta javascript för att kunna flytta på en div. Det funkar bra så till vida jag inte har någon textarea i diven. När jag försöker placera markören i textarean för att skriva så händer det inget, istället kan jag flytta diven genom att klicka och dra i textarean.

Hur kan jag lösa detta?

Tack! :)

Peter SMedlem sedan dec. 20025 483 inlägg
#2

Vilken webbläsare gäller det? Med IE7 och Op9 fungerar det.

learnMedlem sedan jan. 20051 130 inlägg
#3

Aha, har inte testat i dem. Jag kör FF 2.0

voigtann1Medlem sedan juni 20019 519 inlägg
#4

har du något exempel med textarea? som jag har testat på den sidan du länkade fungera allt kalas..

learnMedlem sedan jan. 20051 130 inlägg
#5

Här är ett exempel...


<script type="text/javascript">

var Drag = {
	
	obj : null,

	init : function(o, oRoot, minX, maxX, minY, maxY, bSwapHorzRef, bSwapVertRef, fXMapper, fYMapper)
	{
		o.onmousedown	= Drag.start;

		o.hmode			= bSwapHorzRef ? false : true ;
		o.vmode			= bSwapVertRef ? false : true ;

		o.root = oRoot && oRoot != null ? oRoot : o ;

		if (o.hmode  && isNaN(parseInt(o.root.style.left  ))) o.root.style.left   = "0px";
		if (o.vmode  && isNaN(parseInt(o.root.style.top   ))) o.root.style.top    = "0px";
		if (!o.hmode && isNaN(parseInt(o.root.style.right ))) o.root.style.right  = "0px";
		if (!o.vmode && isNaN(parseInt(o.root.style.bottom))) o.root.style.bottom = "0px";

		o.minX	= typeof minX != 'undefined' ? minX : null;
		o.minY	= typeof minY != 'undefined' ? minY : null;
		o.maxX	= typeof maxX != 'undefined' ? maxX : null;
		o.maxY	= typeof maxY != 'undefined' ? maxY : null;

		o.xMapper = fXMapper ? fXMapper : null;
		o.yMapper = fYMapper ? fYMapper : null;

		o.root.onDragStart	= new Function();
		o.root.onDragEnd	= new Function();
		o.root.onDrag		= new Function();
	},

	start : function(e)
	{
		var o = Drag.obj = this;
		e = Drag.fixE(e);
		var y = parseInt(o.vmode ? o.root.style.top  : o.root.style.bottom);
		var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right );
		o.root.onDragStart(x, y);

		o.lastMouseX	= e.clientX;
		o.lastMouseY	= e.clientY;

		if (o.hmode) {
			if (o.minX != null)	o.minMouseX	= e.clientX - x + o.minX;
			if (o.maxX != null)	o.maxMouseX	= o.minMouseX + o.maxX - o.minX;
		} else {
			if (o.minX != null) o.maxMouseX = -o.minX + e.clientX + x;
			if (o.maxX != null) o.minMouseX = -o.maxX + e.clientX + x;
		}

		if (o.vmode) {
			if (o.minY != null)	o.minMouseY	= e.clientY - y + o.minY;
			if (o.maxY != null)	o.maxMouseY	= o.minMouseY + o.maxY - o.minY;
		} else {
			if (o.minY != null) o.maxMouseY = -o.minY + e.clientY + y;
			if (o.maxY != null) o.minMouseY = -o.maxY + e.clientY + y;
		}

		document.onmousemove	= Drag.drag;
		document.onmouseup		= Drag.end;

		return false;
	},

	
		
	drag : function(e)
	{

		e = Drag.fixE(e);
		var o = Drag.obj;

		var ey	= e.clientY;
		var ex	= e.clientX;

		var y = parseInt(o.vmode ? o.root.style.top  : o.root.style.bottom);
		var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right );
		var nx, ny;

		if (o.minX != null) ex = o.hmode ? Math.max(ex, o.minMouseX) : Math.min(ex, o.maxMouseX);
		if (o.maxX != null) ex = o.hmode ? Math.min(ex, o.maxMouseX) : Math.max(ex, o.minMouseX);
		if (o.minY != null) ey = o.vmode ? Math.max(ey, o.minMouseY) : Math.min(ey, o.maxMouseY);
		if (o.maxY != null) ey = o.vmode ? Math.min(ey, o.maxMouseY) : Math.max(ey, o.minMouseY);

		nx = x + ((ex - o.lastMouseX) * (o.hmode ? 1 : -1));
		ny = y + ((ey - o.lastMouseY) * (o.vmode ? 1 : -1));

		if (o.xMapper)		nx = o.xMapper(y)
		else if (o.yMapper)	ny = o.yMapper(x)

		Drag.obj.root.style[o.hmode ? "left" : "right"] = nx + "px";
		Drag.obj.root.style[o.vmode ? "top" : "bottom"] = ny + "px";
		Drag.obj.lastMouseX	= ex;
		Drag.obj.lastMouseY	= ey;

		Drag.obj.root.onDrag(nx, ny);
		return false;

	},

	end : function()
	{
		document.onmousemove = null;
		document.onmouseup   = null;
		Drag.obj.root.onDragEnd(	parseInt(Drag.obj.root.style[Drag.obj.hmode ? "left" : "right"]), 
									parseInt(Drag.obj.root.style[Drag.obj.vmode ? "top" : "bottom"]));
		Drag.obj = null;
	},

	fixE : function(e)
	{

		if (typeof e == 'undefined') e = window.event;
		if (typeof e.layerX == 'undefined') e.layerX = e.offsetX;
		if (typeof e.layerY == 'undefined') e.layerY = e.offsetY;
		return e;
	}
	
};

</script>

<style type="text/css">
	#root {
		position:absolute;
		height:300px;
		width:300px;
		background-color:#F4F4F4;
		border:1px solid #333;
		}

	#handle {
		margin:2px;
		padding:2px;
		width: 98%;
		color:white;
		background-color: navy;
		font-weight: bold;
		}
</style>

<div id="root" style="left:50px; top:100px;">
	<textarea style="width:200px; height:100px;"></textarea>
</div>

<script language="javascript">
	var theRoot   = document.getElementById("root");
	Drag.init(theRoot);
</script>
voigtann1Medlem sedan juni 20019 519 inlägg
#6

fungera på min FF2...

red.

*ops* nope det gjorde den inte :)

Kollar...

voigtann1Medlem sedan juni 20019 519 inlägg
#7

Fungera om jag högerklickar 1 ggr... känns som något med position eller något?

Peter SMedlem sedan dec. 20025 483 inlägg
#8

Uppstår samma problem om du plockar bort all JS? Om så är fallet är problemet av HTML-/CSS-karaktär och bör flyttas till grannforumet. Sannolikheten är högre att mysteriet avhjälps där :)

learnMedlem sedan jan. 20051 130 inlägg
#9

Problemet försvinner när jag plockar bort all JS.

Det fungerar som sagt när man högerklickat en gång...

Hur ska jag göra för att få FF att bete sig som t.ex. IE i detta fall??

learnMedlem sedan jan. 20051 130 inlägg
#10

Nä jag lyckas verkligen inte fixa detta..! Riktigt jobbig FF-bugg!

Någon som har någon aning om hur jag kan kringgå buggen??

learnMedlem sedan jan. 20051 130 inlägg
#11

Hmmm, ingen som kan hjälpa mig denna oerhört jobbiga bugg??!

please

Peter SMedlem sedan dec. 20025 483 inlägg
#12

Jag skulle gärna hjälpa till men FF och jag har tydligen någonting otalt med varandra - FF äter allt minne själv utan att dela med sig till de andra processerna :(

127 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)