2013-02-18 19 views
5

は、私は、ナビゲーションメニューのための定期的なホバー効果を作成したいとし、代わりにCSSの私はD3が効果を「柔らかく」に移行使用します。これは、.onの方法でmouseovermouseoutを使用すると問題なく動作します。しかし、問題は、遷移が行われる前にマウスがホバリングされたリンクを離れると、遷移が止まることです。その副作用をどのように回避するのですか?例えばD3のマウスオーバー遷移「スタック」

は、このコードで、下の境界はまだあなたが速すぎてそれを行う場合は、マウスが、別の場所に移動した後でさえもオレンジ色で表示されます。

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"); }); 
+0

のマウスオーバーが完了します。多分、マウスアウトのための1100の持続時間を作るでしょうか? – cmonkey

+0

また、http://bost.ocks.org/mike/transition/の読者は、d3バージョン2と3の間に違いがあることを示唆しています。どのバージョンを使用していますか? – cmonkey

+0

完璧な答えはありませんが、例のようにHTML(SVGではなく)を使用している場合は、d3トランジションをスキップして、代わりにCSSトランジションを使用できます。それは間違いなくあなたが抱えている問題を解決するでしょう、そして、それはより演奏するでしょう。古いブラウザのユーザーが移行を得ることはありませんが、ああ井戸は... – meetamit

答えて

3

は、私は何が起こっているかを考えるとき、ということですあなただけmouseover.transitionを持っているあなたが去る時に1000ミリ秒の期限が切れている前に、 移行はまだそのコースを実行していません。 早送りすると、マウスオーバーの遷移はまだ実行されています( )、この遷移をオーバーライドするためにmouseoutイベントに遷移呼び出しがありません。 (どうやらもないmouseoutイベントがmouseoverイベントに関連付けられ.transitionを停止します。)

しかし、あなたが述べたように、あなたがマウスアウトイベントにtransitionを入れて行うときに、 問題が消えます。これは、マウス出力transitionmouseover.transitionよりも優先されるため、mouseoutイベントに.transitionがあると、mouseoutイベントが制御に戻されるためです。

あなたはmouseoutイベントに.transitionをコメントアウトしている場合は、ここでのアクションでそれを見ることができます。また

http://jsfiddle.net/Ldmv6/1/

読む価値Scott Murray's今後のD3帳から第10章である:私は完璧な答えを知らないが、私は(1S)マウスアウトを継続する前に呼び出され、完成された疑いがあるhttp://ofps.oreilly.com/titles/9781449339739/_interactivity.html

+0

おかげでたくさん!この例では問題を解決しないマウスアウトに遷移を追加 –

+0

http://jsfiddle.net/t466vL71/ – bartburkhardt

+0

[OK]を、dynamicColorにアプローチを除去することによってそれを解決http://jsfiddle.net/w9q6uh25/ – bartburkhardt