透過 100 多個技巧學習 Nuxt!

nuxt-viewport
nuxt-viewport

為你的 Nuxt 專案定義自訂視窗範圍

nuxt-viewport

npm versionnpm downloadsLicense

為你的 Nuxt️ 專案定義自訂視窗範圍

功能

  • ⚡️  快速輕巧,使用 MatchMedia API ⚡️
  • 🕶  從 Cookie 和 User-Agent 自動偵測裝置視窗範圍
  • 👌  零設定即可開始
  • 👴️  支援 IE9+

注意
此版本僅適用於 Nuxt 3 和 Nuxt Bridge。對於 Nuxt 2,請參閱 1.0.1

快速設定

  1. nuxt-viewport 依賴項新增至你的專案
npx nuxi@latest module add nuxt-viewport
  1. nuxt-viewport 新增至 nuxt.config.jsmodules 區段
{
  modules: [
    [
      'nuxt-viewport', {
        /* Viewport options */
      }
    ],
  ]
}

使用頂層選項

{
  modules: [
    'nuxt-viewport',
  ],

  viewport: {
    /* Viewport options */
  },
}

用法

<script setup>
import { useNuxtApp } from '#app'
const { $viewport } = useNuxtApp()

watch($viewport.breakpoint, (newBreakpoint, oldBreakpoint) => {
  console.log('Breakpoint updated:', oldBreakpoint, '->', newBreakpoint)
})
</script>

<template>
  <div>
    <div v-if="$viewport.isLessThan('tablet')">Should render only on mobile</div>
    <div v-else>Current breakpoint: {{ $viewport.breakpoint }}</div>
  </div>
</template>

搭配 composable 的用法

<script setup>
const viewport = useViewport()

watch(viewport.breakpoint, (newBreakpoint, oldBreakpoint) => {
  console.log('Breakpoint updated:', oldBreakpoint, '->', newBreakpoint)
})
</script>

<template>
  <div>
    <div v-if="viewport.isLessThan('tablet')">Should render only on mobile</div>
    <div v-else>Current breakpoint: {{ viewport.breakpoint }}</div>
  </div>
</template>

搭配 "@nuxt/bridge" 的用法

<script setup>
const viewport = useViewport()

watch(viewport.breakpoint, (newBreakpoint, oldBreakpoint) => {
  console.log('Breakpoint updated:', oldBreakpoint, '->', newBreakpoint)
})
</script>

<template>
  <div>
    <div v-if="viewport.isLessThan('tablet')">Should render only on mobile</div>
    <div v-else>Current breakpoint: {{ $viewport.breakpoint }}</div>
  </div>
</template>

設定

breakpoints (斷點)

  • 類型:物件

一個物件,其中鍵是視窗範圍的名稱,值是視窗範圍的大小。

  • 類型:物件

一個包含 cookie 選項的物件。請參閱 https://www.npmjs.com/package/cookiejs#cookie-attributes 了解更多資訊

defaultBreakpoints (預設斷點)

  • 類型:物件
  • 可偵測到的裝置:botdesktopmobiletablettv

一個物件,其中鍵是偵測到的裝置名稱,值是斷點鍵。

fallbackBreakpoint (備用斷點)

  • 類型:字串
  • 預設值:viewport

如果未偵測到裝置,則要使用的斷點鍵。

feature (特性)

  • 類型:'minWidth' | 'maxWidth'
  • 預設值:'minWidth'

CSS 媒體特性。

預設設定

{
  // ...
  viewport: {
    breakpoints: {
      desktop: 1024,
      desktopMedium: 1280,
      desktopWide: 1600,

      mobile: 320,
      mobileMedium: 375,
      mobileWide: 425,

      tablet: 768,
    },

    cookie: {
      expires: 365, // 365 days
      name: 'viewport',
      path: '/',
      sameSite: 'Strict',
      secure: true,
    },

    defaultBreakpoints: {
      desktop: 'desktop',
      mobile: 'mobile',
      tablet: 'tablet',
    },

    fallbackBreakpoint: 'desktop',

    feature: 'minWidth',
  },
  // ...
}

Tailwind CSS 的範例設定

{
  // ...
  viewport: {
    breakpoints: {
      xs: 320,
      sm: 640,
      md: 768,
      lg: 1024,
      xl: 1280,
      '2xl': 1536,
    },

    defaultBreakpoints: {
      desktop: 'lg',
      mobile: 'xs',
      tablet: 'md',
    },

    fallbackBreakpoint: 'lg'
  },
  // ...
}

API

viewport.breakpoint

  • 類型:字串

目前的斷點。

viewport.breakpointValue

  • 類型:數字
// Example using defaults.

viewport.breakpointValue('desktop') // Result: 1024.
viewport.breakpointValue('tablet') // Result: 768.
viewport.breakpointValue('mobile') // Result: 320.

viewport.isGreaterThan

  • 類型:布林值
// Example: viewport.breakpoint is "mobile".

viewport.isGreaterThan('mobile') // Result: false.
viewport.isGreaterThan('desktop') // Result: false.

viewport.isGreaterOrEquals

  • 類型:布林值
// Example: viewport.breakpoint is "mobile".

viewport.isGreaterOrEquals('mobile') // Result: true.
viewport.isGreaterOrEquals('desktop') // Result: false.

viewport.isLessThan

  • 類型:布林值
// Example: viewport.breakpoint is "desktop".

viewport.isLessThan('desktopWide') // Result: true.
viewport.isLessThan('mobile') // Result: false.

viewport.isLessOrEquals

  • 類型:布林值
// Example: viewport.breakpoint is "tablet".

viewport.isLessOrEquals('tablet') // Result: true.
viewport.isLessOrEquals('mobile') // Result: false.

viewport.match

  • 類型:布林值
// Example: viewport.breakpoint is "tablet".

viewport.match('tablet') // Result: true.
viewport.match('desktop') // Result: false.

viewport.matches

  • 類型:布林值
// Example: viewport.breakpoint is "mobileWide".

viewport.matches('tablet', 'mobileWide') // Result: true.
viewport.matches('mobile', 'tablet') // Result: false.

viewport.queries

  • 類型:物件

包含產生的媒體查詢的物件。

貢獻

你可以使用 CodeSandBox 在線上為此模組做出貢獻

Edit nuxt-viewport

或在本地

  1. 複製此儲存庫
  2. 使用 yarn installnpm install 安裝依賴項
  3. 使用 yarn devnpm run dev 啟動開發伺服器

許可證

MIT 許可證

版權所有 (c) mvrlin mvrlin@pm.me