ReactJS 中的屏幕方向

IT技术 javascript html css reactjs orientation
2021-05-26 07:06:53

如何在 ReactJS 中获取方向类型和锁定方向?Screen Orientation API 不适用于 ReactJS,或者我只是不知道如何安装和使用它。请指导我做上面的事情。谢谢。

1个回答

您的用例在您的帖子中并不清楚。但是,纯 JavaScript(Window.matchMedia()方法)以及一些 CSS(媒体查询orientation)和用于调整窗口大小的事件侦听器,可以让您获取窗口方向并将其存储在应用程序状态中。

下面的代码演示了这个概念(由于 stacksnippets 的限制,没有实时演示,所以你可以在stackblitz 上尝试一下):

import React, { useState, useEffect } from 'react'
import { render } from 'react-dom'

const rootNode = document.getElementById('root')

const App = () => {
    const isLandscape = () => window.matchMedia('(orientation:landscape)').matches,
          [orientation, setOrientation] = useState(isLandscape() ? 'landscape' : 'portrait'),
          onWindowResize = () => {              
            clearTimeout(window.resizeLag)
            window.resizeLag = setTimeout(() => {
              delete window.resizeLag                       
              setOrientation(isLandscape() ? 'landscape' : 'portrait')
            }, 200)
          }

    useEffect(() => (
      onWindowResize(),
      window.addEventListener('resize', onWindowResize),
      () => window.removeEventListener('resize', onWindowResize)
    ),[])

    return (
      <div>{orientation}</div>
    )
}

render (
  <App />,
  rootNode
)

ps虽然上面是非常可行的,但它可能会在短时间内变得更加全面,因为window.screen.orientation(目前的工作草案)将使其达到标准,另外一个改进似乎很明显(监听orientationchange事件,而不是resize),但前者没有在我看来,桌面版本的应用程序工作得如此顺利