setCapture、releaseCapture、addEventListener、removeEventListener、滾輪封裝

前言:

只要還有明天,今天就永遠是起跑線

--------------------------------正文---------------------------------

setCapture可以將鼠標事件鎖定指定的元素上,當元素捕獲了鼠標事件后,該事件只能作用在當前元素上
releaseCapture()可以為指定的元素解除事件鎖定

以下情況會導(dǎo)致事件鎖定失?。?/h5>
  1、當窗口失去焦點時,鎖定的事件,自動就會取消
  2、alert也會導(dǎo)致事件的鎖定取消。解決辦法是在alert之后再次鎖定
  3、鼠標右鍵也會導(dǎo)致事件解鎖
setCapture只可以作用于以下事件:
    onclick
    ondblclick
    onmousedown
    onmouseup
    onmouseover
    onmouseout

setCapture不可作用于鍵盤等其它事件,只能作用于鼠標事件
主要用于: onmouseover 與 onmouseout 事件。

addEventListener() 方法用于向指定元素添加事件句柄

EventTarget.addEventListener() 方法將指定的監(jiān)聽器注冊到 EventTarget 上,當該對象觸發(fā)指定的
事件時,指定的回調(diào)函數(shù)就會被執(zhí)行。 事件目標可以是一個文檔上的元素 Document 本身,或者任何其他支持
事件的對象 (比如 XMLHttpRequest)

removeEventListener() 方法用于移除由 addEventListener() 方法添加的事件句柄
通過addEventListener()添加的事件處理程序只能使用removeEventListener()來移除

注意: 如果要移除事件句柄,addEventListener() 的執(zhí)行函數(shù)必須使用外部函數(shù)

格式
 addEventListener("事件名" , "事件處理函數(shù)" , "布爾值")
注意:兩個都要用時函數(shù)不能帶參數(shù),不然不能移除
 eg:
    document.body.addEventListener('touchmove',bodyScroll,false)
    document.body.removeEventListener('touchmove',bodyScroll,false)
使用window.navigator.userAgent屬性判斷瀏覽器類型及版本

滾輪封裝

  //  添加事件監(jiān)聽
  function addEvent(obj,sEv,fn){
      // attachEvent——兼容:IE7、IE8;   不兼容firefox、chrome、IE9、IE10、IE11、safari、opera
      // addEventListener——兼容:firefox、chrome、IE、safari、opera;   不兼容IE7、IE8
      if(obj.addEventListener){
          obj.addEventListener(sEv,fn,false);
      }else{
          obj.attachEvent('on'+sEv,fn);
      }
  }
  // 刪除事件監(jiān)聽
  function removeEvent(obj,sEv,fn){
      if(obj.removeEventListener){
          obj.removeEventListener(sEv,fn,false);
      }else{
          obj.detachEvent('on'+sEv,fn);
      }
  }
  // 滾輪事件
  function addWheel(obj,fn){
      // 判斷瀏覽器是否是Firefox
      // 使用window.navigator.userAgent屬性判斷瀏覽器類型及版本
      if(window.navigator.userAgent.indexOf('Firefox')!=-1){
          addEvent(obj,'DOMMouseScroll',fnWheel);
      }else{
          addEvent(obj,'mousewheel',fnWheel);
      }
      // 滾輪觸發(fā)執(zhí)行函數(shù)
      function fnWheel(ev){
          var oEvent = ev||event;
          // ture     下
          // false    上
          var bDir = true;
          // 判斷滾動方向
          bDir = oEvent.wheelDelta?oEvent.wheelDelta<0:oEvent.detail>0;

          /* if(oEvent.wheelDelta){
              //other
              if(oEvent.wheelDelta<0){
                  bDir = true;
              }else{
                  bDir = false;
              }
          }else{
              //firefox
              if(oEvent.detail>0){
                  bDir = true;
              }else{
                  bDir = false;
              }
          } */
          // 執(zhí)行回調(diào)函數(shù)
          fn&&fn(bDir);
          // 阻止默認事件          addEventListener沒有return false
          ev.preventDefault&&ev.preventDefault();
          return false;
      }
  }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容