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") divTitle 和 divArrow 在我的 div 关闭时不会出现。使用 hide(1000) 时同样的问题。

有和没有“慢”参数的隐藏有区别吗?

谢谢,安德里亚

4

3 回答 3

7

来自官方网站

匹配的元素将立即隐藏,没有动画。这大致相当于调用 .css('display', 'none'),只是 display 属性的值保存在 jQuery 的数据缓存中,以便稍后可以将 display 恢复为其初始值。如果一个元素的显示值为 inline,然后被隐藏并显示,它将再次被显示为 inline。

当提供持续时间时, .hide() 成为动画方法。.hide() 方法同时为匹配元素的宽度、高度和不透明度设置动画。当这些属性达到 0 时,显示样式属性设置为 none,以确保元素不再影响页面的布局。

因此,如果没有延迟地使用 hide,它会立即隐藏而不设置动​​画 - 例如,噗。

如果它随着时间的推移而使用,它就会变成动画,所以它会随着时间的推移而消失。

对于你的问题,没有相应的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 回答