2016-03-08 83 views
1

我为javascript功能制作了一个快捷键。我设置S键启动这一点,我这样设定明确的时间间隔功能的Z键,但我m tired about this and when press Z key the Interval doesn牛逼停止:(javascript快捷键/停止间隔功能

var isCtrl = false; 
document.onkeydown=function(e){ 
    if(e.which == 83) { 




var elem = document.elementFromPoint(cursorX,cursorY); 
elem.addEventListener('click', function() { 
    console.log('clicked') 
}, false); 

var support = true; 

try { 
    if (new MouseEvent('click', {bubbles: false}).bubbles !== false) { 
     support = false; 
    } else if (new MouseEvent('click', {bubbles: true}).bubbles !== true) { 
     support = false; 
    } 
} catch (e) { 
    support = false; 
} 

var refreshIntervalId = setInterval(function() { 
    if (support) { 
     var event = new MouseEvent('click'); 
    }else{ 
     var event = document.createEvent('Event'); 
     event.initEvent('click', true, true); 
    } 
    elem.dispatchEvent(event); 
},10); 
var cursorX; 
var cursorY; 
cursorX = 0; cursorY = 0; 
document.onmousemove = function(e){ 
    cursorX = e.clientX; 
    cursorY = e.clientY; 
    elem = document.elementFromPoint(e.clientX, e.clientY); 
} 


if(e.which == 90) { 
clearInterval(refreshIntervalId); 
} 

    } 
} 

帮助我,我想按Z键和间隔停止,但我不能老是。 ..

UPDATE:此代码工作正确使用S键起动和Z键停止功能

var elem = document.elementFromPoint(cursorX,cursorY); 
elem.addEventListener('click', function() { 
    console.log('clicked') 
}, false); 

var support = true; 

try { 
    if (new MouseEvent('click', {bubbles: false}).bubbles !== false) { 
     support = false; 
    } else if (new MouseEvent('click', {bubbles: true}).bubbles !== true) { 
     support = false; 
    } 
} catch (e) { 
    support = false; 
} 


var cursorX; 
var cursorY; 
cursorX = 0; cursorY = 0; 
document.onmousemove = function(e){ 
    cursorX = e.clientX; 
    cursorY = e.clientY; 
    elem = document.elementFromPoint(e.clientX, e.clientY); 
} 



var refreshIntervalId; 
window.addEventListener("onkeydown", keyDown,true); 
window.addEventListener("keydown", keyDown); 

function keyDown() { 
    var e = window.event; 
    switch (e.keyCode) { 
     case 83: 
      start(); 
      break; 
     case 90: 
      stop(); 
      break; 
    } 
} 

function start() { 
    stop(); 
    refreshIntervalId = setInterval(function() { 
    if (support) { 
     var event = new MouseEvent('click'); 
    }else{ 
     var event = document.createEvent('Event'); 
     event.initEvent('click', true, true); 
    } 
    elem.dispatchEvent(event); 
},1000); 
} 

function stop() { 
    if (refreshIntervalId != null) { 
     clearInterval(refreshIntervalId); 
     refreshIntervalId = null; 
    } 
} 

回答

0

你也必须把它的方式代码,以避免启动定时器不止一次。你应该像这样构造它(将函数外的定时器的var移动到函数的外部):

var refreshIntervalId; 
window.addEventListener("onkeydown", keyDown,true); 
window.addEventListener("keydown", keyDown); 

function keyDown() { 
    var e = window.event; 
    switch (e.keyCode) { 
     case 83: 
      start(); 
      break; 
     case 90: 
      stop(); 
      break; 
    } 
} 

function start() { 
    stop(); 
    refreshIntervalId = setInterval(function() { 
     // code... 
    },10); 
} 

function stop() { 
    if (refreshIntervalId != null) { 
     clearInterval(refreshIntervalId); 
     refreshIntervalId = null; 
    } 
} 
+0

你能给我一个完整的代码吗?我改变了我的代码,但没有工作:( –

+0

当然,给我几分钟把它放在一起。 –

+0

其实,它会更好,如果你发布你的更新代码,我可以看看。 –

0

你似乎并没有使事件来听按键

的jQuery:

$(window).keypress(function(e) { 
    if (e.which == 90) { 
     clearInterval(refreshIntervalId); 
    } 
}); 

香草JS:

var keyEvent = function (e) { 
    if (e.which == 90) { 
     clearInterval(refreshIntervalId); 
    } 
}; 
window.addEventListener('keypress', keyEvent);