有没有办法以线性调用顺序控制承诺流程?

2024-02-28

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

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}
    );

眨眼的主体是:

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 won.

视觉效果是——眨眼,淡出(我的部分),继续眨眼。

我的问题是-- 如何告诉 jQueryblink承诺比我的还重要?

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

眨眼的代码来自现代眨眼 https://github.com/leonderijke/jQuery-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 https://developer.mozilla.org/en-US/docs/Web/Events/animationend event

$.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")
        });
    })
})

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


另一种方法;通过维护“无限”循环count !== 0,通过调用“停止”.stop() , clearQueue()环境.data() flag

    // 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()
})

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法以线性调用顺序控制承诺流程? 的相关文章

  • 使用 jQuery 更改鼠标悬停时的图像源

    我有一些图像及其翻转图像 使用 jQuery 我想在 onmousemove onmouseout 事件发生时显示 隐藏鼠标悬停图像 我所有的图像名称都遵循相同的模式 如下所示 原图 Image gif 翻转图像 Imageover gif
  • underscore.js 中断路器的重要性是什么? [复制]

    这个问题在这里已经有答案了 In 下划线 js http underscorejs org docs underscore html 有这样的代码 if iterator call context obj keys i keys i obj
  • React 和 ES6 继承

    Note 这篇文章是在 React 不支持 ES6 v12 时发布的 我有一个 ES6 课程 class BaseClass getInitialState return message Hello render return div di
  • 获取顶部框架的 URL

    在 Facebook 应用程序中 我需要检查顶部框架 主窗口 URL 是什么 并相应地显示内容 我尝试使用以下内容 if top location toString toLowerCase indexOf facebook com lt 0
  • HTML 5 视频:使用 javascript 播放多个“剪辑”

    我在 HTML 视频和 JavaScript 方面遇到问题 因此编写了一些简单的代码来演示 有一个视频包含三个 剪辑 全长五秒 显然 在现实世界中 它们要长得多 一个在 25 30 秒 一个在 55 60 秒 最后一个在 85 90 秒 我
  • 确定是否单击了 Google Chrome 打印预览中的打印/取消按钮

    我一直在使用下面的代码打印我的页面 window print 下图是 Google Chrome 浏览器中的打印预览的样子 它有两个主要按钮 print and cancel 我想知道用户是否点击了print or cancel纽扣 我所做
  • 通过修改 html 设置在 Web 表单上上传的默认文件名/目录

    我一直使用这个上传表单 并且每次都使用相同的文件名 我想知道是否有一种方法可以通过更改代码并在本地保存文件来设置表单中的文件名 如果有其他方法可以实现自动化 我也愿意 谢谢 这是来源
  • Google Maps API v3 在地图加载后不会禁用滚轮

    我正在网站上实现谷歌地图 一切都工作得很好 除了地图加载后我似乎无法禁用滚轮 如果我在地图加载之前将选项设置为scrollwheel false 则滚轮将被禁用 但如果我稍后尝试执行此操作 我有一个启用 禁用滚轮的复选框 以下是我在页面加载
  • 删除添加空值的Javascript对象项[重复]

    这个问题在这里已经有答案了 我有一个 JavaScript 对象 finalTitleList Title ffd Iscompleted Id 0 Title fdfmdbk Iscompleted Id 1 Title fdf d Is
  • 没有 jQuery 的纯 CSS 工具提示[重复]

    这个问题在这里已经有答案了 可能的重复 如何使用纯 CSS 创建 工具提示尾部 https stackoverflow com questions 5623072 how can i create a tooltip tail using
  • 保持 WebSocket 连接处于活动状态

    我正在研究 WebSocket 协议 并尝试在后端使用 Python 实现一个简单的 ECHO 服务 它似乎工作正常 但连接建立后立即断开 这是我的客户
  • 如果复选框被选中,jquery 突出显示表行

    如果我 单击 一个元素 我知道如何突出显示表格行 但是当我打开页面时 一些复选框已经被选中 我想在页面加载时使用 jquery 突出显示这些行 我给所有的复选框都设置了一类 复选框 这是我到目前为止得到的 document ready fu
  • 使用 jquery 选中和取消选中所有复选框

    我正在使用此脚本来选中和取消选中所有复选框 checkall click function var checked this data checked chkall find checkbox attr checked checked th
  • 利用源映射的堆栈跟踪

    概述 浏览器控制台中的堆栈跟踪输出与调用 Error stack 时返回的跟踪不同 控制台堆栈跟踪似乎考虑了源映射 而 Error stack 堆栈跟踪则没有 控制台输出这是输出到控制台的默认堆栈跟踪 Uncaught TypeError
  • Javascript:如何捕获使用 window.location.href = url 导航到的页面上的错误

    我正在使用 REST 服务生成一个 CSV 文件 我想提示用户下载该文件 该服务的示例如下 https localhost 8444 websvc exportCSV viewId 93282392 为了提示用户下载文件 我使用以下代码 w
  • 矩形描边上的单击事件

    我想仅在矩形的笔划上添加单击事件 并避免在矩形内部单击 下面是代码 var stage new Kinetic Stage container container width 578 height 200 var layer new Kin
  • 如何使用 JavaScript 大致计算网站的连接速度?

    如何使用 JavaScript 大致计算网站的连接速度 我想创建一个像这样的javascript小部件 它将计算打开当前打开页面的速度 我想问是否可以仅使用 javascript 来完成此操作以及想法是什么 Update 请注意 页面大小始
  • React.js 的状态基于其他状态

    我遇到了 React js 的一些问题 并且在调用 setState 时状态没有立即设置 我不确定是否有更好的方法来解决这个问题 或者这是否真的只是 React 的一个缺点 我有两个状态变量 其中一个基于另一个 原始问题的小提琴 http
  • 如何将react-native与php一起使用并获取返回数据始终为空

    我的回报始终为空 我似乎无法让它发挥作用 我如何将react native与php一起使用并获取json 任何人都可以帮忙吗 PHP myArray array myArray lat POST lat myArray lng POST l
  • 如何在javascript中访问请求查询字符串参数?

    我见过许多利用 RegEx 的解决方案 坦率地说 这似乎有些可笑 因为 javascript 是如此通用 必须有一种更简单的方法来访问请求参数 有人可以给我演示一下吗 我发现了一个有用的方法网的深度 http www dotnetbull

随机推荐