JavaScript事件处理兼容性总结

kart 8年前
   <h2>事件监听绑定函数</h2>    <pre>  <code class="language-javascript">// eventType为不含"on"的事件类型  var bind = function(ele, eventType, callback) {      if(ele.addEventListener) {          // W3C标准写法          return ele.addEventListener(eventType, callback, false);      }else if(ele.attachEvent) {          // 兼容IE6~8          return ele.attachEvent(eventType, callback);      }else {          // 兼容IE5-          return ele["on" + eventType] = callback;      }  }  </code></pre>    <h2>事件监听解绑函数</h2>    <pre>  <code class="language-javascript">// eventType为不含"on"的事件类型  var unbind = function(ele, eventType, callback) {      if(ele.removeEventListener) {          // W3C标准写法          return ele.removeEventListener(eventType, callback, false);      }else if(ele.detachEvent) {          // 兼容IE6~8          return ele.detachEvent(eventType, callback);      }else {          // 兼容IE5-          return ele["on" + eventType] = null;      }  }  </code></pre>    <h2>重写window.onload为可多次追加的函数</h2>    <pre>  <code class="language-javascript">var addLoadEvent = function(callback) {      var oldOnLoad = window.onload;      if(type window.onload != "function") {          window.onload = callback;      }else {          window.onload = function() {              if(oldOnLoad) {                  oldOnLoad();              }              callback();          }      }  }  </code></pre>    <h2>获取鼠标点击事件的坐标位置</h2>    <p>screenX: 鼠标位置相对于用户屏幕水平偏移量,参照点也就是原点是屏幕的左上角;</p>    <p>PageX:鼠标在页面上的位置,从页面左上角开始,即是以页面为参考点,不随滑动条移动而变化;</p>    <p>clientX:鼠标在页面上可视区域的位置,从浏览器可视区域左上角开始,即是以浏览器滑动条此刻的滑动到的位置为参考点,随滑动条移动 而变化.</p>    <p>常见的JavaScript获取元素位置的API:</p>    <pre>  <code class="language-javascript">function getPosition(e) {      // 访问事件对象      var e = e || window.event;        // 声明x、y分别为鼠标相对于文档的位置      var x = 0, y = 0;        // 针对W3C标准浏览器具有pageX/Y属性      if(e.pageX) {          x = e.pageX;          y = e.pageY;      }else if(e.clientX) {          // 在IE6~8中不支持pageX,而是用clientX;但clientX只是相对屏幕视口的横坐标,不包含滚动宽度;          var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;          var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;          // pageX = clientX + scrollX          x = e.clientX + scrollLeft;          y = e.clientY + scrollTop;      }      return [x, y];  }  </code></pre>    <h2>取消默认事件发生</h2>    <pre>  <code class="language-javascript">function cancelEvent(event) {      if(event.preventDefault) {          e.preventDefault();      }else {          // 兼容IE6~8          event.returnValue = false;      }  }  </code></pre>    <h2>防止事件在嵌套元素中传播</h2>    <p>有一个元素嵌套在另一个元素中,他们都捕获点击事件。如果想阻止事件传播,可以使用stopPropagation()函数,在IE6~8中则可以使用cancelBubble = boolean来实现。</p>    <pre>  <code class="language-javascript">function stopPropagation(event) {      if(event.stopPropagation) {          event.stopPropagation();      }else {          event.cancelBubble = true;      }  }  </code></pre>    <h2>获取键盘事件</h2>    <pre>  <code class="language-javascript">function keyCode(e) {      // 访问事件对象      var e = e || window.event;      var key = e.keyCode || e.charCode;      return key;  }  </code></pre>    <p>来自:http://www.dengzhr.com/js/366</p>