Come faccio a rendere fluido il trascinamento del cursore?

Utente HTML.it
chiede

Come faccio a rendere fluido il trascinamento del cursore?

Redazione HTML.it
risponde

Come retaggio del Flash4, una delle tecniche più usate per creare un puntatore del mouse personalizzato, era quello di associare al movieclip ontenente la forma da trascinare, il seguente script:

onClipEvent(load){
 this.startDragtrue);
  Mouse.hide();
        }

Con questo script, si inizializzava il trascinamento del movieclip stesso (this.startDrag) centrandolo sul puntatore del mouse (true), e si nascondeva il puntatore originale (Mouse.hide()).

Questo script, è fortemente influenzato dal frame rate, e associare lo script ad un enterFrame, decisamente non cambia le cose. L’unico modo per rendere il trascinamento alquanto fluido, è alzare il frame rate. Questo è l’effetto che si ottiene con 12 FPS (cliccando sulla scritta in alto a destra, si può visualizzare il puntatore orignale, confronando le distanze nel trascinamento.

<object classid=”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″
codebase=”http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0″ width=”400″ height=”100″>
<param name=movie value=”http://html.it/faq/files/tecniche_varie/cursore1.swf”>
<param name=quality value=high>
<embed src=”http://html.it/faq/files/tecniche_varie/cursore1.swf” quality=high
pluginspage=”http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash” type=”application/x-shockwave-flash” width=”400″ height=”100″>
</embed>
</object>

Modificando lo script in questo modo:

onClipEvent(load){
   Mouse.hide();
     }
onClipEvent(mouseMove){
   _x = _root._xmouse;
   _y = _root._ymouse;
   updateAfterEvent ();
       }

otterremo uno script che stabilisce la posizione del mouse, e su questa imposta quella del cursore. L’updateAfterEvent, serve a forzare un refrash del player alla fine di ogni “ciclo”. La differenza tra i due script è evidentissima, anche considerando che il secondo script è totalmente indipendente dal frame rate.

<object classid=”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″
codebase=”http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0″ width=”400″ height=”100″>
<param name=movie value=”http://html.it/faq/files/tecniche_varie/cursore2.swf”>
<param name=quality value=high>
<embed src=”http://html.it/faq/files/tecniche_varie/cursore2.swf” quality=high
pluginspage=”http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash” type=”application/x-shockwave-flash” width=”400″ height=”100″>
</embed>
</object>