jQuery 动画只逐字渲染文本

Posted

技术标签:

【中文标题】jQuery 动画只逐字渲染文本【英文标题】:jQuery animation only rendering text word by word 【发布时间】:2014-02-22 04:40:11 【问题描述】:

我不确定这是否更像是一个 jQuery、CSS 或浏览器相关的问题,但这是我一直想知道的:

在下面的 jsfiddle/code 中,动画开始时在动画中逐像素显示单词“this”,但之后直到渲染整个单词才显示扩展跨度的文本;这是为什么?还有,可以改成第一个字的动画吗?

jsfiddle:http://jsfiddle.net/XKVng/

<html>
<style type="text/css">
#mask 
  z-index: 3;
  position: absolute;
  float: right;
  width: 0;
  height: 20px;
  color: white;
  margin:0;
  background-color: black;

#text 
  position: absolute;
  z-index: 0;
  background-color: white;
  color: black;
  width: 200px;
  margin:0;
  float: right;
  height: 20px;


</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
$("document").ready(function() 
  var width = $("#text").width();
  var opts =  "easing" : "linear", "duration" : 4000, "queue" : false;
  $("#mask").animate("width" : width, opts);
  $("#maskBg").animate("width" : width, opts);
);



</script>
<body>
<span id="mask">this is some text to demo with</span>
<span id="text">this is some text to demo with</span>
</body>
</html>

我一直使用的浏览器是 Chromium 版本 31.0.1650.63,基于 Debian 7.2 构建,在 Debian 7.3 (238485) 上运行。

非常感谢!

【问题讨论】:

【参考方案1】:

这是因为在动画过程中单词换行了。您可以通过将white-space:nowrap 添加到#mask 元素来解决此问题,从而防止发生这种默认行为。

UPDATED EXAMPLE HERE

#mask 
    z-index: 3;
    position: absolute;
    float: right;
    width: 0;
    height: 20px;
    color: white;
    margin:0;
    background-color: black;
    white-space:nowrap;

【讨论】:

以上是关于jQuery 动画只逐字渲染文本的主要内容,如果未能解决你的问题,请参考以下文章

如何避免在 jQuery 动画 [fadeIn() 或 animate()] 结束时出现文本闪烁?

Jquery 动画效果后 IE 的字母渲染错误

让网站动起来!12款优秀的 jQuery 动画

Split Flap文本动画Jquery

jQuery:输入字段的动画文本颜色?

jQuery + Animate.css 动画只工作一次,动画不重置