device.js 988 B

123456789101112131415161718192021222324252627
  1. // 设备适配工具:支持移动端展示
  2. const MOBILE_BREAKPOINT = 768
  3. /** 根据视口宽度判断是否移动端 */
  4. export function isMobileDevice() {
  5. if (typeof window === 'undefined') return false
  6. return window.innerWidth <= MOBILE_BREAKPOINT
  7. }
  8. /**
  9. * 当前展示端(pc / mobile)——只由真实视口宽度决定。
  10. * 说明:不读取 localStorage,避免"以前点过手机端被记住、之后在 PC 上一直被当作移动端"的坑。
  11. * 右上角手动切换为"本次会话内预览",刷新/重进后恢复按窗口宽度自动判断。
  12. */
  13. // 本会话内的手动覆盖(内存态,刷新即失效)
  14. let manualMode = null
  15. export function getDeviceMode() {
  16. if (manualMode === 'pc' || manualMode === 'mobile') return manualMode
  17. return isMobileDevice() ? 'mobile' : 'pc'
  18. }
  19. export function setDeviceMode(mode) {
  20. manualMode = mode
  21. // 通知各子应用端切换
  22. window.dispatchEvent(new CustomEvent('mf-device-change', { detail: mode }))
  23. }