Foros del Web » Programando para Internet » Javascript » Frameworks JS »

-3 dudad de medio/alto nivel-

Estas en el tema de -3 dudad de medio/alto nivel- en el foro de Frameworks JS en Foros del Web. Hola!! Tengo 3 dudas algo complicadas que me impiden acabar el programa: 1-El programa dibuja recuadros por toda la pantalla del navegador y quiero limitarlos ...
  #1 (permalink)  
Antiguo 06/10/2009, 10:17
 
Fecha de Ingreso: enero-2009
Mensajes: 20
Antigüedad: 15 años, 3 meses
Puntos: 0
-3 dudad de medio/alto nivel-

Hola!!

Tengo 3 dudas algo complicadas que me impiden acabar el programa:

1-El programa dibuja recuadros por toda la pantalla del navegador y quiero limitarlos al tamaño de la imagen casitas.png de 294x179.

2-Los recuadros solo se dibujan en direccion a los ejes positivos (se expanden a +x y +y) y al mover el cursor a -x o -y se produce un efecto rebote.

3-Parece que no envio correctamente las coordenadas que me da el javascript mediante el formulario post. Que me falla?

Gracias de antemano y a ver quien es el campeón que me soluciona alguno de los puntos jejeje. Un saludo!

Código:
<?php
#include("conexion.php");

if (isset($_POST['guardar']) && $_POST['guardar'] == "true") {
// Hay que guardar los datos recibidos.

$ax = addslashes($_POST['Show0']);
$ay = addslashes($_POST['Show4']);
$bx = addslashes($_POST['Show1']);
$by = addslashes($_POST['Show5']);

$datos_validos = true;

if (strlen($ax) || strlen($ay) || strlen($bx) || strlen($by) <= 0) $datos_validos = false;

if ($datos_validos == true) {
	
	$sql = "INSERT INTO marcado " .
	"(ax, ay, bx, by) " .
	"VALUES (" .
	"$ax, $ay, $bx, $by" .
	")";
	mysql_query($sql);	
	}
}

?>
<html>
<head></head>
<body>
<script> vic=0; </script>


<script language="JavaScript" type="text/javascript">
/*<![CDATA[*/
var zxcObj;
var zxcEvt=0;

function zxcMseDown(event){
if (zxcObj){ return; }
document.Show.Show0.value=(zxcMse(event)[0]);
document.Show.Show4.value=(zxcMse(event)[1]);
zxcObj=zxcStyle('DIV',{position:'absolute',overflow:'hidden',left:zxcMse(event)[0]+'px',top:zxcMse(event)[1]+'px',width:'2px',height:'2px',border:'solid black 1px'});
zxcObj.pos=[zxcMse(event)[0],zxcMse(event)[1]]
document.getElementsByTagName('BODY')[0].appendChild(zxcObj);

}

function zxcStyle(zxcele,zxcstyle,zxctxt){
if (typeof(zxcele)=='string'){ zxcele=document.createElement(zxcele); }
for (key in zxcstyle){ zxcele.style[key]=zxcstyle[key]; }
if (zxctxt){ zxcele.appendChild(document.createTextNode(zxctxt)); }
return zxcele;
}

function zxcMseUp(event){
if (!zxcObj){ return; }
document.Show.Show1.value=(zxcMse(event)[0]);
document.Show.Show5.value=(zxcMse(event)[1]);
zxcObj=false;
}

function zxcDrag(event){
document.Show.Show2.value=(zxcMse(event)[0])+' | '+(zxcMse(event)[1]);
if (!zxcObj){ return; }
var zxcw=Math.abs(zxcMse(event)[0]-zxcObj.pos[0])+1; 
var zxch=Math.abs(zxcMse(event)[1]-zxcObj.pos[1])+1; 
zxcStyle(zxcObj,{width:zxcw+'px',height:zxch+'px'});
}



function zxcMse(event){
if(!event) var event=window.event;
if (document.all){ return [event.clientX+zxcDocS()[0],event.clientY+zxcDocS()[1]]; }
else { return[event.pageX,zxcMseY=event.pageY]; }
}

function zxcDocS(){
var zxcsx,zxcsy;
if (!document.body.scrollTop){ zxcsx=document.documentElement.scrollLeft; zxcsy=document.documentElement.scrollTop; }
else { zxcsx=document.body.scrollLeft; zxcsy=document.body.scrollTop; }
return [zxcsx,zxcsy];
}

function zxcPos(zxc){
zxcObjLeft = zxc.offsetLeft;
zxcObjTop = zxc.offsetTop;
while(zxc.offsetParent!=null){
zxcObjParent=zxc.offsetParent;
zxcObjLeft+=zxcObjParent.offsetLeft;
zxcObjTop+=zxcObjParent.offsetTop;
zxc=zxcObjParent;
}
return [zxcObjLeft,zxcObjTop];
}


