【发布时间】:2012-03-10 01:29:06
【问题描述】:
我在为多个段落设置不透明过渡动画以模拟顺序打字时遇到问题。 在我的页面中,我有三个包含文本的“段落”元素。 我想按顺序对它们进行可视化:第一个,逐个字符,然后是第二个,逐个字符,然后是第三个,逐个字符。 我注意到代码仅适用于 n-1 段......最后一个总是立即显示。 所以我的诀窍是在最后一段中包含一个“虚拟”空白......但我不喜欢它。 有没有办法以更优雅的方式解决问题? 我的代码如下:
-
CSS:
span.typewrite { opacity: 0; -webkit-transition-property: opacity; -webkit-transition-duration: 0s; -webkit-transition-timing-function: linear; } -
javascript:
window.onload = function() { var setTypeWrite = function(arr) { var p, txt, span, t = 0; for (var a = 0; a < arr.length; a++) { p = document.querySelector(arr[a]); txt = p.innerText; p.innerText = ""; for (var i = 0; i < txt.length; i ++) { span = document.createElement("span"); span.className = "typewrite"; span.appendChild(document.createTextNode(txt.substr(i, 1))); span.style["-webkit-transition-delay"] = parseFloat(t * 0.15).toString() + "s"; p.appendChild(span); t++; } } }; var startTypeWrite = function(arr) { var spans; for (var i = 0; i < arr.length; i++) { spans = document.querySelectorAll(arr[i]); for (var s = 0; s < spans.length; s++) { spans[s].style.opacity = "1"; } } }; setTypeWrite(["#text1", "#text2", "#text3", "#dummy"]); startTypeWrite(["#text1 span.typewrite", "#text2 span.typewrite", "#text3 span.typewrite", "#dummy"]); }; -
HTML 正文:
<p id="text1">text one...</p> <p id="text2">text two...</p> <p id="text3">text three</p> <p id="dummy"></p>
【问题讨论】:
-
Javascript 使用从零开始的索引,CSS 使用从一开始的索引。如果在将索引传递给 querySelectorAll() 之前将其添加到索引中,它应该可以工作。
-
你的意思是在“startTypeWrite”函数中吗?类似 querySelectorAll(arr[i+1])?
-
在我看来就像 chrome 中的一个错误
-
我想是的;我正在工作,所以我没有机会玩代码,但这就是我快速查看您发布的内容时跳出来的原因。
-
会不会是同步问题?如果我通过 setTimeout 调用“startTypeWrite”函数,一切似乎都按预期工作......
标签: css opacity css-transitions