Dire che voglio creare effetti di hover regolari per un menu di navigazione, ma invece di CSS uso le transizioni D3 per "ammorbidire" l'effetto. Funziona perfettamente con mouseover
e mouseout
per il metodo .on
. Il problema, tuttavia, è che la transizione si blocca se il mouse lascia il collegamento sospeso prima che la transizione sia completata. Come si evita quell'effetto collaterale?D3 le transizioni mouseover si "bloccano"
Ad esempio, con questo codice, il bordo inferiore è ancora visualizzati in arancione anche dopo che il mouse si è spostato altrove, se lo si fa troppo in fretta:
d3.selectAll("a")
.on("mouseover", function() {
d3.select(this)
.style("border-bottom-color", "#fff")
.transition()
.duration(1000)
.style("border-bottom-color", "#B23600"); })
.on("mouseout", function() {
d3.select(this)
.style("border-bottom-color", "#fff"); });
non so la risposta perfetta, ma ho il sospetto la mouseout viene richiamato e completato prima che la durata (1s) di il mouseover è completato. Forse fare una durata di 1100 per il mouseout? – cmonkey
Inoltre, la lettura su http://bost.ocks.org/mike/transition/ suggerisce che ci sono differenze tra le versioni d3 2 e 3. Quale versione stai usando? – cmonkey
Non hai una risposta perfetta, ma: Se, come nel tuo esempio, stai usando HTML (piuttosto che SVG), puoi saltare le transizioni d3 e utilizzare invece le transizioni css. Ciò risolverà definitivamente il problema che stai avendo, e sarebbe più performante. Gli utenti dei vecchi browser non riceveranno una transizione, ma oh pozzi ... – meetamit