webForumDet fria alternativet

Markera bild m lager samt förminska lagret.

JavaScriptur Javascript

9 svar · 324 visningar · startad av solbulle

Medlem sedan mars 20015 287 inlägg
Frågan#1

Jag försöker mig på att skapa en sida där man kan ladda upp en bild samt sen beskära den mm.

Det jag tänkte att ni skulle fixa åt mig :e är just funktionen med beskärningen, eller rättare sagt markeringen av det område man vill ha ut.
jag tänkte att det skulle fungera som så att man har en bild på sidan samt tar ett genomskinligt lager och på så sätt markerar det område man vill ha ut.
Skulle väldigt gärna även vilja att om man typ kunde förminska det övre lagret genom att dra i nedre högra hörnet.. proportionelt.

Jag hittade ett script som Jojoxx samt doggelito skruvat på och har tagit mig friheten att utgå från det. http://www.webforum.nu/showthread.php?s=&threadid=49475&highlight=flytta+and+lager

Mina problem:

[RED: Fixat]
Jag kan nu inte ens sätta in min bild på sidan, om jag gör det kan
jag inte dra mitt lager på andra ställen än där det just är text i lagret. Hur lösa det?
[/RED: Fixat]

Hur kan jag förminska lagret proportionellt genom att dra i högra nedre hörnet? (Eller motsvarande)

Har jag med mig kod som är överflödig?

Nuvarande kod:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
	<title>Untitled</title>
</head>
<body>

<script language="JavaScript" src="layerlib.js" type="text/JavaScript"></script>
<script language="JavaScript" src="stdiolib.js" type="text/JavaScript"></script>
<script language="JavaScript" type="text/JavaScript">

	function savepos(){

document.form2.x.value=(getLayerX('foo'));
document.form2.y.value=(getLayerY('foo'));

document.form2.xx.value=(getLayerWidth('foo'));
document.form2.yy.value=(getLayerHeight('foo'));

	}
	function glue(layer){
		offsetX=getMouseX()-getLayerX(layer);	
		offsetY=getMouseY()-getLayerY(layer);	
		currentLayer=layer;
		setOnMousemove("moveit();"); 
	}
	function rubber(){
		setOnMousemove(""); 
	}
	function moveit(){
		moveLayerAbs(currentLayer,Math.min(Math.max(getMouseX()-offsetX,0),getClientWidth()-getLayerWidth('foo')),Math.min(Math.max(getMouseY()-offsetY,0),getClientHeight()-getLayerHeight('foo')))
	}
	function getLayerWidth(Id){
		if (document.all){
			return parseInt(document.all[Id].style.width);
		} else if (document.layers){
			return parseInt(document.layers[Id].width);
		} else if (document.getElementById){
			return parseInt(document.getElementById(Id).style.width);
		}
	}
	function getLayerHeight(Id){
		if (document.all){
			return parseInt(document.all[Id].style.height);
		} else if (document.layers){
			return parseInt(document.layers[Id].height);
		} else if (document.getElementById){
			return parseInt(document.getElementById(Id).style.height);
		}
	}

</script>
<div
	id="foo"
	style="position:absolute;top:150px;left:150px;width:300px;height:300px;border:1px solid black; padding:5px;"
	onMousedown="glue('foo');"
	onMouseup="rubber();">
	Move me!
</div>

<form name="form2">
X<input type="text" name="x">
Y<input type="text" name="y">
<br>
Bredd<input type="text" name="xx">
Höjd<input type="text" name="yy">
<input type="button" value="Sätt värden" onClick="savepos();">
</form>

</body>
</html>

Åsså har jag en länk till sidan:

Utan bild:
http://www.solbulle.com/wf/lager/index.html
Med bild:
http://www.solbulle.com/wf/lager/bild.html

Medlem sedan mars 20015 287 inlägg
#2

Attans, har alla tagit julledigt?

Löste dragandet av lagret genom att sätta in en transparent bild. -Verkar fungera. (Kanske ska ha en halvt genomskinlig... jaja, det är överkurs i nuläget.)

Medlem sedan juli 2000836 inlägg
#3

Kolla på detta lilla exempel för beskärningen:

<script>
document.onmousemove = cropIt
document.onmousedown = lockIt
document.onmouseup = unLockIt

xlock = 0;
inPos = 0;

function cropIt(e){

element = document.getElementById("foo")
x = (document.all)? event.x : e.pageX ;
y = (document.all)? event.y : e.pageY;

status=inPos

	if(	(element.offsetWidth - (x - parseInt(element.style.left))) < 0 &&
		(element.offsetWidth - (x - parseInt(element.style.left))) >-9 &&
		(element.offsetHeight - (y - parseInt(element.style.top))) < 0 &&
		(element.offsetHeight - (y - parseInt(element.style.top))) >-9 ){
			document.body.style.cursor="se-resize";
			inPos = 1;
	}
	else{
		document.body.style.cursor="default";
		inPos = 0;
	}

	if(xlock==1){
		element.style.width = x - parseInt(element.style.left)
		element.style.height = y - parseInt(element.style.top)
	}

	}

	function lockIt(){
		if(inPos == 1){
			xlock = 1
		}
	}
	function unLockIt(){
		xlock = 0
	}
