3

我的 JavaScript 代码如下:

$(document).keydown(function(event){
    var move, inter;
    clearInterval(inter);
    inter = setInterval(move = function() {
        var dir = $(".snake").data('dir');
        var snake = $('.snake');
        var food = $('.food');
        if(dir == 'top') {
            snake.css({"top": $(".snake").position().top + 5 + "px"});
        }
        if(dir == 'bottom') {
            snake.css({"top": $(".snake").position().top - 5 + "px"});
        }
        if(dir == 'left') {
            snake.css({"left": $(".snake").position().left + 5 + "px"});
        }
        if(dir == 'right') {
            snake.css({"left": $(".snake").position().left - 5 + "px"});
        }
    }, 1500);
    if(event.which == 40) {
        $(".snake").data('dir','top');
    } else if(event.which == 39) {
        $(".snake").data('dir','left');           
    } else if(event.which == 37) {
        $(".snake").data('dir','right');        
    } else if(event.which == 38) {
        $(".snake").data('dir','bottom');    
    }; 

});​

http://jsfiddle.net/6bKHc/94/

当我按住其中一个箭头键时,蛇开始移动得更快,我该如何关闭它?你可以自己测试一下。

4

1 回答 1

2

setInterval在你的事件处理程序中被调用。setinterval与共享的 dir 变量一起移到外面。那么你将不需要clearinterval.

var dir = 'bottom';
 setInterval(move = function() {
    var snake = $('.snake');
    var food = $('.food');
    if(dir == 'top') {
        snake.css({"top": $(".snake").position().top + 5 + "px"});
    }
    if(dir == 'bottom') {
        snake.css({"top": $(".snake").position().top - 5 + "px"});
    }
    if(dir == 'left') {
        snake.css({"left": $(".snake").position().left + 5 + "px"});
    }
    if(dir == 'right') {
        snake.css({"left": $(".snake").position().left - 5 + "px"});
    }
}, 150); 
$(document).keydown(function(event){
    if(event.which == 40) {
        dir = 'top';
    } else if(event.which == 39) {
        dir = 'left';           
    } else if(event.which == 37) {
        dir = 'right';        
    } else if(event.which == 38) {
        dir = 'bottom';    
    }; 
});

​http://jsfiddle.net/zatsq/

于 2012-06-22T10:25:48.140 回答