单词一个一个出现的jQuery文本效果

Posted

技术标签:

【中文标题】单词一个一个出现的jQuery文本效果【英文标题】:jQuery text effect where words appear one by one 【发布时间】:2011-06-04 04:53:54 【问题描述】:

有人问我是否可以使用 jQuery 在 html 中创建一个文本效果,其中我得到一个字符串,然后例程会自动检测单词并为每个单词设置动画,一次一个。

喜欢。

    进入动画显示秒:“快乐”

    进入动画显示:“Happy New”

    秒入动画节目:《新年快乐》

    秒入动画节目:《2011新年快乐》

每个单词都应该“淡入淡出/动画化”,我认为一个简单的以像素为单位的滑动窗格会令人满意 - 但不是。一个字一个字。

我可能需要一些关于这个的想法。我知道一些 jQuery 和很多 javascript,所以我想我需要一些关于 jQuery 部分的帮助。

对于单词列表,我只会拆分“”(空格)并接受“,.!” etc 是单词的一部分。

但是我如何在 jQuery 中为这个“动态数组”设置动画 - 是否有某个插件或者我是第一个?

我在想也许一个项目符号列表也可能是诀窍,然后让它像菜单一样水平浮动,然后将单词添加为新项目符号,每秒一次。但我很高兴看到这里的专家想出什么解决方案。 :O)

编辑 从标记的答案,我有这个:

    var str = $('div#greeting h1').html(); // grab text
    $('div#welcome h1').html(""); // clear text

    var spans = '<span>' + str.split(" ").join(' </span><span>') + '</span>';
    $(spans).hide().appendTo('div#greeting h1').each(function(i)
    
        $(this).delay(500 * i).fadeIn();
    );

STRONG 标记有效,但不知何故,部分文本在一组中淡出。

试试这个: “这是一个测试文本。[strong]我们相信这比以往任何时候都更好[/strong]。”看看问题。

【问题讨论】:

【参考方案1】:

工作示例: http://jsfiddle.net/TcdQb/

var str = $('span.ticker').text();

var spans = '<span>' + str.split(/\s+/).join(' </span><span>') + '</span>';

$(spans).hide().appendTo('body').each(function(i) 
    $(this).delay(1000 * i).fadeIn();
);

这会将单词放在 span 标签中:"&lt;span&gt;Happy &lt;/span&gt;&lt;span&gt;New &lt;/span&gt;&lt;span&gt;Year &lt;/span&gt;&lt;span&gt;2011&lt;/span&gt;"

创建 DOM 元素:$(spans)

隐藏它们:.hide()

附加它们:.appendTo('body')

最后,使用.each().delay() 对它们进行迭代,每个.fadeIn() 乘以1000ms 乘以迭代的当前索引。


编辑:这是对示例的更新,它使用更短的延迟和更长的动画,因此动画重叠了一点。

http://jsfiddle.net/TcdQb/1/

    $(this).delay(400 * i).fadeIn(1000);

编辑:要处理嵌套标签(仅深一层),您可以这样做:

http://jsfiddle.net/WgMrz/

var h1 = $('div#greeting h1');

h1.hide().contents().each(function() 
    var words;
    if (this.nodeType === 3) 
        words = '<span> ' + this.data.split(/\s+/).join(' </span><span> ') + ' </span>';
        $(this).replaceWith(words);
     else if (this.nodeType === 1) 
        this.innerHTML = '<span> ' + this.innerHTML.split(/\s+/).join(' </span><span> ') + ' </span>';
    
);

   // Remove any empty spans that were added
h1.find('span').hide().each(function() 
    if( !$.trim(this.innerHTML) ) 
        $(this).remove();
    
);

h1.show().find('span').each(function(i) 
    $(this).delay(400 * i).fadeIn(600);
);

【讨论】:

也很好!现在我必须决定谁应该得到“答案”..希望我能标记多个...... 我将如何初始化 str 变量,让我们说一个带有名为 eg 的 css 类的 span/div。 "ticker": 2011 年新年快乐 @BerggreenDK:刚刚注意到你的 cmets。我再看看。 (顺便说一句,使用split(/\s+/),您正在传递一个正则表达式,上面写着“在找到一个或多个相邻空格字符的地方分割” @BerggreenDK: Here's an updated example. 它只适用于嵌套一层深的标签。我会把它添加到我的答案中。 @BerggreenDK:它用于区分文本节点和元素,因为您需要一些不同的技术来操作它们的内容。 Here's a list 的不同节点类型。类型 1 和 3 最有可能是您需要参考的。 .contents() 方法与.children() 类似,只是它也检索文本节点。因此,当我们使用.each() 进行迭代时,我们会测试每一个以查看我们当前拥有的。【参考方案2】:

我不是专家,但也许你想多了。怎么样:

   var fadeWordsIn = function(elem$) 
      var txt = elem$.text().split(' ');
      elem$.empty();
      var pushIt = function() 
          if (txt.length) 
              var word = txt.shift();
              var span$ = $("<span>" + word + " </span>");
              elem$.append(span$);
              span$.hide().fadeIn(1000, pushIt);
          
       ;
       pushIt();
  ;

【讨论】:

谢谢,这就是我的目标。【参考方案3】:

你想要这里的“BlockFadeIn by word”动画:http://dev.seankoole.com/jquery/ui-effect/text.html

刚刚发布!

【讨论】:

哦。比我的答案要好得多。使用 Emacs 而不是 Google 是我的错。 这是一个很棒的页面,里面也有很多有趣的示例。但我认为正确的答案必须是这次最准确的答案。不过感谢您的链接。很酷的东西! @Malvolio:我认为你做了一个很好的尝试,很抱歉我不能标记一个以上的好答案,但我也投了你的票。 链接失效

以上是关于单词一个一个出现的jQuery文本效果的主要内容,如果未能解决你的问题,请参考以下文章

如何使文本出现在html中的滚动条上

jQuery UI高亮效果可以应用于表单文本输入吗?

使用jQuery实现类似开关按钮的效果

每天学一个jquery插件-仿富文本框3

jQuery UI 抖动效果从新行开始

CSS文本字体个别属性效果对比