</script>

Drag i bilden precis nedanför det nedre högra hörnet...

<div id="foo" style="position:absolute;top:50px; left:50px; width:120px; height:120px; overflow:hidden; border:1px solid red;">
<img src="bild.jpg" galleryimg="no">
</div>
Medlem sedan mars 20015 287 inlägg
#4

Kaxigt!

Ska se om jag kan klura ut hur det fungerar och implentera det "hos mig".

Tack.

Medlem sedan mars 20015 287 inlägg
#5

Innan jag såg din variant har jag slagit mig in på en annan variant baserad på att "clippa" ett lager.
Styrningen av detta har jag nu löst med länkar, inte alls så kul som ditt förslag.

Är det nu någon som kanske kan ge mig någon hjäl på vägen att implentera scriptet ovanfär i min kod alt. kanske har ideer om hur hela min kod bör föändras.

Tycker onekligen att koden bara växer o växer kanske mycket i onödan?

(Iofs kommer flera av formulärsfälten med dess uträkningar vara överflödiga i slutändan.)

Nuvarande kod:

<script language="JavaScript" src="dynlayer.js"></script>
<script language="JavaScript" src="mouseevents.js"></script>
<script language="JavaScript" src="drag.js"></script>

<script language="JavaScript" type="text/JavaScript">

function init() {
	// initialize DynLayers
	foolager = new DynLayer("foo")

	// for IE 5.0 must manually set the clip values again
	if (is.ie5) foolager.clipInit(0,600,600,0)
	
	// for other browsers it's not necessary because the layer in this example
	// is clipped to defaults so I don't have to pass clip values
	else foolager.clipInit()

	// add the draggable layers to the drag object
	drag.add(foolager)
	
	drag.onDragMove = dragMove

	initMouseEvents()
}

function dragMove(x,y) {
	document.myform.layerx.value = this.obj.x
	document.myform.layery.value = this.obj.y

	formula();
}

function formula() {

	document.myform.clipx.value = foolager.clipValues('t')
	document.myform.clipy.value = foolager.clipValues('r')
	document.myform.clipxx.value = foolager.clipValues('b')
	document.myform.clipyy.value = foolager.clipValues('l')
	document.myform.bredden.value = foolager.clipValues('b') - foolager.clipValues('t')
	document.myform.hojden.value = foolager.clipValues('r') - foolager.clipValues('l')
	document.myform.x1.value = parseInt(document.myform.layerx.value) - 200 + parseInt(foolager.clipValues('l'))
	document.myform.y1.value = parseInt(document.myform.layery.value) + parseInt(foolager.clipValues('t'))
	document.myform.x2.value = parseInt(document.myform.layerx.value) - 200 + parseInt(foolager.clipValues('r'))
	document.myform.y2.value = parseInt(document.myform.layery.value) + parseInt(foolager.clipValues('b'))
	document.myform.imgname.value = "front.jpg"
}

function timerrace(a,b,c,d) {
X=setInterval("foolager.clipBy("+a+","+b+","+c+","+d+");formula()",100)
}
</script>

<body bgcolor="#ffffff" onLoad="init()">

<a href="javascript:formula()" onmousedown="timerrace(0,-10,-10,0)" onmouseup="clearInterval(X)">-Höger</a>

<div id="foo" style="position:absolute;top:0px;left:200px;width:1000px;height:1000px;clip:rect(0px 600px 600px 0px); z-index: 2 ;">

<img src="transp.gif" name="transa" height="1000" widht="1000"  style="filter:alpha(opacity=20);"></div>

<div id="bilden" style="position:absolute;top:0px;left:200px;width:500px;height:500px;"><img src="front.jpg"></div>

Länk till testsida: http://www.solbulle.com/wf/lager/layout.html

Medlem sedan mars 20015 287 inlägg
#6

.js-filerna finns här:
http://www.solbulle.com/wf/lager/dynlayer.js
http://www.solbulle.com/wf/lager/mouseevents.js
http://www.solbulle.com/wf/lager/drag.js

Det är väl de som ställer till det när jag försöker kombinera alltihop.

Medlem sedan mars 20015 287 inlägg
#7

Å annars har vi en hopkock av Johnsens samt Jojoxx script, men det är något som krockar i dom!?!

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
	<title>Untitled</title>
</head>

<body>

<script language="JavaScript" src="layerlib.js" type="text/JavaScript"></script>

