【问题标题】:jQuery Queuing Commands without Callback没有回调的 jQuery 队列命令
【发布时间】:2015-10-14 14:31:24
【问题描述】:

我希望 DIV 淡出,更新其内容,然后尽可能整齐地淡入。

当前方式 (http://jsfiddle.net/19czxx9r/2/)

$(".my_div").off().on('click', function(){
    $(".my_div").fadeOut(function(){
       $(".my_div").text("i was clicked");
        $(".my_div").fadeIn();    
    });
});

理想方式 (http://jsfiddle.net/19czxx9r/1/)

$(".my_div").off().on('click', function(){
    $(".my_div").fadeOut();
    $(".my_div").text("i was clicked");
    $(".my_div").fadeIn();
});

我想避免使用当前可行的方法,因为我最终需要为我的项目嵌套数十个函数。

有没有办法以理想的方式有效地对命令进行排队,以便在每个命令完成后运行?

谢谢

【问题讨论】:

  • 你可以创建和维护你自己的queue(),但这就是jQuery在内部所做的。由于动画的异步性质,后者不可能工作。您能否详细说明为什么第一种方法会导致您编写“数十个函数”
  • 嗨,Rory,示例很困难,但大致如下: > 淡出 DIV > 更新文本 > 滑入 > Flash > 淡出 > 再次更新文本,通过繁琐的 UI 通知流程跨度>

标签: javascript jquery html queue


【解决方案1】:

您总是可以编写自己的 queue 助手:

$.fn.queueText = function(text){
    var jq = this;
    return jq.queue(function(){
        jq.text(text);
        jq.dequeue();
    });
};

var myDiv = $(".my_div");
myDiv.fadeOut().queueText('I was clicked').fadeIn();

$.fn.queueText = function (text) {
    var jq = this;
    return jq.queue(function () {
        jq.text(text);
        jq.dequeue();
    });
};

var myDiv = $(".my_div");

myDiv.off().on('click', function () {
    myDiv.fadeOut().queueText('I was clicked').fadeIn();
});
.my_div {
    font-size:30px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="my_div">click me</div>

【讨论】:

  • 这是否实际上意味着 .fadeIn() 只是 $.fn.fadeIn,并且它是与 jQuery 捆绑在一起的预定义原型,所以我们正在制作自己的文本更改原型?
  • 我们只是在制作队列助手并将其附加到 jQuery 原型中。另外,是的,fadeIn 是 jQuery 原型的一部分。
  • 知道了,推断这一点也可以为属性制作一个 - 完美。谢谢!
  • 请格外小心其他 jQuery 原型属性的冲突。 (注意我是如何使用queueText 而不是text,因为已经有一个text 属性)。
猜你喜欢
  • 2023-03-03
  • 2013-10-04
  • 2015-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-21
相关资源
最近更新 更多