使元素在动画时不可单击



我试图使元素在动画化时不可点击。动画完成后,我希望它再次可点击。我已经寻找了很长时间有关如何实现这一目标的帮助,但我无法让它工作,我不知道为什么。

该 HTML:

<p>
   <span class="red" id="a">A</span><span id="llright" class="hide">llright</span> B C D
</p>

单击字母 A 时,它会向左移动,然后一些文本会淡入它旁边。

jQuery:

(function() {
var letterA = $('#a'),
    llright = $('#llright');

$('#a:not(.open)').live('click', function() {
    letterA.animate({
    marginRight: "5.7in",
    }, 1300, function() {
        letterA.addClass('open');
        llright.fadeIn(1300); // Animation complete.
    });
});

$('#a.open').live('click', function() {
    llright.fadeOut(700);
    letterA.delay(700).animate({
    marginRight: "0.0in",
    }, 700, function() {
        letterA.removeClass('open');
    });
});

})();

动画效果很好,但这不会:

if(letterA.is(':animated')) {
    letterA.unbind('click');
};

最后一部分根本不起作用,即使我插入一个简单的 alert() 而不是 unbind(),它似乎也无法弄清楚 A 何时移动而不是移动。

真的可以在这里使用一些帮助,我已经尝试了我能想到的一切。

感谢/Oscar

您的检查仅在页面加载时运行。在点击功能内部进行检查:

$('#a:not(.open)').live('click', function() {
    if(!letterA.is(':animated')) {
        letterA.animate({
        marginRight: "5.7in",
        }, 1300, function() {
            letterA.addClass('open');
            llright.fadeIn(1300); // Animation complete.
        });
    }
});

此外,live() 已被弃用;请考虑迁移到 on()。

更经济的是,只需附加一个带有内部分支的点击处理程序,以满足不同的情况; 正向动画、反向动画和在动画进行过程中拒绝。

你也可以通过测试llright的状态来摆脱没有addClass/removeClass('open')。

像这样的事情应该这样做:

$('#a').on('click', function() {
    var $this = $(this),
        llright = $this.next("span");
    if($this.is(":animated") || llright.is(":animated")) {
        return;//reject (no action)
    }
    if(llright.is(":visible")) { //reverse animation sequence
        llright.fadeOut(700, function(){
            $this.animate({
                marginRight: 0,
            }, 700);
        });
    }
    else {
        $this.animate({ //forward animation sequence
            marginRight: "5.7in",
        }, 1300, function() {
            llright.fadeIn(1300);
        });
    }
});

另请注意,使用此代码时,无需使用 .live()

相关内容

  • 没有找到相关文章

最新更新