越详细越好。。呵呵
var keyCache = [];
var isCache = false;
var cacheNum = 0;document.onkeydown = insertKey;
document.onkeyup = function(){if(!isCache && event.keyCode>=37&& event.keyCode<=40) keyCache.length = 0;}function insertKey(){
        var kc = event.keyCode;
        if(kc>=37 && kc<=40){
                if(kc!=keyCache[keyCache.length-1]){
                        keyCache.length = 0;
                        keyCache.push(kc,kc,kc,kc,kc,kc)   //保证流畅多注入6个
                        isCache = true;
                }
                keyCache.push(kc);
        }
}window.setInterval("writeCache()", 50);function writeCache(){
        if(keyCache.length==0) return;        var kc = keyCache.shift();        switch(kc){
                case 37: man.style.left = parseInt(man.style.left) - 5;break;
                case 38: man.style.top = parseInt(man.style.top) - 5;break;
                case 39: man.style.left = parseInt(man.style.left) + 5;break;
                case 40: man.style.top = parseInt(man.style.top) + 5;break;
        }        if(isCache) cacheNum++;
        if(cacheNum == 5){
                isCache = false;
                cacheNum = 0;
        }
}

解决方案 »

  1.   

    var keyCache = [];   //缓存的键
    var isCache = false; //是否缓存
    var cacheNum = 0;    //缓存个数document.onkeydown = insertKey;  //键盘按下的时候执行 insertKey 方法
    document.onkeyup = function(){if(!isCache && event.keyCode>=37&& event.keyCode<=40) keyCache.length = 0;}
    //键盘弹起的时候 判断缓存和按下的键 符合条件清除缓存键的数组function insertKey(){
            var kc = event.keyCode;//记住触发的键
            if(kc>=37 && kc<=40){//如果是 上、下、左、右 时执行
                    if(kc!=keyCache[keyCache.length-1]){//当前按下的键 是否是缓存键数组的最后项
                            keyCache.length = 0; //清空数组
                            keyCache.push(kc,kc,kc,kc,kc,kc)   //保证流畅多注入6个
                                //将当前键缓存
                            isCache = true;//将缓存标记 设置为true;
                    }
                    keyCache.push(kc);//将当前键缓存
            }
    }window.setInterval("writeCache()", 50);//设置每50毫秒 执行一次writeCache方法function writeCache(){
            if(keyCache.length==0) return;//判断缓存键的数组是否为空 ,为空就返回        var kc = keyCache.shift();//shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。             switch(kc){
                    case 37: man.style.left = parseInt(man.style.left) - 5;break;
                    case 38: man.style.top = parseInt(man.style.top) - 5;break;
                    case 39: man.style.left = parseInt(man.style.left) + 5;break;
                    case 40: man.style.top = parseInt(man.style.top) + 5;break;
            }
            //判断kc 是那个键,并执行相应操作
            if(isCache) cacheNum++;//如果缓存标记为true 让缓存个数自增
            if(cacheNum == 5){
                    isCache = false;
                    cacheNum = 0;
            }
            //缓存5个时  清除缓存标记 并将缓存个数归0
    }