2012-01-26 13 views
5

Ho una tela con alcune linee disegnate dal movimento del mouse. Voglio che la linea duri solo pochi secondi prima di rimuoverla. Un po 'come roteare un nastro intorno a dove ha una lunghezza impostata. Sto usando lineTo per disegnare le linee nella tela. Ho fatto riferimento a un po 'del codice da qui.Rimozione della tela di comando javascript con linee intersecanti

Il problema

posso cancellare la linea utilizzando clearRect(), ma questo cancella letteralmente tutto e il problema è che se la linea interseca cancella l'area di intersezione troppo. qui è il mio violino clic e trascinare all'interno della scatola in basso a destra:

http://jsfiddle.net/m2K5h/

chiaro rect mi avrebbe dato questo: enter image description here

In sintesi

clearRect solo salviette tutto, vuoi "dinamicamente" tracciare la linea in modo che abbia una vita. E non posso per la vita di me trovare qualcosa per farlo ...

Qualsiasi aiuto sarebbe fantastico !!!!

+0

per la cronaca: non dovresti mai fare qualcosa del genere: 'brush = eval (" new "+ BRUSHES [0] +" (context) ");' eval è in generale cattivo, non c'è quasi nulla che tu non possa fare senza usare eval. l'esempio sopra è equivalente a 'brush = BRUSHES [0] (context)' – zaphod1984

+0

yeah ho fatto riferimento all'origine da qualche parte, dove c'erano molti pennelli diversi. C'è un sacco di pulizia del codice e riscrittura che sto facendo. Eval ha salvato il mio bacon un paio di volte che devo dire .. – Alex

risposta

8

L'area di disegno è una superficie bitmap. Nulla nella tela potrebbe indicare che la linea si è incrociata, a parte i valori dei pixel.

Per poter disassemblare una linea, è necessario memorizzare tutte le coordinate della linea come viene disegnata. Quando è il momento che la linea si disorienta da sola, si avvia un'animazione in cui ogni fotogramma si cancella la tela e ridisegna una parte restringente della linea.

jsfiddle example

Se avete niente altro di notevole complessità, che non si vuole cancellare e ridisegnare rapidamente, che mettere in una seconda tela dietro al primo.

+0

Votare !! bel riferimento, davvero utile, questo è quello che cerco. Sono un enorme odiatore di tele stratificate in generale. Soprattutto perché questo è solo uno strato di un progetto strutturato DOM davvero complesso, quindi ho bisogno di tenere il DOM sovraccarico il più possibile. – Alex

Problemi correlati