乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      web前端 javascript 兼容低版本 IE 6 7 8復合寫法

       新進小設計 2021-10-10

      1.事件對象

      事件對象:當一個事件發(fā)生的時候,跟這個事件有關的一些信息,保存在一個對象中,這個對象就是事件對象(事件函數(shù)中才有事件對象)

      • IE和谷歌:是全局的event對象

      • 標準瀏覽器:是事件函數(shù)的第一個參數(shù)

      • 兼容:var ev = ev || event;

      var box = document.getElementById('box');
      
      box.onclick = function (ev) {
          // console.log(event); // IE和谷歌
          // console.log(ev); // 標準瀏覽器(IE8及以下不支持)
      
          var ev = ev || event; // 事件對象的兼容
          console.log(ev); // 它是一個對象,它下面就有很多的屬性或方法
      
          console.log(ev.type); // 事件類型
      
          // console.log(ev.target); // 事件源(觸發(fā)這個事件的對象)IE8及以下不支持
          // console.log(ev.srcElement); // 事件源 IE支持
          var target = ev.target || ev.srcElement; // 事件源兼容
          console.log(target);
      
          console.log(ev.clientX, ev.clientY); // 鼠標相對于可視區(qū)的距離
          console.log(ev.pageX, ev.pageY); // 鼠標到文檔的距離(IE8及以下沒有)
      
          console.log(ev.shiftKey); // 事件發(fā)生的時候,是否按下了shift鍵
          console.log(ev.altKey); // 事件發(fā)生的時候,是否按下了alt鍵
          console.log(ev.ctrlKey); // 事件發(fā)生的時候,是否按下了crtl鍵
      }

      2.事件綁定與取消

      1、事件綁定

      • 元素.addEventListener(不加on的事件名, 函數(shù), 是否捕獲);

        • 第三個參數(shù),如果為true,就是捕獲,如果為false,就是冒泡

      • 元素.attachEvent(加on的事件名, 函數(shù));

      // addEventListener標準  和  attachEvent 非標準的區(qū)別:
      1、標準的沒有on,而非標準的有on
      2、標準可以設置捕獲或冒泡,而非標準的只有冒泡
      3、標準的是正序執(zhí)行,而非標準的是倒序執(zhí)行
      4、標準執(zhí)行的函數(shù)中的this是觸發(fā)這個事件的元素,非標準執(zhí)行函數(shù)中的this是window
      
      // -------------------------
      // 封裝一個方法,實現(xiàn)事件綁定的兼容
      // console.log(box.addEventListener); 標準瀏覽器返回函數(shù),而IE8及以下返回undefined
      
      // 參數(shù):元素 事件類型 要執(zhí)行的函數(shù)
      function bind(ele, event, callback) {
          if (ele.addEventListener) {
              // 標準瀏覽器
              ele.addEventListener(event, callback, false);
          } else {
              // 非標準瀏覽器
              ele.attachEvent('on' + event, callback);
          }
      }

      2、取消綁定

      • 元素.removeEventListener(不加on的事件名, 函數(shù), 是否捕獲);

      • 元素.detachEvent(加on的事件名, 函數(shù));

      // 封裝一個方法,實現(xiàn)事件的取消綁定
      function unbind(ele, event, callback) {
          if (ele.removeEventListener) {
              // 標準瀏覽器
              ele.removeEventListener(event, callback, false);
          } else {
              // 非標準瀏覽器
              ele.detachEvent('on' + event, callback);
          }
      }

      3.事件委托

      • 定義:也叫事件代理,就是利用事件冒泡,只指定一個事件處理程序,就可以管理某一類型的所有事件。

      • 事件委托原理:子級的事件,我們加給父級,當子級發(fā)生事件時,會冒泡到父級,我們可以獲取到事件源,通過對事件源的判斷,我們就可以執(zhí)行子級的事件。

      • 事件委托的實現(xiàn):

      <input type="text"><button>添加</button>
      <ul>
          <li>吃飯</li>
          <li class="abc">睡覺</li>
          <li>打豆豆</li>
      </ul>

       

      // 需求:點擊li,給每個li添加一個背景色
      var ul = document.getElementsByTagName('ul')[0];
      var li = ul.getElementsByTagName('li');
      
      // 需求:給ul添加新的li
      var btn = document.getElementsByTagName('button')[0];
      var input = document.getElementsByTagName('input')[0];
      btn.onclick = function () {
          var li = document.createElement('li');
          li.innerHTML = input.value;
          ul.appendChild(li);
      }
      
      // --------------------------------
      // 普通方法,新添加的元素,沒有之前的事件
      // for (var i = 0; i < li.length; i++) {
      //     li[i].onclick = function () {
      //         this.style.backgroundColor = 'red';
      //     }
      // }
      
      
      // ----------------------------
      // 事件代理:事件加給父祖級,通過事件對象,獲取到事件源,對事件源進行判斷,符合要求,再做相應的處理
      // 好處:
      // 1、省略了循環(huán),提高了性能
      // 2、新加的元素,也有之前的事件
      ul.onclick = function (ev) {
          var ev = ev || event;//事件的兼容
          var target = ev.target || ev.srcElement; // 找到事件源
          // console.log(target); 
          // if (target.nodeName === 'LI') {
          //     target.style.backgroundColor = 'green';
          // }
          if (target.className === 'abc') {
              target.style.backgroundColor = 'green';
          }
      }

       

       

      4. 返回檢測屏幕寬度(可視區(qū)域)

       

       1  function client() {
       2    if(window.innerWidth != null)  // ie9 +  最新瀏覽器
       3    {
       4       return {
       5          width: window.innerWidth,
       6          height: window.innerHeight
       7       }
       8    }
       9    else if(document.compatMode === "CSS1Compat")  // 標準瀏覽器
      10    {
      11       return {
      12          width: document.documentElement.clientWidth,
      13          height: document.documentElement.clientHeight
      14       }
      15    }
      16    return {   // 怪異瀏覽器
      17       width: document.body.clientWidth,
      18       height: document.body.clientHeight
      19    }
      20 }

       

      5. 阻止冒泡 

       w3c的方法是event.stopPropagation()        proPagation  傳播  傳遞

       IE則是使用event.cancelBubble = true       bubble   冒泡  泡泡      cancel 取消

       兼容的寫法:

      JQuery 阻止時間冒泡   event.stopPropagation();//已經(jīng)兼容

                                evevt.preventDefault();//阻止瀏覽器默認行為

      function stopPropagation(ev) {
          if (ev.stopPropagation) {
              // 標準瀏覽器
              ev.stopPropagation();
          } else {
              // IE8及以下
              ev.cancelBubble = true;
          }
      }

       

       

      獲取你點擊的事件源e.target==this作用類似event.stopPropagation();阻止冒泡

      1 10  $(".box").on("click",function(e){
      2     if(e.target==this){
      3         alert("父盒子被點擊");
      4     }
      5 
      6 });

      6.獲取用戶選擇的內(nèi)容

      window.getSelection()     標準瀏覽器

      document.selection.createRange().text;      ie 獲得選擇的文字

      兼容性的寫法:

       

      1 if(window.getSelection)
      2 {
      3     txt = window.getSelection().toString();   // 轉(zhuǎn)換為字符串
      4 }
      5 else
      6 {
      7     txt = document.selection.createRange().text;   // ie 的寫法
      8 }

      7. 得到css 樣式  

      我們想要獲得css 的樣式, box.style.left    box.style.backgorundColor

      但是它只能得到   行內(nèi)的樣式。

      但是我們工作最多用的是 內(nèi)嵌式 或者 外鏈式

      怎么辦?

         核心: 我們怎么才能得到內(nèi)嵌或者外鏈的樣式呢?  

       1.   obj.currentStyle   ie  opera  常用

      外部(使用<link>)和內(nèi)嵌(使用<style>)樣式表中的樣式(ieopera

      2 .window.getComputedStyle("元素", "偽類")     w3c

      兩個選項是必須的, 沒有偽類 null 替代

      3 兼容寫法 :

          我們這個元素里面的屬性很多, left  top  width  ===

       我們想要某個屬性, 就應該 返回改屬性,所有繼續(xù)封裝 返回當前樣式的 函數(shù)。

       1 1  var demo = document.getElementById("demo");
       2 2      function getStyle(obj,attr) {  //  誰的      哪個屬性
       3 3          if(obj.currentStyle)  // ie 等
       4 4          {
       5 5              return obj.currentStyle[attr];  
       6 6          }
       7 7          else
       8 8          {
       9 9              return window.getComputedStyle(obj,null)[attr];  // w3c 瀏覽器
      10 10          }
      11 11      }
      12 12      console.log(getStyle(demo,"width"));

       

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多