Salve ragazzi, come potete vedere è il mio primo messaggio qua... Il sito html.it mi è stato molto utile per avvicinarmi a javascript, con il quale ho cominciato a manipolare il dom (è in assoluto il primo script javascript che creo, quindi vi prego di scusarmi se ho fatto errori banali).
Vi spiego il mio problema: devo creare un rettangolo che sia trascinabile su una pagina web.
Ho quindi pensato di caricare l'immagine di un rettangolo con dell'html e poi usare gli eventi onLoad (per aggiungere alcune proprietà, tra cui la posizione, al rettangolo) e gli eventi onMouseDown, onMouseMove e onMouseUp per implementare il drag&drop.
Quindi:
- in onMouseDown controllo se il cursore e sopra il rettangolo e in caso affermativo setto a true una variabile booleana
- in onMouseMove setto la posizione corrente del mouse e se la variabile booleana è vera cambio la posizione del rettangolo
- onMouseUp resetto la variabile booleana
Il problema è che se faccio mousedown sul rettangolo e poi muovo il mouse, il rettangolo si sposta di poco (direi una sola volta) e poi si ferma. Per sbloccare la situazione devo rilasciare il tasto del mouse (l'evento mouseUp non viene "preso") e a quel punto il rettangolo si sposta in modo corretto, però senza che nessun tasto del mouse sia premuto.
Per far terminare il movimento devo fare un click e a quel punto l'evento mouseUp viene sollevato e il drag termina...
Può darsi che non sia proprio il metodo migliore per fare una cosa del genere, però non mi pare neanche sbagliato e non ne sto venendo a capo...
Se avete idee suggerite pure, ve ne sarò grata.
Vi allego il codice, così se volete potete farvi un'idea più chiara:
codice:
<html>
<head>
<title>Prova rettangolo</title>
</head>
<body onLoad="load();">
[img]rettangolo.jpg[/img]
<script type="text/javascript">
var pressed = false;
var offsetX;
var offsetY;
var mozilla = document.getElementById&&!document.all;
function load()
{
var n = document.getElementById('r');
n.setAttribute('height','200');
n.setAttribute('width','400');
n.style.position='absolute';
n.style.left='100';
n.style.top='100';
}
function down()
{
var n = document.getElementById('r');
var leftX = parseInt(n.style.left);
var leftY = parseInt(n.style.top);
var rightX = leftX + 400;
var rightY = leftY + 200;
if (x>leftX && x<rightX && y>leftY && y<rightY)
{
pressed=true;
offsetX = x - leftX;
offsetY = y - leftY;
}
}
function dragdrop()
{
if(pressed)
{
var n = document.getElementById('r');
n.style.left=x-offsetX;
n.style.top=y-offsetY;
}
}
function up()
{
pressed=false;
}
function PosizioneCursore(loc)
{
if (mozilla)
{
x=loc.pageX;
y=loc.pageY;
}
else
{
x=event.clientX;
y=event.clientY;
}
dragdrop();
}
document.onmousemove = PosizioneCursore;
document.onmousedown = down;
document.onmouseup = up;
</script>
</body>
</html>