【问题标题】:Fade In and Fade Out text inside a divdiv内的淡入和淡出文本
【发布时间】:2011-09-10 07:23:18
【问题描述】:

我有一个带有 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和文字。

我该怎么做?

【问题讨论】:

    标签: jquery html fadein fadeout


    【解决方案1】:

    html

    &lt;div id="Word1" class="btn green" onclick="WordClicked(1);"&gt;&lt;span id="word555"&gt;Word 1&lt;/span&gt;&lt;/div&gt;

    js

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

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      尝试使用contents() 函数。并且 wrap() 带有另一个元素的内容。比如

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

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

      【讨论】:

      • 你不能像那样为文本节点设置动画。
      • 如果我这样做,我会得到一个例外。
      • @Niklas 是的,我看到你不能像那样为文本节点设置动画。但是我已经编辑了我的答案以提供一个使用 contents() 函数和 wrap() 函数的简单解决方案
      • @VansFannel ...我修改了答案。它现在可以工作了,我提供了一个简单的演示
      • 这好多了,但它仍然不起作用,因为fadeOut() 应用于contents() 而不是父wrap()$('#Word1').contents().wrap('&lt;div class="temporary"&gt;').parent().fadeOut('fast'); 会隐藏包装器。
      【解决方案3】:

      您需要在#Word1 元素内有一个淡出/淡入的元素。它不需要是&lt;div&gt;

      【讨论】:

        【解决方案4】:

        您想将文本包装在一个跨度中,然后将其淡出:

        <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 用于动画而不是 FadeOut。动态设置文本可能是有意义的,而不是将其硬编码到 jQuery 语句中。类似于:var new_text = $(".button .new-text").text(); -> $(this).text(new_text);
        • @Wex 谢谢,是的,我假设他将有一些方法来决定文本将是什么。这只是为了演示它的动画部分。
        • @kingjiv:我正在使用此代码对&lt;img&gt; 标签执行相同的操作,但在更改时我得到了“轻弹”。有什么建议吗?
        • 使用 img 可能看起来会更好,有 2 张图像,其中一张淡入,另一张淡出。问题可能是您正在更改 src,一旦您更改了新图像,就必须加载。在加载之前它不会占用空间。
        • @kingjiv:你可以在这里找到我正在使用的代码:stackoverflow.com/questions/6277427/…
        【解决方案5】:

        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/

        edit 或... 可以使用淡入淡出回调来完成。不过,如果您打算为其添加更多动画效果,它仍然很有用。

        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/

        【讨论】:

          【解决方案6】:

          您可以将文本“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");
          });
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-03-08
            • 1970-01-01
            • 2015-12-15
            • 2014-08-21
            • 1970-01-01
            • 1970-01-01
            • 2014-12-17
            • 1970-01-01
            相关资源
            最近更新 更多