簡體   English   中英

將mousemove()與click事件綁定

[英]bind mousemove() with click event

我想在觸發click事件后重新附加mousemove()。 我使用開/關jQuery來處理此功能。 顯示html元素時,mousemove將關閉。 用戶單擊按鈕時將調用on。 off()可以正常工作,但是單擊按鈕時,我沒有成功重新連接事件。

$(document).ready(function() {
  $(this).mousemove(function(e) {
    console.log("The mouse moved");
  });  
});

function buttonEvents(){
  $('.reset').click(function() {
    modal.hide();
    $(document).on('mousemove');
    console.log('The mouse moved.');
  });
  $('.close').click(function() {
    modal.hide();  
  });

  if($('.photoCnt').css('display') === 'block'){
    $(document).off('mousemove');
  }
}

我厭倦了將mousemove()包裝到一個函數中並調用它,但是它不起作用。

function userActivity(){
  $(this).mousemove(function(e) {
    console.log("The mouse moved");
  });

  function buttonEvents(){
    $('.reset').click(function() {
      modal.hide();
      $(document).on('mousemove', userActivity);
      console.log('The mouse moved.');
    });
    $('.close').click(function() {
      modal.hide();  
    });

    if($('.photoCnt').css('display') === 'block'){
      $(document).off('mousemove', userActivity);
    }
  }
}

什么是完成此功能的正確方法?

如果您發現某些問題不起作用,我的建議是將所需的操作分成較小的功能。 然后,您可以分別測試這些功能,然后將它們組合在一起以達到所需的結果。

例如,我將創建3個函數, addMouseMoveListener()removeMouseMoveListener()onMouseMoveHandler(ev)

function addMouseMoveListener() {
    $(document).on('mousemove', onMouseMoveHandler);
    console.log("addMouseMoveListener() finished");
}

function removeMouseMoveListener() {
    $(document).off('mousemove', onMouseMoveHandler);
    console.log("removeMouseMoveListener() finished");
}

function onMouseMoveHandler(ev) {
    console.log("Mouse moved!", ev);
}

測試完各個功能后,您可以在適當的時間將它們組織到代碼中以進行調用。

$(document).ready(function() {
    // initialize your button event handlers
    // turn on/off mousemove event handlers when desired

    $('.reset').click(function() {
        modal.hide();
        addMouseMoveListener();
    });
    $('.close').click(function() {
        modal.hide();
        removeMouseMoveListener();
    });

});

注意:我省略了用於檢查模式的CSS的代碼。 相反,您可以在隱藏/顯示模式元素的同時添加/刪除mousemove事件處理程序。 您可以忽略此建議,而將CSS檢查代碼放入onMouseMoveHandler(ev)方法中,但是由於mousemove事件往往會頻繁觸發,因此您可能會遇到性能問題。

如果我認為您的想法正確,請更改/撤消clickevents的示例:這是copepen( http://codepen.io/f7o/pen/jrBrWx

加載時:控制台記錄單擊測試鏈接時的鼠標移動:不再跟蹤鼠標移動

如果您使用的是jQuery,請確保在單擊某些按鈕$('#someButton').click(...)調用buttonEvents函數

在您的代碼錯誤中-userActivity是循環回調。 每一個舉動都誕生了新的舉動列表器。 改成:

$(document).ready(function() {
    var userActivity = function() {
        console.log("The mouse moved");
    }
    $(document).on('mousemove', userActivity);
    $('.reset').click(function() {
        modal.hide();
        $(document).on('mousemove', userActivity);
        console.log('The mouse moved.');
    });
    $('.close').click(function() {
        modal.hide();
    });
    if ($('.photoCnt').css('display') === 'block') {
        $(document).off('mousemove', userActivity);
    }
});

希望,它有效:)

.on()函數至少需要兩個參數。 第一個是您要偵聽的事件的名稱,第二個是在觸發事件時應調用的函數。 (請參閱http://api.jquery.com/on/

因此,第一個示例中的$(document).on('mousemove')不會安裝任何事件處理程序。

一種解決方案是命名事件處理程序。

function myEventHandler() {
  document.log("The mouse moved");
}
// ...
$(this).mousemove(myEventHandler);
// ...
$(document).on('mousemove', myEventHandler);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM