6

divを非表示にする必要があります。このコードを使用すると、正常に機能します。

    var idObj = $(this).attr('key');
var valH = $(this).attr('hideval');
var valS = $(this).attr('showval');

if ($('div[name='+idObj+']').attr('isdisplay') == 'no') {
    $('div[name='+idObj+']').children().show("slow");
    $('div[name='+idObj+']').attr('isdisplay','yes');
    var divTitle = $('div[name='+idObj+']').children().first();
    var divArrow = $(this).children().first();
    //.attr('src',prefixImg+valH);

    //divTitle.show();
    //divArrow.show();
    $(this).children().first().attr('src',prefixImg+valH);
} else {

    var divTitle = $('div[name='+idObj+']').children().first();
    var divArrow = $('div[name='+idObj+']').children().last();
    //.attr('src',prefixImg+valS);

    $('div[name='+idObj+']').children().hide();
    $('div[name='+idObj+']').attr('isdisplay','no');

    divTitle.show();
    divArrow.show();
    $(this).children().first().attr('src',prefixImg+valS);
}

divが非表示になり、divを再度開くためのタイトルと矢印が表示されます。しかし、hide( "slow")を使用しようとすると、divを閉じたときにdivTitleとdivArrowが表示されません。Hide(1000)を使用した場合と同じ問題。

「遅い」パラメータがある場合とない場合の非表示に違いはありますか?

ありがとう、アンドレア

4

3 に答える 3

7

公式サイトより

一致した要素は、アニメーションなしですぐに非表示になります。これは .css('display', 'none') の呼び出しとほぼ同じですが、display プロパティの値が jQuery のデータ キャッシュに保存されるため、後で表示を初期値に戻すことができます。要素の表示値が inline の場合、非表示にしてから表示すると、再びインラインで表示されます。

期間が指定されている場合、.hide() はアニメーション メソッドになります。.hide() メソッドは、一致した要素の幅、高さ、不透明度を同時にアニメーション化します。これらのプロパティが 0 になると、要素がページのレイアウトに影響を与えないように、表示スタイル プロパティが none に設定されます。

そのため、hide を遅滞なく使用すると、アニメーション化せずにすぐに非表示になります (例: poof)。

時間とともに使用するとアニメーション化されるため、時間の経過とともに消えます。

あなたの問題については、対応する html コードがないと判断するのは困難です。

于 2012-11-27T17:21:27.713 に答える
4

$(element).hide()要素を即座に非表示にし、$(element).hide('slow')その消失を (ゆっくりと) アニメーション化します。

アニメーションが終了したに何かをしたいようです (よくわかりませんが) 。その場合は、次のようにします。

var that = this;  // here to preserve scope for the block below
$('div[name='+idObj+']').children().hide('slow', function() {

    // This stuff happens after the hide animation is done.
    $('div[name='+idObj+']').attr('isdisplay','no');

    divTitle.show();
    divArrow.show();
    $(that).children().first().attr('src',prefixImg+valS);  // <= note "that" instead of "this"

});
于 2012-11-27T17:24:51.427 に答える
1

jQueryのドキュメントによると

文字列 'fast' と 'slow' を指定して、それぞれ 200 ミリ秒と 600 ミリ秒の期間を示すことができます。

また、ミリ秒単位の期間を指定することもできます..

于 2012-11-27T17:21:19.617 に答える