在div中淡入和淡出文本

时间:2011-06-07 18:00:29

标签: jquery html fadein fadeout

我有一个带有CSS样式的div,将其显示为按钮:

<div id="Word1" class="btn green" onclick="WordClicked(1);">Word 1</div>

CSS样式:

.btn {
    display: inline-block;
    background: url(btn.bg.png) repeat-x 0px 0px;
    padding: 5px 10px 6px 10px;
    font-weight: bold;
    text-shadow: 1px 1px 1px rgba(255,255,255,0.5);
    text-align: center;
    border: 1px solid rgba(0,0,0,0.4);
    -moz-border-radius: 5px;
    -moz-box-shadow: 0px 0px 2px rgba(0,0,0,0.5);
    -webkit-border-radius: 5px;
    -webkit-box-shadow: 0px 0px 2px rgba(0,0,0,0.5);
}

.green      {background-color: #CCCCCC; color: #141414;}

我希望淡出div中的文本,更改文本,然后再次淡入文本。但我不想淡出淡出div。

如果我使用此javascript代码:

$('#Word1').fadeOut('fast');

我将淡出div和文本。

我该怎么做?

6 个答案:

答案 0 :(得分:29)

您希望将文本包装在一个范围中,然后将其淡出:

<div class="button"><span>TEXT!</span></div>

并且您不想使用fadeOut,因为这会改变按钮的大小,因为一旦fadeOut结束并且不再占用空间,文本将消失。而是为不透明度设置动画:

$(".button").click(function(){
    $(this).find("span").animate({opacity:0},function(){
        $(this).text("new text")
            .animate({opacity:1});  
    })
});

http://jsfiddle.net/8Dtr6/

编辑:轻微修正,只要你立即淡入它,使用fadeInfadeOut似乎不是问题,至少在chrome中。我希望可能在较小的浏览器中看到轻微的闪烁,但可能是错误的。

使用队列可能会更清洁以避免回调:

$(".button").click(function(){
    $(this).find("span")
        .animate({opacity:0})
        .queue(function(){
             $(this).text("new text")
                    .dequeue()
        })
        .animate({opacity:1});  
});

http://jsfiddle.net/8Dtr6/2

答案 1 :(得分:3)

尝试使用contents()功能。并wrap()内容与另一个元素。比如

$('#Word1').contents().wrap('<div class="temporary">').parent().fadeOut('fast');

这是一个简单的演示http://jsfiddle.net/7jjNq/

答案 2 :(得分:1)

HTML

<div id="Word1" class="btn green" onclick="WordClicked(1);"><span id="word555">Word 1</span></div>

JS

$('#word555').fadeOut('fast');

希望有所帮助

答案 3 :(得分:1)

您可以将文本“Word 1”放在span或div中,如下所示:

<div id="Word1" class="btn green" onclick="WordClicked(1);"><span id="Word1Text">Word 1</span></div>

然后,在WordClicked()函数内部执行:

$("#Word1Text").fadeOut("fast", function()
{
  $("#Word1Text").html("New Text").fadeIn("fast");
});

答案 4 :(得分:0)

您需要在#Word1元素内部淡出/淡出的元素。它不需要是<div>

答案 5 :(得分:0)

promise()在这里很有用,但你也需要包装内容。此示例创建span但在动画后也将其删除。因此,您不必更改标记,也不会在动画完成后更改。

var v = $('#Word1');
$('<span />').text(v.text()).appendTo($(v).empty()).fadeOut('fast').promise().done(function() {
    $(this).text('Word 2').fadeIn().promise().done(function() {
    v.text($(this).text());
        $(this).remove();
  });
  });

示例:http://jsfiddle.net/niklasvh/jkaYr/

编辑或...可以用淡入淡出回调完成它。如果您打算为它添加更多动画效果,这仍然很有用。

var v = $('#Word1');
$('<span />').text(v.text()).appendTo($(v).empty()).fadeOut('fast',function() {
    $(this).text('Word 2').fadeIn('fast',function() {
    v.text($(this).text());
        $(this).remove();
  });
  });

示例:http://jsfiddle.net/niklasvh/jkaYr/15/