2016-10-08 20 views
0

私は、使用中でないときにdisplay:noneを持っていなければならないホバリングメニューを持っているので、その下のものをクリックすることができます。表示ブロックと不透明度

これを開くときに、ディスプレイをインラインブロックにします。そしてその後、CSSの遷移用いて不透明にフェード - このコードで:

elm.onmouseover = function(){ 
    menu.style.display = "inline-block"; 
    menu.style.opacity = 1; 
}; 

このコードを実行ない場合、要素は、任意のフェードなしで真っ直ぐにポップ。

私の理論は、JavaScriptの要素が時間によって不透明度の変更キックを表示タイプを変更していないので、私はこれをしなかったことをとても速く走るということであった:

elm.onmouseover = function(){ 
    menu.style.display = "inline-block"; 
    for (var i=1000...; i--;); 
    menu.style.opacity = 1; 
}; 

それが今目に見えて待ちます。しかし、まだ消えずにポップインします。

私は私のコンソールに行き、走っ:

menu.style.display = "inline-block"; 
menu.style.opacity = 1; // run 
> return message 

をし、それが仕事をdidntの。私はこの

menu.style.display = "inline-block"; // run 
> return message 

menu.style.opacity = 1; // run 
> return message 

のように二つに文を分割するときしかし、それは正常に動作し、2つの間の遅延は、forループによって引き起こされるものよりもはるかに少ないです。

この動作の根源は何ですか?私はうんざりしている。

+0

さて、あなたが実際にアニメーションを行う機能を書かれていない限り、彼らタイマーやすべてで多少複雑になることがあります。あるいは、CSSアニメーションを使用しています。不透明度を何かに設定するだけでは、まったく色あせないでしょう。それを待って...不透明度を変更します。 – adeneo

+0

私は間違いなくその場所にトランジションを持っています... –

+2

私たちはそれらを見ることができないので、それは明らかではありません。 – adeneo

答えて

0

DOM は、メインスレッドと同期しているため、コード全体が終了するとリフレッシュされます。あなただけのsetTimeoutと1msのを待っていれば

、あなたが期待しているものを、動作します:

elm.onmouseover = function() { 
    menu.style.display = 'inline-block'; 
    setTimeout(function() { 
     menu.style.opacity = 1; 
    }, 1); 
} 

https://jsfiddle.net/vtd3y5ug/

+0

実際の答えをありがとう、それは今の意味があります。しかし、代わりに「可視性」を使用してしまったのですが、どういう仕組みになっていますか?これはまったく同じ方法で使用されますが、更新されます。 –

+0

参照:http://stackoverflow.com/questions/133051/what-is-the-difference-between-visibilityhidden-and-displaynone 表示:なし、要素がページにないことを意味します。可視性:非表示、要素がページ上にあることを示しますが、表示されません。 –

-1

display: noneopacityをフェード効果に使用することはできません。

display: noneおよびdisplay: inline-blockの代わりに、visibility: hiddenおよびvisibility: visibleを使用してください。

+0

私は表示をアニメーション化していませんが、不透明です。 –

+0

あなたは質問のポイントを逃していると思う –

関連する問題