マウスの横スクロールバーとマウスのスクロール方向


マウスの横スクロールの考え方
  • マウスのスクロールが縦スクロールバーの動作に影響することを阻止する
  • .
  • スクロールバーに影響を与えるコンテナを見つけるscrollLeftプロパティは
  • です.
  • マウスのローラー方向によって、スクロールバーが左にスクロールするか右にスクロールするかを決定する
  • .
    ケース・インプリメンテーション
    
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Documenttitle>
        <script src="./jquery.min.js">script>
      head>
      <style>
        #son {
          height: 4000px;
          width: 4000px;
        }
    
        #parent {
          position: absolute;
          top: 500px;
          left: 500px;
          border: 1px solid red;
          width: 300px;
          height: 300px;
          overflow: auto;
        }
      style>
      <body>
        
        <div style="padding: 15px;" id="parent">
          <div id="son">div>
        div>
      body>
      <script>
        let son = document.getElementById("son");
        let parent = document.getElementById("parent");
        window.onload = function() {
          let $son = $("#son");
          son.onwheel = function(e) {
            //        (             "         "  )
            e.preventDefault();
            console.log(e);
            // son            ,   scrollLeft    0
            console.log($son.scrollLeft());
            if (e.wheelDelta) {  //     IE,      
                if (e.wheelDelta > 0) { //        
                  //  
                  console.log(parent.scrollLeft);
                  parent.scrollLeft = parent.scrollLeft - 50
                }
                if (e.wheelDelta < 0) { //        
                  //  
                  console.log(parent.scrollLeft);
                  parent.scrollLeft = parent.scrollLeft + 50
                }
            } else if (e.detail) {  //Firefox    
                if (e.detail> 0) { //        
                  //  
                  console.log(parent.scrollLeft);
                  parent.scrollLeft = parent.scrollLeft - 50
                }
                if (e.detail< 0) { //        
                  //  
                  console.log(parent.scrollLeft);
                  parent.scrollLeft = parent.scrollLeft + 50
                }
            }
          }
        }
      script>
    html>
    

    テスト中にscrollLeft属性値が0の場合を理解する
    
    <html lang="en" id="root">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Documenttitle>
        <script src="./jquery.min.js">script>
      head>
      <style>
        #son {
          height: 2000px;
          width: 2000px;
        }
      style>
      <body id="parent">
        <div id="son">div>
      body>
      <script>
        let sonWidget = document.getElementById("son");
        let parent = document.getElementById("parent");
        let root = document.getElementById("root");
        debugger
        window.onload = function() {
          let $son = $("#son");
          sonWidget.onwheel = function(e) {
            //        (             "         "  )
            e.preventDefault();
            console.log(e);
            console.log($son.scrollLeft());
            //    body scrollLeft   ,         ,   0,  body       
            console.log(parent.scrollLeft);
            //             html  ,            ,    document scrollLeft
            console.log($(document).scrollLeft())
            if (e.wheelDelta) {  //     IE,      
                if (e.wheelDelta > 0) { //        
                  //  
                  console.log(root.scrollLeft);
                  root.scrollLeft = root.scrollLeft - 50
                }
                if (e.wheelDelta < 0) { //        
                  //  
                  console.log(root.scrollLeft);
                  root.scrollLeft = root.scrollLeft + 50
                }
            } else if (e.detail) {  //Firefox    
                if (e.detail> 0) { //        
                  //  
                  console.log(root.scrollLeft);
                  root.scrollLeft = root.scrollLeft - 50
                }
                if (e.detail< 0) { //        
                  //  
                  console.log(root.scrollLeft);
                  root.scrollLeft = root.scrollLeft + 50
                }
            }
          };
        };
      script>
    html>
    

    説明説明
  • sonコンポーネントの幅は4000 px
  • である
    したがって、
  • 親容器bodyアセンブリは、布団アセンブリが「開く」ため、親アセンブリの幅も4000 px
  • となる.
  • ブラウザにスクロールバー
  • が表示されました.
  • スクロールバーはウィンドウ全体でbodyではないので、本物のスクロールバーはhtmlでbodyではないので、bodyをクエリーするscrollLeftプロパティは常に0
  • です.
    マウスのスクロール方向を判断する方法
    var scrollFunc = function (e) {  
    	e = e || window.event;  
    	if (e.wheelDelta) {  //     IE,                     
    		if (e.wheelDelta > 0) { //          
    		   //  
    		}  
    		if (e.wheelDelta < 0) { //          
    			//   
    		}  
    	} else if (e.detail) {  //Firefox      
    		if (e.detail> 0) { //          
    		   //   
    		}  
    		if (e.detail< 0) { //          
    			//    
    		}  
    	}  
    	}  
    	//             
    	if (document.addEventListener) {//firefox  
    	document.addEventListener('DOMMouseScroll', scrollFunc, false);  
    }  
    //      scrollFunc    //ie     
    window.onmousewheel = document.onmousewheel = scrollFunc;
    
  • 互換性の問題を考慮する必要がある火狐と非火狐
  • 火狐detail属性に従って、ゼロより大きい場合は上へスクロールし、0より小さい場合は下へスクロール
  • である.
  • 非火狐wheelDeltaプロパティに従って、ゼロより大きい場合は上へスクロールし、0より小さい場合は下へスクロール