【问题标题】:How to synchronize setTimeout and mobile.navigate using jQuery Mobile?如何使用 jQuery Mobile 同步 setTimeout 和 mobile.navigate?
【发布时间】:2014-06-11 10:13:58
【问题描述】:

我正在使用 jQuery Mobile 创建一个小测验、移动应用程序,并且在某些点上显示一个 3 秒的 GIF。虽然,因为它显示了很多次,我不想每次都打扰用户,如果他/她点击页面上的任何地方都会转到下一页,但我也设置了一个 setTimeout,它等待三秒钟,GIF 的意思完全显示,然后移动到下一页。如您所见,这会造成问题。如果我单击 GIF,它会移动到下一页,然后如果我再次移动到另一页,经过 3 秒后,由于 setTimeout,它会将我发送回上一页。我有以下代码:

编辑:

$(document).on("pagechange", function(event, ui) {
    var clicked = false;
    // Here comes some if-else statements checking which page is currently active
   else if ($.mobile.activePage[0].id == "correctGIF") {
        correct++;
        nextpage = hashtag.concat(page, 'Correct');

    $('#correctGIF').append('<img src="images/Correct1.gif">');
        $('#correctGIF').click(function() {
            clicked = true;
            $.mobile.navigate(nextpage);
            alert("alert from click");
        });

        setTimeout(function() {
            if (!clicked) {
                $.mobile.navigate(nextpage);
               alert("alert from timeout");
            }
        }, 3000);
    }

所以,我需要以某种方式同步它。如果有点击它应该忽略 setTimeout 部分,如果没有点击它应该等待三秒钟让 GIF 完成,这意味着应该激活 setTimeout 部分。另请注意,此 GIF 在测验期间会显示多次,而不仅仅是一次。对此有何想法?

【问题讨论】:

  • 请查看更新后的答案@ett
  • @Floradu88 好像有问题。我在下面的评论中解释了它。

标签: javascript jquery html jquery-mobile mobile


【解决方案1】:

您是否尝试过这种方法:

$(document).ready(function () {
    $('#correctGIF').off('click').on('click', function () {
        alert('navigate from click');
        console.log('navigate from click');
        if (!$('#correctGIF').hasClass('clickedImageClass')) {
            $('#correctGIF').addClass('clickedImageClass');
        }
    });

    setTimeout(function () {
        if (!$('#correctGIF').hasClass('clickedImageClass')) {
            alert('navigate from timeout');
            console.log('navigate from timeout');
        }
    }, 3000);
});

JsFiddle 演示在这里:http://jsfiddle.net/e35pn/13/

【讨论】:

  • 我认为应该是if (!clicked)(或者如果我错了就用if (clicked),比较布尔值与真假有点……没必要;)
  • 或者如果你想避免全局变量,你可以在元素上设置一个类并检查它。
  • @Floradu88 对我来说似乎有些问题。对于第一个正确答案,它工作正常。但在每个正确答案之后,它会再显示一次警报。例如,对于第 4 个正确答案,当它显示 GIF 时,如果您按下它移动到下一页,它会显示 4 次警报。
  • 是的,你应该在“nextpage”中定义的页面中声明变量
  • @Floradu88 我已经将点击移动到页面更改之外。还定义了一些其他全局变量,例如 nextpage 等。虽然我没有理解“在“nextpage”中定义的页面中声明变量”的意思。
猜你喜欢
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 2011-05-06
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多