⛷️

スクロールバーの上かどうか

2024/03/01に公開

HTML要素のポインター系のイベントをハンドリングするとき、そのポインターがそのHTML要素のスクロールバーの上にあるかどうかはtargetclientWidth, clientHeightoffsetX, offsetYを使うとわかります。

<div style="margin: 100px; width: 100px; height: 100px; background-color: pink; overflow: scroll;" onpointerdown="handlePointerDown(event)"></div>
<script>
  function onScrollbar(event) {
    if (event.target instanceof Element) {
      const { clientWidth, clientHeight } = event.target
      const { offsetX, offsetY } = event
      if (clientWidth < offsetX || clientHeight < offsetY) {
        return true
      }
    }

    return false
  }

  function handlePointerDown(event) {
    if (onScrollbar(event)) {
      console.log('On scrollbar')
    }
    else {
      console.log('Not on scrollbar')
    }
  }
</script>

Discussion