简体   繁体   English

事件触发时的JavaScript激活功能

[英]Javascript activating function on event fire

I wrote some Javascript functions based on event like click ecc. 我根据诸如click ecc之类的事件编写了一些Javascript函数。 .

This first part of code below is for a particular task1: 下面的第一部分代码用于特定任务1:

document.addEventListener('click', onDocumentMouseClick, false);

function onDocumentMouseClick(event) {/*  some code   */}

and this code below is for task2,the three functions (onDocumentMouseMove,onDocumentMouseDown,onDocumentMouseUp) work together: 并且下面的代码是针对task2的,三个函数(onDocumentMouseMove,onDocumentMouseDown,onDocumentMouseUp)一起工作:

document.addEventListener( 'mousemove', onDocumentMouseMove, false );
document.addEventListener( 'mousedown', onDocumentMouseDown, false );
document.addEventListener( 'mouseup', onDocumentMouseUp, false );

 function onDocumentMouseMove(event) {/*  some code   */}
 function onDocumentMouseDown(event) {/*  some code   */}
 function onDocumentMouseUp(event) {/*  some code   */}

Now my issue is: I need to activate separately the two task functions by a button, for example if I click on button1 I activate function for task1 and if I click on button2 I activate functions for task2. 现在我的问题是:我需要通过一个按钮分别激活两个任务功能,例如,如果我单击button1,则激活任务1的功能,如果我单击button2,则激活任务2的功能。

Just use a simple flag... 只需使用一个简单的标志...

var Mode = 1;

function onDocumentMouseClick(event) {
    if(Mode==1){
        /*  some code   */
    }
}

function onDocumentMouseMove(event) {
    if(Mode==2){
        /*  some code   */
    }
}
function onDocumentMouseDown(event) {
    if(Mode==2){
        /*  some code   */
    }
}
function onDocumentMouseUp(event) {
    if(Mode==2){
        /*  some code   */
    }
}

function Button1_Click(){
    Mode=1;
}
function Button2_Click(){
    Mode=2;
}

METHOD 2: 方法2:

function Button1_Click(){
    document.removeEventListener( 'mousemove', onDocumentMouseMove, false );
    document.removeEventListener( 'mousedown', onDocumentMouseDown, false );
    document.removeEventListener( 'mouseup', onDocumentMouseUp, false );
    document.addEventListener('click', onDocumentMouseClick, false);
}
function Button2_Click(){
    document.removeEventListener('click', onDocumentMouseClick, false);
    document.addEventListener( 'mousemove', onDocumentMouseMove, false );
    document.addEventListener( 'mousedown', onDocumentMouseDown, false );
    document.addEventListener( 'mouseup', onDocumentMouseUp, false );
}

Your buttons can call the same functions that you're setting as the event listeners. 您的按钮可以调用与事件侦听器相同的功能。 The quick and dirty way would be to write onclick="onDocumentMouseClick()" into the button tag for button1 and onclick="onDocumentMouseMove();onDocumentMouseDown();onDocumentMouseUp()" for button2. 快速而肮脏的方法是将onclick="onDocumentMouseClick()"写入button1的button标记中,并将onclick="onDocumentMouseMove();onDocumentMouseDown();onDocumentMouseUp()"

However, it would be cleaner to write a separate function for each button. 但是,为每个按钮编写一个单独的函数会更清洁。 Then if the task definitions change, you only have to update the functions instead of editing your HTML. 然后,如果任务定义发生更改,则只需更新功能即可,而无需编辑HTML。 This approach is demonstrated in the code snippet below. 下面的代码段中演示了这种方法。

Note that when you click on a button, you're causing mouse-down, mouse-up, and mouse-click events to be fired in addition to the calls that you make in the task function. 请注意,单击按钮时,除了在任务功能中进行的调用之外,还会触发鼠标按下,鼠标按下和鼠标单击事件。 Thus, you'll see event handlers being called several times per button click. 因此,您将看到每次按钮单击都会多次调用事件处理程序。 To determine whether an event handler was fired by an event or called by a task function, you can check the value of the event parameter, as demonstrated below. 要确定事件处理程序是由事件触发还是由任务函数调用,您可以检查event参数的值,如下所示。

 var messageCounter = 0; function message(text) { messageCounter += 1; document.getElementById('messages').innerHTML = '<b>'+messageCounter+'</b> ' + text + '<br />' + document.getElementById('messages').innerHTML; } document.addEventListener('click', onDocumentMouseClick, false); function onDocumentMouseClick(event) { message('onDocumentMouseClick (' + (event === undefined ? '<b>TASK</b>' : 'event')+')'); } // The code below is for task2; these three functions work together. document.addEventListener( 'mousemove', onDocumentMouseMove, false ); document.addEventListener( 'mousedown', onDocumentMouseDown, false ); document.addEventListener( 'mouseup', onDocumentMouseUp, false ); function onDocumentMouseMove(event) { message('onDocumentMouseMove (' + (event === undefined ? '<b>TASK</b>' : 'event')+')'); } function onDocumentMouseDown(event) { message('onDocumentMouseDown (' + (event === undefined ? '<b>TASK</b>' : 'event')+')'); } function onDocumentMouseUp(event) { message('onDocumentMouseUp (' + (event === undefined ? '<b>TASK</b>' : 'event')+')'); } function button1() { onDocumentMouseClick(); } function button2() { onDocumentMouseMove(); onDocumentMouseDown(); onDocumentMouseUp(); } 
 <button onclick="button1()">button 1</button> <button onclick="button2()">button 2</button> <div id="messages"></div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM