gpt4 book ai didi

javascript - 有没有办法控制线性调用顺序中的 promise 流?

转载 作者:搜寻专家 更新时间:2023-11-01 04:25:00 25 4
gpt4 key购买 nike

我仍然没有严格遵守 promise 。假设我有一个代码:

selected.eq(i)   // blink
.fadeOut( 200 ).delay( 50 ).fadeIn( 400 )
.delay( 100 )
.fadeOut( 200 ).delay( 50 ).fadeIn( 400 );

然后我调用:

selected.unbind('click')
.promise().done(function ()
{
selected.fadeOut(500);
});

它正常工作——一旦闪烁完成,最后一个 fadeOut 开始。但是当我通过插件(设置使用 jQuery 动画)进行闪烁时,所以我的整个第一部分是只需一个电话:

selected.eq(i).modernBlink({ 
duration: 750,
iterationCount: 3,
auto: true}
);

blink 的主体是:

ModernBlink.prototype._fallbackAnimation = function _fallbackAnimation( iterationCount ) {
var self = this,
duration = this.options.duration / 2;

if ( iterationCount > 0 || iterationCount === 'infinite' ) {
iterationCount = iterationCount === "infinite" ? "infinite" : iterationCount - 1;

this.el.animate( { 'opacity': 0 }, duration ).promise().done( function() {
self.el.animate( { 'opacity': 1 }, duration );
self._fallbackAnimation( iterationCount );
});
}
};

所以也是基于promise的递归调用。结果不同——在 blink 的第一次迭代后,我的代码开始运行,因为我的 promise 赢了。

视觉效果是——闪烁,淡出(我的部分),一直闪烁。

我的问题是 -- 如何告诉 jQuery blink promise 比我的更重要?

注意:我无法将第二部分直接附加到第一部分,因为它们分散在代码中,有时第一部分不会执行。

blink的代码来自Modern Blink莱昂德里克。这里以MB为例!

更新:大局,我不知道这是否有帮助,但无论如何:

if (Environment.Mode=='blink') // my private settings variable
call_blink(); // part 1, presented above
call_fade_out(); // part 2, presented above

这就是为什么我无法链接它们。我有更多类似“配置”的代码使用了一些,所以我想了解它,并在这里和其他地方使用它。

最佳答案

尝试使用 animationend事件

$.each(["webkit", "moz", "MS", "o", ""], function (k, v) {
selected[0].addEventListener(v !== "" ? v + "AnimationEnd" : "animationend"
, function (e) {
$(this).unbind('click')
.promise().done(function (el) {
el.fadeOut(500);
console.log("done")
});
})
})

jsfiddle http://jsfiddle.net/guest271314/x7gqb1g4/


另一种方法;通过维护 count !== 0 实现“无限”循环,通过调用 .stop() 实现“停止”,clearQueue() 设置 .data() 标志

    // v2
// `d` : duration , `count` : iteration
(function ($) {
$.fn.blink = blink;
function blink(d, count) {
var el = $(this);
$.fx.interval = 0;
return el.each(function (i, elem) {
var elem = $(elem);
elem.data("count", count);
return elem.fadeTo(d, "0", "linear", function () {
elem.fadeTo(d, "1", "linear", function () {
elem.data("count", --count);
return (elem.data("count") !== 0 && !elem.data("stop")
? elem.blink(d, elem.data("count"))
: elem.stop(true, true).data("stop", false))
})
})
}).promise("fx")
};
}(jQuery));

// e.g.,
var selected = $("div")
, button = $("button:first")
, stop = $("button:last");

selected.on("click", function (e) {
// start `$.fn.blink` , log returned `promise` on stop
$(this).blink(750, 10).then(function (el) {
console.log(el, el.queue(), el.data());
})
});

button.on("click", function () {
// unbind `click` event
selected.unbind('click')
.promise().then(function (el) {
el.fadeOut(500);
});
});

stop.on("click", function () {
// stop animation
selected.data("count", null).data("stop", true).clearQueue()
})

jsfiddle http://jsfiddle.net/guest271314/33ptL9do/

关于javascript - 有没有办法控制线性调用顺序中的 promise 流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26454687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com