function zxcEventAdd(zxco,zxct,zxcf){
if (zxco.addEventListener){ zxco.addEventListener(zxct, function(e){ zxco[zxcf](e);}, false); }
else if (zxco.attachEvent){ zxco.attachEvent('on'+zxct,function(e){ zxco[zxcf](e); }); }
else {
var zxcPrev=zxco['on'+zxct];
if (zxcPrev){ zxco['on'+zxct]=function(e){ zxcPrev(e); zxco[zxcf](e); }; }
else { zxco['on'+zxct]=zxco[zxcf]; }
}
}

function zxcAddEvt(zxcobj,zxcfun,zxcevt){

if (zxcobj[zxcevt+'add']){ return; }
zxcobj['zxcaddEvt'+zxcEvt]=window[zxcfun];
zxcobj[zxcevt+'add']=true;
zxcEventAdd(zxcobj,zxcevt,'zxcaddEvt'+zxcEvt);
zxcEvt++;
zxcObj=document.getElementById('map');
}

zxcAddEvt(document,'zxcDrag','mousemove')
zxcAddEvt(document,'zxcMseDown','mousedown')
zxcAddEvt(document,'zxcMseUp','mouseup')

/*]]>*/

</script>
<form name="pointform" method="post">
<div id="pointer_div" onclick="point_it(event)" style = "background-image:url('casitas.png');width:294px;height:179px;">
</form>
<form name=Show id=Show style="position:absolute; left: 610px; top: 500px;visibility:visible;top:200px;left:10px;"  method="post" action="marcar.php">
	<input type="hidden" name="guardar" value="true">
aX:<input type="text" size=10 name="Show0">
aY:<input type="text" size=10 name="Show4">
bX:<input type="text" size=10 name="Show1">
bY:<input type="text" size=10 name="Show5">
	 <input size=10 name=Show2 >
	<br>
	<br>
	<input type="submit" value="Marcar y modificar">
</form>
	
</body>
</html>
  #2 (permalink)  
Antiguo 09/10/2009, 12:51
Avatar de josec89  
Fecha de Ingreso: octubre-2009
Mensajes: 12
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: -3 dudad de medio/alto nivel-

Cita:
1-El programa dibuja recuadros por toda la pantalla del navegador y quiero limitarlos al tamaño de la imagen casitas.png de 294x179.

2-Los recuadros solo se dibujan en direccion a los ejes positivos (se expanden a +x y +y) y al mover el cursor a -x o -y se produce un efecto rebote.

3-Parece que no envio correctamente las coordenadas que me da el javascript mediante el formulario post. Que me falla?
Buenas, no se si he comprendido todo lo que quieres hacer pero según he entendido: quieres que se dibujen una serie de 'recuadros' según los ejes X, Y positivos (contando a partir de la posición del ratón).. Así pues, cuando mueves el ratón, la sección de pantalla a dibujar cambia, ¿no?

........|________________
........|________________
........|________________
........|________________
.........................................
.........................................

Por tanto, estando el ratón en la esquina inferior izquierad de la figura dibujada (formada por | y _; no por puntos que representan la parte de la pantalla vacía), se dibujan recuadros en la parte de arriba-derecha, que cambian de posición cuando el ratón se mueve, ¿no?. Si no es esto lo que quieres hacer te agradecería que volvieses a explicar ^^ (el resto de post seguramente no te sirva xD)

Suponiendo que he comprendido bien:

1- Para el problema de los recuadros, si la figura es un rectángulo formado por una serie de secciones, yo dibujaría un único DIV con el background de la imagen y hacer que se repitiese tanto para el eje X como el Y. Si este efecto no te parece convincente, puedes hacer X e Y DIVS del tamaño deseado y posicionarlos donde tengan que estar (teniendo en cuenta que los máximos son body.offsetWidth / body.offsetHeight).

2- Te recomiendo capturar el evento onmousemove, y cuando detecte un cambio de la posición del ratón cambiar la posición de la(s) sección(es) a la nueva posición (div.style.left / div.style.top). Para añadir un efecto de 'rebote' tienes que crear tus propias funciones de movimiento de divs...

3- Formulario ? :S

En fin, espero que sirva de ayuda! un saludo
  #3 (permalink)  
Antiguo 13/10/2009, 07:52
 
Fecha de Ingreso: enero-2009
Mensajes: 20
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: -3 dudad de medio/alto nivel-

Primero de todo, gracias por contestar! Ya pensaba que nadie iba a responderme jejeje.

Creo que no he conseguido explicarme muy bien.
A ver, un ejemplo:

En el escritorio de windows podemos hacer recuadros en cualquier sitio apretando el mouse y arrastrando. Los recuadros se forman hacia cualquier dirección y eso es lo que yo quiero lograr con mi script en un navegador. El problema es que solo me dibuja los recuadros hacia derecha abajo.

Por otro lado me hace recuadros por toda la pantalla del navegador como lo hace windows por todo su escritorio pero yo solo quiero que los haga dentro del limite del area de la imagen.

Y por último me gustaria poder guardar las coordenadas usando php que es lo que conozco.

El problema es que no se practicamente nada de javascript, por eso necesito ayuda de expertos en el tema.

Muchísimas gracias y un saludo!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:16.