2013-05-23 20 views
5

Sto cercando un modo per ottenere solo un bagliore o un'ombra interiore su un percorso di Raffaello. Sfortunatamente, puoi solo eseguire gradienti radiali su un'ellisse o un cerchio.Raphael bagliore interno?

Un'idea potrebbe essere quella di creare una serie di percorsi che sono leggermente più piccoli e adattarsi all'interno del percorso originale e quindi dare loro diversi colori di tratto, ma non ho idea di come mi avvicinerei a questo. Qualche funzione che prende il percorso e sottrae o aggiunge valori ai numeri a seconda di dove sono ... Comunque, se qualcuno ha qualche idea, o forse un'altra libreria javascript che fa questo, sarebbe fantastico.

+2

Si dovrebbe accettare la risposta, penso che sia una grande soluzione. – Gago

+0

@Brian Non è sorprendente in alcun modo, perché il bagliore continuerà o fuori dal percorso originale o si sarà dissipato (essere più trasparente) quando raggiunge il percorso originale. Ma ok, accetterò. – dezman

+0

@Watson, se la luce continua all'esterno, ridimensiona la scala o modifica l'offset/offsety/opacity della funzione glow. Mi stai dicendo che se hai 2 forme identiche una più piccola e una più grande, non riesci a posizionarti più piccolo all'interno del più grande perfettamente? – Brian

risposta

3

Ok ecco come si può raggiungere questo obiettivo. È piuttosto semplice, penso. So che è difficile creare manualmente un percorso shadow dal tuo originale. Ma c'è un trucco chiamato funzione scale(). Passi per come è possibile ottenere un'ombra interna o l'effetto bagliore interno:

  1. Crea il tuo percorso
  2. Clone in un altro percorso
  3. Impostare la scala() del percorso clonato per essere 0,9 * originale
  4. Poi nascondere il percorso clonato, ma applicare la funzione bagliore() su di esso

il codice:

var paper = Raphael("notepad", 500, 500); 

var path = paper.path("M 50 200 L 120 100 200 190 80 250z"); 
var shadow = path.clone().scale(0.9).hide(); 


shadow.glow(); 
path.attr({stroke: "darkred"}); 

Guarda lo DEMO, questo non è perfetto ma con piccoli cambiamenti, puoi ottenere quello che vuoi.

anche come nota a margine: funzione
glow() ha attributi come offsetx, offsety, opacity ... Cambiando gli attributi vi darà la vostra preferita ombra/luce.

codice aggiornatohttp://jsfiddle.net/jUTFm/41/

+0

Grazie! Pensi che sarebbe possibile utilizzare il primo percorso come un riquadro di delimitazione, in modo che il bagliore dell'ombra non si estendesse al di fuori del percorso originale? – dezman

+0

Sì, questo è ciò che intendevo dicendo "Cambiare quegli attributi ti darà l'ombra/bagliore preferito" – Brian

+0

Gioca anche con la funzione scale(), aggiusta in base al tuo percorso – Brian

0

Look here. Potresti provare ad animare la larghezza del percorso e ad oscurare gradualmente il colore per dare un po 'di effetto luminoso.

check-out la parte inferiore

brain = paper.add(brain); 

    brain.attr('stroke', '#ff0'); 

    brain.transform('s 0.5, 0.5 0 0'); 

    glow = brain.glow({ 
    color: '#ff0', 
    width: 5 
    }); 

    anim = Raphael.animation({ 
    "stroke-width": 15, 
    opacity: 1 
    }, 500); 


    anim = anim.repeat(Infinity); 
    glow.animate(anim); 
+1

Ma la cosa è, voglio solo il bagliore all'interno del percorso, l'esterno dovrebbe rimanere inalterato. Inoltre, non voglio scherzare con il tratto, almeno non del percorso originale. – dezman

+0

è difficile da consigliare senza vedere alcuna immagine, cosa intendi per un interno del percorso, stai rifocalizzando l'area che non è stata modificata dalla tua forma, se così fosse, potresti avere uno sfondo di rettangolo e cercare di illuminarlo , il tuo percorso dovrebbe mascherare le regioni che sono sotto e l'area vuota potrebbe fare il trucco ?? – varun

+0

altro consiglio potrebbe essere quello di usare il plugin drop shadow, ma aggiungi un colore vedi qui https://github.com/dahoo/raphael.dropshadow.js – varun