2015-09-30 14 views
7

slideUp()/ slideDown()を使用してページ要素の啓示をアニメーションしようとしていますが、 )配置。これらのアニメーションが実行されている間、アニメーションが完了するまでアイコンが半分にカットされた隠しレンダリングにオーバーフローが設定されます。slideDown()/ slideUp()で水平オーバーフローを発生

The JSFiddle hereが私の問題を示しています。私は最後に魔法のように表示されるのではなく、アニメーションの実行中に青い枠の水平オーバーフローが見えるようにする必要があります。私はまた、垂直オーバーフローが隠されたままにする必要があります。

私は

$(this).parent().find("div:eq(0)").slideDown(1000).css("overflow-x", "visible"); 

、修正しようとしましたが、無視して使用しているように見える、

$(this).parent().find("div:eq(0)").slideDown(1000).css("overflow", "visible"); 

も縦型オーバーフローが表示されるようになります。

洞察力があれば幸いです。

答えて

8

だけのようなあなたのdivラップ:これを試してみてください

<div class="hide"><div class="clickEvent"> 
... 
</div> 

https://jsfiddle.net/h9gtzp6f/37/

+1

divの上のいくつかの親要素は、すべて同じ幅の仕様を持ちます。それらの親要素もラップする必要はありませんか?私はこれが望ましくない副作用につながると懸念しています。 –

+1

E.アリソン問題はどんな幅から来ていません。アニメーションプロセスがどのように機能しているかは簡単です。ラップソリューションを使用すると、実際にブラウザがその幅を処理できるようになります。だから私はあなたに再利用可能なコンポーネントの種類があることを理解しました。ただそれをもう1つのdivにまとめる必要があります。 –

+0

親要素の設定幅が同じであるため、親要素の幅を継承するため、コンテナの幅を100%に設定すると機能しません。 [ここをクリック](https://jsfiddle.net/edallison/h9gtzp6f/35/)。 –

4

他div.hide内div.clickEventを:私はあるに取り組んでいる実際のプロジェクトで

$('.clickMe').toggle(function() { 
    var div = $(this).parent().find("div:eq(0)").show(); 
    var parent = div.parent(); 
    var wrapper = $('<div>', {'class': 'hide wrapper', html: div}); 
    parent.append(wrapper); 
    wrapper.slideDown({duration:1000, complete: function(){parent.append(div);wrapper.remove();}}); 
}, function() { 
    var div = $(this).parent().find("div:eq(0)"); 
    var parent = div.parent(); 
    var wrapper = $('<div>', {'class': 'wrapper', html: div}); 
    parent.append(wrapper); 
    wrapper.slideUp({duration:"fast", complete: function(){parent.append(div);wrapper.remove();div.hide()}}); 
}); 
+1

私はすでに提供しているものと同じです(ラッピングソリューション:) –

+0

ええ、私はあなたのソリューションがそこに来る前に投稿を開始しました。私は彼らが同じソリューションに対する異なるアプローチだと思うし、より多くの選択肢を持つことを傷つけることはできない – user2704238

関連する問題