WinRT动画中的Javascript暂停

WinRT动画中的Javascript暂停,javascript,windows-8,windows-runtime,Javascript,Windows 8,Windows Runtime,我想暂停javascript中的执行,这样我就可以在屏幕上设置文本外观的动画。我的代码当前为: function AnimateWord(word) { for (var i = 0; i <= word.length; i++) { myTest.textContent += word.charAt(i); // need to pause here and then continue } } 但这似乎并没有真正暂停。实际上,它似乎完全忽

我想暂停javascript中的执行,这样我就可以在屏幕上设置文本外观的动画。我的代码当前为:

function AnimateWord(word) {
    for (var i = 0; i <= word.length; i++) {
        myTest.textContent += word.charAt(i);
        // need to pause here and then continue
    }
}
但这似乎并没有真正暂停。实际上,它似乎完全忽略了超时。我也试过:

setTimeout(TypeLetter(word.charAt(i)), 1000);

结果基本相同。似乎暗示它应该等待,然后执行任务。我对WinJS很陌生,但我将承诺等同于C#中的
wait
关键字。

设置超时/setIngerval/requestAnimationFrame几乎是您唯一的选择。我不会把它们称为递归函数,而你会一遍又一遍地调用同一个函数。calls tack是完全独立的


你到底想创作什么样的动画?在使用CSS动画时,最好为每个角色创建一个跨度,将其隐藏,然后淡入/转换。这是否符合您的要求:

var array1 = [];
function AnimateWord(word) {
    var test = $('#test');            
    for (var i = 0; i <= word.length; i++) {
        array1.push(word.charAt(i));
        test.delay(100).queue(function() {
            this.innerHTML += array1[0];
            array1.splice(0, 1);
            $(this).dequeue();
        });
    }
}
var数组1=[];
函数AnimateWord(word){
var测试=$('测试');
对于(var i=0;i

使用CSS的演示不起作用,因为显示的内容可能会在显示过程中被删除。我尝试创建的效果有点像你在电影中看到的代码或密码被揭开的情况——因此你会看到它在字母和数字中运行,直到找到正确的一个并显示出来。我不确定你是否应该排除CSS。在JavaScript中,您不仅可以操作元素上有效应用或取消应用(新单词!)动画的类,还可以操作有效的样式规则。仅供参考,循环
WinJS.Promise.timeout(1000)。然后(…)
一次创建一组承诺,所有承诺在循环完成后一秒钟执行。另外,
setTimeout(TypeLetter(word.charAt(i)),1000)除非
TypeLetter
返回一个函数,否则
是不正确的。在这里,
TypeLetter
立即执行,
TypeLetter
的结果作为第一个参数传递给
setTimeout
。相反,您可以将调用封装在一个匿名函数中:
setTimeout(function(){…},1000)
您调用
TypeLetter
太快了。您的意思是
WinJS.Promise.timeout(1000)。然后(TypeLetter.bind(null,word.charAt(i))
setTimeout(TypeLetter.bind(null,word.charAt(i)),1000)
var array1 = [];
function AnimateWord(word) {
    var test = $('#test');            
    for (var i = 0; i <= word.length; i++) {
        array1.push(word.charAt(i));
        test.delay(100).queue(function() {
            this.innerHTML += array1[0];
            array1.splice(0, 1);
            $(this).dequeue();
        });
    }
}
var i = 0;
var str = "plz send teh codez";
var intervalId = setInterval(function(){
    myTest.textContent += str.charAt(i);
    if (++i >= str.length)
        clearInterval(intervalId);
}, 1000);