javascript快捷键/停止间隔功能

javascript shortcut key / stop Interval function

本文关键字:功能 快捷键 javascript      更新时间:2023-09-26

我为JavaScript函数做了一个快捷键。 我设置了 S 键来启动它,我设置了 Z 键以清除间隔功能,但我m tired about this and when press Z key the Interval doesn停止:(

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 键和间隔停止,但我不能......

更新:此代码工作正常。 使用 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;
    }
}

您还必须以某种方式对其进行编码,以避免多次启动计时器。你应该像这样构造它(将计时器的 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;
    }
}

您似乎没有做一个事件来收听按键。

j查询:

$(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);