越详细越好。。呵呵
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;
}
}
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;
}
}
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
}