Załóżmy, że chcę utworzyć regularne efekty najeżdżania dla menu nawigacji, ale zamiast CSS używam przejść D3, aby "zmiękczyć" efekt. Działa to dobrze przy użyciu metody mouseover
i mouseout
dla metody .on
. Problem polega jednak na tym, że przejście zostaje zablokowane, jeśli mysz opuści ukryty link przed przejściem. Jak uniknąć tego efektu ubocznego?Przejścia myszy D3 zostają "zablokowane".
Na przykład, z tym kodem, dolna granica jest nadal wyświetlany w kolorze pomarańczowym nawet po mysz przeniósł się gdzie indziej, jeśli robisz to zbyt szybko:
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"); });
nie wiem doskonałą odpowiedzią, ale podejrzewam mouseout jest wywoływany i zakończone przed czasem trwania (1s) z wskaźnik myszy jest zakończony. Może zrobić 1100 czas na mouseout? – cmonkey
Ponadto, czytanie na http://bost.ocks.org/mike/transition/ sugeruje, że istnieją różnice między wersjami 2 i 3 d3. Którą wersję używasz? – cmonkey
Nie masz też idealnej odpowiedzi, ale: Jeśli, jak w twoim przykładzie, używasz HTML (zamiast SVG), możesz całkowicie pominąć przejścia w d3 i używać zamiast tego przejść css. To zdecydowanie rozwiąże problem, który masz, i będzie bardziej wydajny. Użytkownicy starych przeglądarek nie otrzymają przejścia, ale oh wells ... – meetamit