1. onmousewheel 火狐不支持此事件

  1. -->鼠标滚动时触发
  2. 在火狐中需要使用DOMMouseScroll来绑定滚动事件,该事件需通过addEventListeber()函数来绑定

2. 事件对象.wheelDelta 火狐不支持

  1. -->可以获取鼠标滚轮滚动的方向,向上滚是正值,向下滚是负值
  2. 在火狐中用detail(往下滚是正值,往上滚是负值)
  1. <style>
  2. #box {
  3. height: 100px;
  4. width: 100px;
  5. background-color: pink;
  6. }
  7. </style>
  8. <div id="box"></div>
  9. <script>
  10. let box = document.getElementById('box');
  11. box.onmousewheel = function (event) {
  12. event = event || window.event;
  13. // wheelDelta可以获取鼠标滚动的方向,正值表示向上滚,负值表示向下滚
  14. // detail是给火狐准备的
  15. if (event.wheelDelta > 0 || event.detail < 0) {
  16. box.style.height = box.clientHeight - 100 + 'px';
  17. } else {
  18. box.style.height = box.clientHeight + 100 + 'px';
  19. }
  20. // 取消浏览器的默认滚动行为
  21. /* 使用addEventListener()方法绑定响应函数,取消默认行为时不能使用
  22. return ,需要使用事件对象来取消默认行为,但是IE不支持,所以需要判断
  23. */
  24. event.preventDefault || event.preventDefault()
  25. return false
  26. }
  27. // 火狐不支持上面的事件,需用DOMMouseScroll并结合addEventListener使用
  28. bind(box, 'DOMMouseScroll', box.onmousewheel)
  29. function bind(obj, eventStr, callback) {
  30. if (obj.addEventListener) {
  31. // IE9及以上还有其它浏览器
  32. obj.addEventListener(eventStr, callback, false)
  33. } else {
  34. // this是谁由调用方式决定
  35. // callback.call(obj)
  36. // IE8及以下
  37. obj.attachEvent('on' + eventStr, function () {
  38. callback.call(obj)
  39. })
  40. }
  41. }
  42. </script>