原生javascript鼠標滾輪滾動放大縮小效果

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <style>
      * {margin: 0;padding: 0;}
      #box {height: 200px;width: 200px;background: red;margin-top: 200px;margin-left: 200px;}
    </style>
    <title>原生javascript鼠標滾輪滾動放大縮小效果</title>
  </head>
  <body style="height:1000px;">
    <div id="box" style="transform: scale(1);">放大縮小box</div>
  </body>
  <script>
    let step = 0.01;
    let INNER = false;
    function $(select) {
      return document.querySelector(select);
    }
    // 鼠標相對頁面的位置
    function getMousePos(event) {
      let e = event || window.event;
      let scrollX =
        document.documentElement.scrollLeft || document.body.scrollLeft;
      let scrollY =
        document.documentElement.scrollTop || document.body.scrollTop;
      let x = e.pageX || e.clientX + scrollX;
      let y = e.pageY || e.clientY + scrollY;
      //alert('x: ' + x + '\ny: ' + y);
      return { x: x, y: y };
    }
    function getElementPosition(select) {
      let dom = document.querySelector(select);
      let scrollX =
        document.documentElement.scrollLeft || document.body.scrollLeft;
      let scrollY =
        document.documentElement.scrollTop || document.body.scrollTop;
      let rect = dom.getBoundingClientRect();
      let x = scrollX + dom.getBoundingClientRect().left;
      let y = scrollY + dom.getBoundingClientRect().top;
      let height = dom.getBoundingClientRect().height;
      let width = dom.getBoundingClientRect().width;
      return { x: x, y: y, height: height, width: width };
    }
    function mouseIndom(event) {
      let mouseMsg = getMousePos(event);
      let domMsg = getElementPosition('#box');
      let flagX = mouseMsg.x > domMsg.x && mouseMsg.x < domMsg.x + domMsg.width;
      let flagY =
        mouseMsg.y > domMsg.y && mouseMsg.y < domMsg.y + domMsg.height;
      if (flagX && flagY) {
        console.log('鼠標位於元素裏面啦!');
        return true;
      } else {
        console.log('鼠標位於元素外面拉!');
        return false;
      }
    }
    // 文檔鼠標移動
    document.onmousemove = function(event) {
      INNER = mouseIndom(event);
      console.log(INNER);
    };
    if (window.addEventListener)
      //FF,火狐瀏覽器會識別該方法
      window.addEventListener('DOMMouseScroll', wheel, false);
    window.onmousewheel = document.onmousewheel = wheel; //W3C
    //統一處理滾輪滾動事件
    function wheel(event) {
      var delta = 0;
      if (!event) event = window.event;
      if (event.wheelDelta) {
        //IE、chrome瀏覽器使用的是wheelDelta,並且值爲“正負120”
        delta = event.wheelDelta / 120;
        if (window.opera) delta = -delta; //因爲IE、chrome等向下滾動是負值,FF是正值,爲了處理一致性,在此取反處理
      } else if (event.detail) {
        //FF瀏覽器使用的是detail,其值爲“正負3”
        delta = -event.detail / 3;
      }
      if (delta) handle(delta, event);
    }
    //上下滾動時的具體處理函數
    function handle(delta, event) {
      if (INNER) {
        if (delta < 0) {
          //向下滾動
          console.log('向下滾動');
          let scale =
            Number.parseFloat($('#box').style.transform.replace('scale(', '')) +
            step;
          $('#box').style.webkitTransform = 'scale(' + scale + ')';
          $('#box').innerText = '縮小了' + scale;
        } else {
          //向上滾動
          console.log('向下滾動');
          let scale =
            Number.parseFloat($('#box').style.transform.replace('scale(', '')) -
            step;
          $('#box').style.webkitTransform = 'scale(' + scale + ')';
          $('#box').innerText = '放大了' + scale;
        }
        event.preventDefault();
        event.stopPropagation();
        return;
      }
    }
  </script>
</html>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章