作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为 Logo 制作动画。标记如下所示:
<div id="logo">
<h1>
<span>A</span><span>n</span><span>t</span><span>o</span><span>n</span><span>i</span><span>o</span><span>R</span><span>o</span><span>s</span><span>s</span><span>i</span>
</h1>
<h2>composer</h2>
</div>
我想做的是为每个 <span>
制作淡入效果里面#logo
.为此,我使用了这段代码:
function fadeInRecursive (elementToFade) {
if (!elementToFade) {
elementToFade = $('#logo span:first-child')
}
var next = elementToFade.next('#logo span')
if (!next) {return false}
elementToFade.animate({
opacity: 1
}, 3000, fadeInRecursive(next))
}
$(document).ready( fadeInRecursive )
但是 Firefox 崩溃了...
我做错了什么?
最佳答案
这是一个通用函数,它会逐个淡入选择器中的每个项目:
function fadeInSuccessive(selector, t) {
var items = $(selector);
var index = 0;
function next() {
if (index < items.length) {
items.eq(index++).fadeIn(t, next);
}
}
next();
}
fadeInSuccessive("#logo span", 1000);
还有一个工作演示:http://jsfiddle.net/jfriend00/vzgBd/
这实际上并没有使用递归(尽管它看起来像),因为对 next()
的连续调用发生在一段时间后由动画完成触发,当它被调用时,之前对 next()
的调用已经完成,因此从技术上讲这不是递归。
这是一个更通用的实现,作为 jQuery 方法完成:
$.fn.fadeInSuccessive = function(t, fn) {
var index = 0;
var self = this;
function next() {
if (index < self.length) {
self.eq(index++).fadeIn(t, next);
} else {
if (fn) {
fn.call(self);
}
}
}
next();
}
$("#logo span").fadeInSuccessive(1000, function() {
$(document.body).append("<br>Done!");
});
关于javascript - jQuery 递归淡入函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11019741/
我是一名优秀的程序员,十分优秀!