为您的 Nuxt️ 项目定义自定义视口
注意
此版本仅适用于 Nuxt 3 和 Nuxt Bridge。对于 Nuxt 2,请参阅 1.0.1
nuxt-viewport 依赖项添加到您的项目npx nuxi@latest module add nuxt-viewport
nuxt-viewport 添加到 nuxt.config.js 的 modules 部分{
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>
<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>
<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>
断点一个对象,其中键是视口的名称,值是视口大小。
cookie一个包含 cookie 选项的对象。详见 https://npmjs.net.cn/package/cookiejs#cookie-attributes
defaultBreakpointsbot, desktop, mobile, tablet, tv一个对象,其中键是检测到的设备名称,值是断点键。
fallbackBreakpointviewport如果未检测到设备,则使用的断点键。
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',
},
// ...
}
{
// ...
viewport: {
breakpoints: {
xs: 320,
sm: 640,
md: 768,
lg: 1024,
xl: 1280,
'2xl': 1536,
},
defaultBreakpoints: {
desktop: 'lg',
mobile: 'xs',
tablet: 'md',
},
fallbackBreakpoint: 'lg'
},
// ...
}
您可以使用 definePageMeta 覆盖特定页面的全局配置。
<script setup>
definePageMeta({
viewport: {
breakpoints: {
desktop: 1024,
mobile: 320,
tablet: 768
},
cookie: {
name: 'viewport-per-page'
}
// Other fields will be inherited from the global configuration
}
})
</script>
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 在线为该模块贡献代码
或在本地
yarn install 或 npm install 安装依赖项yarn dev 或 npm run dev 启动开发服务器版权所有 (c) mvrlin [email protected]