Flash: animare una tendina.

Di: alispiegate | 26/09/2020 18:13:19
Hola!
rieccomi a caccia di consigli...
dovrei realizzare l'animazione di una tendina, ovvero nulla di più di un rettangolo che al passaggio del mouse su una certa area sensibile si espande e contrae...
scorrendo il mouse verso sinistra la tendina si espande,
scorrendo il mouse verso destra la tendina si restringe...
ho realizzato la tendina come Movie Clip e gli ho associato il nome: tendina
l'area sensibile è anchessa un Movie Clip e il nome associato è: area_tendina
Lo script di seguito dovrebbe realizzare l'animazione ed è associato ad "area_tendina", solo che è scattoso e a volte non rileva il passaggio del mouse...
se qualcuno potrebbe dargli un occhiata e darmi qualche consiglio su come migliorarlo...
...sono bene accette anche idee per creare quasta animazione in modo diverso da quella da me pensata...
ecco lo script:
this.onRollOver = function(){
//trace("ho eseguito un rollover ");
if(_root.menu.aperto == 0)
{
_root.tendina._visible = true;
_root.onMouseMove = function(){
// determino il campo di azione di onMouseMove.
x_min = _root.area_tendina._x;
x_max = x_min + _root.area_tendina._width;
y_min = _root.area_tendina._y;
y_max = y_min + _root.area_tendina._width;
x_mouse = _root._xmouse;
y_mouse = _root._ymouse;
// inverto le coordinate del mouse.
spostamento_mouse = (x_max - x_mouse);
larghezza_tendina = _root.tendina._width;
// mormalizzo la dimenisione della tendina nell'intervallo 30-130 (larghezza minima e massima della tendina).
larghezza_attuale = ((spostamento_mouse * 100)/_root.area_tendina._width) + 30;
larghezza_attuale = Math.ceil(larghezza_attuale); //arrotondo per eccesso la larghezza normalizzata.
if(larghezza_attuale < 30)
larghezza_attuale = 30;
if(larghezza_attuale > 130)
larghezza_attuale = 130;
if((x_mouse > x_min) && (x_mouse < x_max) && (y_mouse > y_min) && (y_mouse < y_max))
{
if(_root.tendina._width = larghezza_attuale)
{
animazione_destra = setInterval( function(){
if(_root.tendina._width < larghezza_attuale)
{
clearInterval(animazione_destra);
delete animazione_destra;
_root.tendina._width += 1;
updateAfterEvent();
}
}
,1);
}
else
{
animazione_sinistra = setInterval( function(){
if(_root.tendina._width > larghezza_attuale)
{
clearInterval(animazione_sinistra);
delete animazione_sinistra;
_root.tendina._width -= 1;
updateAfterEvent();
}
}
,1);
}
}
}
}
}

Risposte



basta che crei l'mc con l'animazione all'interno del quale gli dai uno stop su tutti e sui i key frame, poi sulla root dai:
mioclip.onRollOver=function(){
this.play();
}
mioclip.onRollOut=function(){
this.gotoAndStop(1);
}
con lo script che hai messo tu è inutilmente lungo

Di: Michael Knight | 26/09/2020 18:13:19


Hola!
Ti ringrazio per la tua risposta, però in questo modo perdo la cosa più importante dell'animazione, ovvero fare in modo che la tendina si sposti in modo proporzionale allo spostamento del mouse...
...quando il mouse si sposta la tendina non deve chiudersi o aprirsi del tutto ma deve seguire il mouse... quindi la tendina sarà aperta o chiusa solo quando il mouse sarà alla estremità destra e sinistra dell'area sensibile...
...probabilmente questo dettaglio non l'avevo reso chiaro nel post precendente...
ti ringrazio comunque dell'idea, se ne hai altre...

Di: alispiegate | 26/09/2020 18:13:19