【问题标题】:JavaScript Windows 8 app setInterval() issueJavaScript Windows 8 应用程序 setInterval() 问题
【发布时间】:2013-05-02 05:41:52
【问题描述】:

基本上,我在 MS Visual Studio 2012 中有此代码,用于 Windows 8 JavaScript+jQuery 应用程序。

<script>

    window.setInterval(function () {

        var currentx = $(".ball").css("left");
        var currenty = $(".ball").css("top");


        $(".ball").css("top", currentx + 1);
        $(".ball").css("left", currenty + 1);

        //debug
        var time=1;
        $("p.test").text("Has been called " +time);
        var time=time+1;

    }, 100);

</script>

是的,我使用的是 jQuery 2.0

现在我在这里查看了 API http://www.w3schools.com/js/js_timing.asp 在这里http://api.jquery.com/css/

我的代码可以编译,但它只是没有更新球的位置。看来它只被调用一次。如果它有帮助,球是一个DIV元素。也许windows 8 Apps不完全支持DOM操作,或者只是Window全局变量,我真的不知道。

我需要什么代码来实现我的目标,即按设定的时间间隔更新类球的这个元素的顶部和左侧 CSS 规则?

【问题讨论】:

  • 您使用的是 jQuery 2.0 吗?它是第一个支持 Windows 商店应用程序的 jQuery 版本。
  • 是的,我使用的是 jQuery 2.0
  • 那些 currentx 和 currenty 变量是整数吗?
  • 这是 Javascript,var 可以容纳任何东西。虽然 $(".ball").css("top"); 返回的是什么确实是一个数字,因为我自己测试过。因为它有小数,所以如果这是 Java,我会称它为浮点数或双精度数。
  • 顺便说一句,调试系统将始终打印 1,您应该移动第一个 'var time = 1;'在 window.setInterval -row 之前并替换 'var time=time+1;'随着时间++;

标签: javascript jquery windows-8 visual-studio-2012 setinterval


【解决方案1】:

.css("left").css("top") 返回一个字符串(例如 0px)而不是数字,因此您需要使用 parseInt 解析它,否则 currentx + 1 会导致例如0px1

而且看起来它只被调用一次,因为在setIntervalcallback 中定义了time 并设置为1,你需要在setInterval 的回调之外定义和初始化它。

您也可以考虑使用.position().left,而不是.css("left")

(function() {
    var time=1;
    window.setInterval(function () {

            var currentx = parseInt($(".ball").css("left"),10); 
            var currenty = parseInt($(".ball").css("top"),10);


            $(".ball").css("top", currentx + 1);
            $(".ball").css("left", currenty + 1);

            //debug

            $("p.test").text("Has been called " +time);
            time=time+1;

    }, 100);
})();

【讨论】:

  • 让我试试。谢谢。 10参数对parseInt有什么作用,我很好奇?
  • 成功了!非常感谢。我会给你一个有用的解决方案,但我的代表太低了。
  • 10 是基数(您应该始终定义它以防止意外行为)。这告诉parseInt 函数该字符串应该被解析为decimal。否则,如果你会这样做parseInt('010') 不清楚是否应该将其解析为decimaloctal 阅读此内容以获取更多详细信息:developer.mozilla.org/en-US/docs/JavaScript/Reference/…
  • 很好的信息,谢谢!我看到基数,是在告诉数字系统使用什么基数对吗?
  • 顺便说一句。如果您想做动画,请不要依赖间隔计时器。该值只是说:如果有可能每x 毫秒调用一次回调'。要获得流畅的动画,您总是需要使用调用之间的经过时间来检查对象应该移动多少像素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多