3

jQueryを使用して要素の不透明度を切り替え(を使用してフェードイン/フェードアウトできるように)、要素が表示されている場合、または要素が非表示になっている場合に-webkit-transition:opacity .5s linear;に変更するdisplayことはできますか?display:blockdisplay:none

例:<a>タグをクリックすると、不透明度を1に設定し、を設定することでdivが表示されますdisplay:block。次に、タグをもう一度クリックする<a>と、不透明度が0に設定され、表示がに設定されnoneます。

これに対する私の試みは以下のとおりです。

.visible{
    opacity: 1;
    -webkit-transition:opacity .5s linear;
    display: block;
}

.close{
    display: none;
    opacity:0;
    width:20px;
    height:20px;
    background-color:red;   
    -webkit-transition:opacity .5s linear;
}

$(".toggle").click(function(){
if ($(".close").css("display") === "none") {
    $(".close").addClass("visible").delay(500).promise().done(function () {
        $(this).css("display", "block");
    });
};
if ($(".close").css("display") === "block") {
    $(".close").removeClass("visible").delay(500).promise().done(function () {
        $(this).css("display", "none");
    });
};
});

http://jsfiddle.net/charlescarver/zzP6g/

4

3 に答える 3

2

これは重複しているようです:ディスプレイ上のトランジション:プロパティ
この質問は非常によく似ており、同じ結論につながるはずです。

よろしくお願いします、
Korvin

于 2012-09-19T03:26:22.480 に答える
2

ドキュメントのこの特定のページは役に立ちました:

transition-property –不透明度など、どのプロパティをアニメートする必要があるか。

遷移期間–遷移が続く時間。

遷移タイミング関数–遷移のタイミング関数(たとえば、線形vs.イーズインvs.カスタム3次ベジェ関数)。

遷移–3つのプロパティすべての省略形。

したがって、などの特定のプロパティを呼び出すことも、クラス名でopacity使用することもできます。all適用するプロパティが1つしかない場合でも、後者の方がおそらく便利だと思います。

基本的にclassalltransitionプロパティでを使用して、クラス名を切り替えることができます。私が興味深いと思ったことの1つは、class追加で実際に複数のバージョンを実行できることでした(ただし、クラスを削除したときにまったく同じ効果が発生するわけではありません)。また、とを組み合わせるとopacity、私が知る限り、を使用するよりもうまく機能します。widthheightdisplay: none

以下は、-webkit-transitionプロパティをレイヤーで使用する方法を示しています。これは簡略化されたバージョンであり、その後にさらに洗練されたデモンストレーションが続きます。

#block.transition遷移プロパティを区別してみましょう。

<div id="block" class="transition"></div>

アニメーション化されていない基本的なプロパティ:

#block {
    margin: 25px auto;
    background: red;
}

初期の「見えない」状態:

#block.transition {
    opacity: 0;  
    width: 0;
    height: 0;
    padding: 0;
    -webkit-transition: all 2s ease-in-out; 
}

そしてアニメーションのステップ:

#block.transition.show {
    opacity: .3;
    width: 50px;
    height: 50px;
    background: orange;
    -webkit-transition: all .5s ease-in-out; 
}
#block.transition.show {
    opacity: .4;
    width: 150px;
    height: 150px;
    background: black;
    -webkit-transition: all 1s ease-in-out; 
}
#block.transition.show {
    opacity: 1;  
    padding: 100px;
    background: blue;
    -webkit-transition: all 3s ease-in-out; 
}​

ここで行っているのは、.showクラスを切り替えることだけです。

$(document).ready(function load(){
    var $block = $("#block");

    $('.toggle').click(function c(){
        $block.toggleClass('show');
    });
});​

デモソース


マークアップ

<p><button class="toggle">Toggle Blocks</button></p>

<div id="block" class="transition">
    <div class="blocks transition"></div>
    <div class="blocks transition"></div>
    <div class="blocks transition"></div>
</div>

<strong> CSS

含む#block

#block {
    margin: 25px auto;
    background: #333;
    -webkit-transition: opacity, display, width 1.5s ease-in-out; 
}
#block.transition {
    opacity: 0;  
    width: 0;
    padding: 0;
    border: 1px solid yellow;
    -webkit-transition: all 1.9s ease-in-out; 
}
#block.transition.show {
    opacity: .3;  
    border-color: blue;
    -webkit-transition: all .5s ease-in-out; 
}
#block.transition.show {
    opacity: 1;  
    width: 550px;
    padding: 25px;
    border-width: 15px;
    -webkit-transition: all 3s ease-in-out; 
}

3つのグループ.blocks

.blocks {
    display: inline-block;
    background-color: red;
}
.blocks.transition {
    opacity: .1; 
    width: 0;
    height: 0;
    margin: 0; 
    -webkit-transition: all 1.7s ease-in-out; 
}
.blocks.transition.show {
    opacity: 1;
    width: 150px;
    height: 150px;
    margin: 10px;
    -webkit-transition: all 4.5s ease-in-out;
}​

jQuery

$(document).ready(function load(){
    var $block = $("#block"),
        $blocks = $block.find(".blocks.transition");

    $('.toggle').click(function c(){
        $block.toggleClass('show');

        $blocks.delay(1500).toggleClass('show');
    });
});​

デモソース

于 2012-09-19T05:56:06.383 に答える
1

CSS3トランジション終了イベントにイベントリスナーを追加してみませんか。イベントが発生すると、要素を非表示または表示します。

$('.close').on('transitionend webkitAnimationEnd MozTransition OTransitionEnd MSTransitionEnd', function () {
    $(this).show();
});

このソリューションを使用すると、クリックイベントでcssプロパティの表示をブロックするか、まったく設定しないように設定を削除し、transitionendイベントハンドラーで処理できます。

より詳細な例が必要な場合は、喜んで提供させていただきます。これは明らかに、正しい方向に進むための出発点にすぎません。

完全な例:

$('.close').on('transitionend webkitAnimationEnd MozTransition OTransitionEnd MSTransitionEnd', function () {
    if (!$(this).hasClass('visible')) {
        $(this).css('display', 'none');
    } else {
        $(this).css('display', 'block');
    }
});

$(".toggle").click(function(){
    if ($(".close").is(':hidden')) {
        $(this).css('display', 'block');
        $(".close").addClass("visible");
    } else {           
        $(".close").removeClass("visible");
    }
});​
于 2012-09-19T03:33:14.483 に答える