useLayoutToLeft.tsx 756 B

1234567891011121314151617181920212223242526272829303132
  1. import { useState, useEffect } from 'react'
  2. function useLayoutToLeft(querySelector: string) {
  3. const [layoutToLeft, setLayoutToLeft] = useState(false)
  4. useEffect(() => {
  5. if (!('ResizeObserver' in window)) return
  6. const target = document.querySelector(querySelector)
  7. if (!target) return
  8. const handleResize = () => {
  9. const docWidth = document.documentElement.clientWidth
  10. const { right: rightEdge } = target.getBoundingClientRect()
  11. setLayoutToLeft(docWidth - rightEdge < 225)
  12. }
  13. handleResize()
  14. const observer = new ResizeObserver(handleResize)
  15. observer.observe(target)
  16. return () => {
  17. observer.disconnect()
  18. }
  19. }, [querySelector])
  20. return layoutToLeft
  21. }
  22. export default useLayoutToLeft