javascript - jQuery 递归淡入功能

标签 javascript jquery

我正在尝试为 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!");
});

一个工作演示:http://jsfiddle.net/jfriend00/zTURy/

关于javascript - jQuery 递归淡入功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11019741/

相关文章:

jquery - 如何使用jquery通过指定标签名称获取父元素?

javascript - jQuery 对 `this` 变量有什么魔力吗?

javascript - 使用 Bootstrap 将 jQuery 应用于正文(背景)但不应用于模态

javascript - 使用 HttpInterceptor 刷新并行 HTTP 请求的 token

javascript - 用字母位置替换字母,为什么拼接不删除多个字符

javascript - 未捕获的类型错误 : elem. 替换不是函数

javascript - Pickadate/Pickatime datetimepicker - 所选值不断更改回默认值

javascript - 为什么 jquery mouseup 事件在 Google Chrome 中不起作用?

javascript - 单击左侧的上下文菜单

jquery - 奇怪的 AJAX 重定向问题