<script language="JavaScript" src="stdiolib.js" type="text/JavaScript"></script>

<script language="JavaScript" type="text/JavaScript">
	function glue(layer){
		offsetX=getMouseX()-getLayerX(layer);	
		offsetY=getMouseY()-getLayerY(layer);	
		currentLayer=layer;
		setOnMousemove("moveit();"); 
	}
	function rubber(){
		setOnMousemove(""); 
	}
	function moveit(){
		moveLayerAbs(currentLayer,getMouseX()-offsetX,getMouseY()-offsetY)
	}
</script>

<script>
document.onmousemove = cropIt
document.onmousedown = lockIt
document.onmouseup = unLockIt

xlock = 0;
inPos = 0;

function cropIt(e){

element = document.getElementById("foo")
x = (document.all)? event.x : e.pageX ;
y = (document.all)? event.y : e.pageY;

status=inPos

	if(	(element.offsetWidth - (x - parseInt(element.style.left))) < 0 &&
		(element.offsetWidth - (x - parseInt(element.style.left))) >-9 &&
		(element.offsetHeight - (y - parseInt(element.style.top))) < 0 &&
		(element.offsetHeight - (y - parseInt(element.style.top))) >-9 ){
			document.body.style.cursor="se-resize";
			inPos = 1;

//document.form2.x.value = element.style.width
	}
	else{
		document.body.style.cursor="default";
		inPos = 0;
	}

	if(xlock==1){
		element.style.width = x - parseInt(element.style.left)
		element.style.height = y - parseInt(element.style.top)

	}

	}

	function lockIt(){
		if(inPos == 1){
			xlock = 1
		}
	}
	function unLockIt(){
		xlock = 0
	}
</script>

<div
	id="foo"
	style="position:absolute;top:50px;left:50px;width:300px;height:300px;background:yellow; filter:alpha(opacity=20);z-index: 2 ;"
	onMousedown="glue('foo');"
	onMouseup="rubber();">

</div>

<div id="bilden" style="position:absolute;top:0px;left:200px;width:500px;height:500px;z-index: 1; "><img src="front.jpg"></div>

</body>
</html>
Medlem sedan mars 20015 287 inlägg
#8

Nej ni gubbar.

Jag får inte till det. Denna kod jag har är ju helt ok med JoHnsens script att kunna förstora/förminska lagret. Men mitt önskemål är då alltså att man även skall kunna förflytta det översta lagret över det undre. (Eg. ej utanför.) Samt att eg. skall det översta lagret endast kunna förstoras/förminskas proportionellt (mao alltid en kvadrat.)

Någon med ideer?

<script>
document.onmousemove = cropIt
document.onmousedown = lockIt
document.onmouseup = unLockIt

xlock = 0;
inPos = 0;

function cropIt(e){

element = document.getElementById("foo")
x = (document.all)? event.x : e.pageX ;
y = (document.all)? event.y : e.pageY;

status=inPos

	if(	(element.offsetWidth - (x - parseInt(element.style.left))) < 0 &&
		(element.offsetWidth - (x - parseInt(element.style.left))) >-9 &&
		(element.offsetHeight - (y - parseInt(element.style.top))) < 0 &&
		(element.offsetHeight - (y - parseInt(element.style.top))) >-9 ){
			document.body.style.cursor="se-resize";
			inPos = 1;
	}
	else{
		document.body.style.cursor="default";
		inPos = 0;
	}

	if(xlock==1){
		element.style.width = x - parseInt(element.style.left)
		element.style.height = y - parseInt(element.style.top)
	}

	}

	function lockIt(){
		if(inPos == 1){
			xlock = 1
		}
	}
	function unLockIt(){
		xlock = 0
	}
</script>

Drag i bilden precis nedanför det nedre högra hörnet...

<div id="foo" style="position:absolute;top:50px; left:50px; width:120px; height:120px; overflow:hidden; border:1px solid red;z-index: 3 ;">
<img src="transp.gif" galleryimg="no"   height="1000" widht="1000"  style="filter:alpha(opacity=20);">
</div>

<div id="bilden" style="position:absolute;top:50px;left:50px;overflow:hidden; z-index: 2 ;">
<img src="front.jpg">
</div>

Länk: https://www.solbulle.com/wf/lager/drag.html

Medlem sedan dec. 20025 483 inlägg
#9

Någon med ideer?

Självklart!

.
.
.
if(xlock==1){
     [B]if((x - parseInt(element.style.left)) < 808 && (y-parseInt(element.style.top)) < 650){
          element.style.width = x - parseInt(element.style.left)
          element.style.height = y - parseInt(element.style.top)
     }[/B]
}
.
.
.

:)

Medlem sedan mars 20015 287 inlägg
#10

Peter S: Kalas!

Ett steg i rätt riktning. :)

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