2017-06-27 11 views
1

残念ながらスクロール可能なdivがあります。divのonMouseDownに関連付けられたイベントもあります。Re:スクロールバーのクリックが伝播しないようにする

私の問題は、スクロールバーをクリックしてスクロールしたいとき、それらのイベントが発生するということです。

スクロールバーのマウスイベントが伝播するのを防ぐための方法はありますか?

function myFunction(event, element) { 
    // Your code for div 
    // ... 

    if (event.stopPropagation) { 
     event.stopPropagation(); 
    } else { 
     event.cancelBubble = true; 
    } 
} 

をそして、あなたのdivがこのようなものでなければなりません:

答えて

2

。とにかく私の知る限りではありません。あなたはスクロールバーをクリックすると、カーソルの座標


が、その場合にはあなただけを返すことができ、あなたの要素の幅に等しい:

しかし、1 半まともな解決策がありますイベントハンドラがその処理を行えないようにします。

ここでは、Chrome.v.58/MacOSのスクロールバーの幅を考慮して、ロジックに余分な7ピクセルを追加しました。スクロールバーの幅はブラウザによって決まります。そのため、値に若干の調整が必要な場合があります。

class MyApp extends React.Component { 
 

 
    divMouseDown(e) { 
 
    if((e.clientX + 7) >= e.target.clientWidth) return; 
 
    console.log("do stuff on click"); 
 
    } 
 
    render() { 
 
    return (
 
     <div id="my-div" onMouseDown={this.divMouseDown}> 
 
     <p>foo</p> 
 
     <p>bar</p> 
 
     <p>baz</p> 
 
     </div> 
 
    ); 
 
    } 
 
} 
 

 
ReactDOM.render(<MyApp />, document.getElementById("myApp"));
#my-div { 
 
    background: beige; 
 
    height: 60px; 
 
    overflow: auto; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> 
 
<div id="myApp"></div>

+0

ありがとう、私はそれを試みるつもりです! – noisegrrrl

+0

スクロールバーの幅を考慮するには、いくつかのピクセルを追加する必要があります。スクロールバーの幅はブラウザによって決まるため、若干異なる場合があります。 – Chris

+0

この回答が役に立った場合は、アップ・ボードを検討してください。 – Chris

0

その後、あなたれるonmousedown機能でこれを入れてこれを行う方法があるようには思えない

<div onmousedown="myFunction(event, this);">Click me!</div> 
+0

私は残念ながらありません。 (と私はevent.stopPropagation()を意味すると思います) – noisegrrrl

+0

また、これはReactでイベントを呼び出す方法ではありません。 – Chris

関連する問題