2016-03-08 82 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);