【问题标题】:JavaScript execute until keypressJavaScript 执行直到按键
【发布时间】:2011-01-20 04:40:54
【问题描述】:

我想执行一个循环/动作,直到按下一个键并按下我想停止该动作并调用函数getKey。任何人都可以建议如何做到这一点?

function getKey(e) 
{
    var pressedKey;
    if (document.all)   { e = window.event; }
    if (document.layers || e.which) { pressedKey = e.which; }
    pressedCharacter = String.fromCharCode(pressedKey).toLowerCase();
    move(pressedCharacter);

}

document.onkeypress = getKey;

我希望 move() 函数连续执行,直到没有按下某个键。如果它被按下,我想用新按下的字符重新执行 move() 函数

【问题讨论】:

    标签: javascript


    【解决方案1】:

    取决于你如何循环。最简单的方法是使用interval

    var interval = window.setInterval(function () {
        // do your thing, do your thing
    }, 1000);
    
    document.onkeypress = function () {
        if (/* some specific character was pressed */) {
            window.clearInterval(interval);
    
            // do some other thing, other thing
        }
    };
    

    【讨论】:

    • 1000 是第二个或毫秒,但我希望它永远执行,直到没有按下一个字符(ps:移动函数具有/设置一个名为 end 的全局变量,它在我停止循环)这个循环可以执行的最大值是 50(一个已知的固定值)
    • @Web 对不起,什么? “直到一个字符没有被按下?”换句话说,当用户按住一个键时,你想要发生一些事情吗?
    • 我希望循环不停地执行,但是如果用户按下了一个字符,那么我希望它停止执行 eloop
    • @Web 这正是它的作用。不过,我添加了一些说明性代码来检查特定字符,希望您能理解。您不能简单地编写一个forwhile 循环,这将冻结浏览器。您需要每隔一段时间将控制权返回给浏览器,并使用间隔或超时安排循环的下一次迭代!如果需要,您可以将超时时间缩短到 1000(1 秒)以下。
    • @deceze 你能举个例子说明在/* some specific character was pressed */里面放什么吗?
    【解决方案2】:

    使用http://www.asquare.net/javascript/tests/KeyCode.html 查找键码

    <script>
    document.onkeyup = getKey;       
    
    function getKey() {
        // If the users hits 'a', stop loopcode from running.
        if(event.keyCode == 65){
            window.clearInterval(interval);
        };
    }
    
    var interval = setInterval(function() {
        // loopcode here
    }, 1000);
    
    </script>
    

    【讨论】:

    • while 循环很可能只会使浏览器无响应,甚至可能不会使其处理按键。
    • 奇怪的是,测试一下,每一秒都会遇到一个断点。 耸耸肩
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 2022-10-06
    • 2023-04-05
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多