PageMarquee专业版

一个用于创建无限滚动内容的组件。

用法

通过 PageMarquee 组件,您可以创建内容的无限滚动动画。非常适合以引人入胜的方式展示徽标、推荐语或任何重复内容。

<template>
  <UPageMarquee>
    <UIcon name="i-simple-icons-github" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-discord" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-x" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-instagram" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-linkedin" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-facebook" class="size-10 shrink-0" />
  </UPageMarquee>
</template>

悬停暂停

使用 pause-on-hover prop 可以让用户将鼠标悬停在内容上时暂停动画。

<template>
  <UPageMarquee pause-on-hover>
    <UIcon name="i-simple-icons-github" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-discord" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-x" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-instagram" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-linkedin" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-facebook" class="size-10 shrink-0" />
  </UPageMarquee>
</template>

反向

使用 reverse prop 可以反转动画方向。

<template>
  <UPageMarquee reverse>
    <UIcon name="i-simple-icons-github" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-discord" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-x" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-instagram" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-linkedin" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-facebook" class="size-10 shrink-0" />
  </UPageMarquee>
</template>

方向

使用 orientation prop 可以更改滚动方向。

<template>
  <UPageMarquee orientation="vertical">
    <UIcon name="i-simple-icons-github" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-discord" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-x" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-instagram" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-linkedin" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-facebook" class="size-10 shrink-0" />
  </UPageMarquee>
</template>

重复次数

使用 repeat prop 可以指定内容在动画中应重复的次数。

<template>
  <UPageMarquee :repeat="6">
    <UIcon name="i-simple-icons-github" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-discord" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-x" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-instagram" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-linkedin" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-facebook" class="size-10 shrink-0" />
  </UPageMarquee>
</template>

叠加层

使用 overlay prop 可以移除 marquee 边缘的渐变叠加层。

<template>
  <UPageMarquee :overlay="false">
    <UIcon name="i-simple-icons-github" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-discord" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-x" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-instagram" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-linkedin" class="size-10 shrink-0" />
    <UIcon name="i-simple-icons-facebook" class="size-10 shrink-0" />
  </UPageMarquee>
</template>

示例

推荐语

使用 PageMarquee 组件可以为您的推荐语创建无限滚动动画。

我们之前使用 SaaS 服务搭建文档网站,但感觉不够满意。我们决定自己投入精力,使用 UI Pro 来完成。结果不仅我们的网站受到了潜在客户的称赞,他们甚至还想了解我们的平台。
Anthony Bettini

Anthony Bettini

VulnCheck 首席执行官兼创始人

哇,Nuxt UI Pro 彻底改变了游戏规则!它提供的组件质量、对细节的关注以及惊人的多样性让我印象深刻。对于任何开发者来说,这就像中了头奖。我省去了无数本该用来纠结于如何让应用看起来漂亮、拥有出色无障碍 UX 的时间,而是能够专注于真正重要的事情——构建应用本身。对我来说,这是一款每次都会毫不犹豫购买的产品!
Yaz Jallad

Yaz Jallad

Ninjaparade Digital 创始人

Nuxt UI Pro 节省了数百小时的开发和设计时间,同时在任何设备上都能呈现出简洁专业的界面。
Kevin Olson

Kevin Olson

Fume.app 创始人

我决定用一个组件库替换我自定义构建的组件,并选择了 Nuxt UI Pro。只花了我几个小时,新的 UI 看起来更加专业。集成这个库非常简单;组件文档齐全且高度可定制。我强烈推荐它;这个库是我开发新 SaaS 产品的首选。
Michael Hoffmann

Michael Hoffmann

高级前端开发者

Nuxt UI Pro 是我首选的组件库。它开箱即用,能够满足我提出的所有 UI 需求,并且外观出色。它的定制性考虑得非常周全,让你可以轻松覆盖组件。每次更新带来的改进也总是让我惊叹,团队做得非常棒。
Harlan Wilton

Harlan Wilton

Nuxt 核心团队成员

我一看到 Nuxt 团队的新 UI 套件,就立刻抓住了购买的机会。虽然我已经很喜欢 Nuxt UI,但专业版将其提升到了一个全新的水平,我可以将整个代码块粘贴到我的所有项目中,这为我节省了大量时间。
Thomas Sanlis

Thomas Sanlis

自由开发者兼设计师

Nuxt UI 让我在没有任何前期原型的情况下开发了我的 SaaS。他们组件的设计质量和卓越的开发者体验 (DX) 意味着我可以为我的应用尝试许多不同的布局,直到找到适合我用户的完美用户体验 (UX)。Nuxt UI 是我梦想自己构建的 UI 工具包,而 Nuxt UI Pro 让你的 SaaS 开发之路走得更远、更轻松。向团队致敬。
Benjamin Code

Benjamin Code

YouTuber 兼 SaaS 构建者

从概念验证 (POC) 到网络平台,Nuxt UI Pro 是我首选的一切。它开箱即用,帮助我打造像素完美的 UI。它节省了我大量时间,同时仍然高度可定制。试试看,你不会失望的。
Estéban Soubiran

Estéban Soubiran

Web 开发者兼 UnJS 成员

我们之前使用 SaaS 服务搭建文档网站,但感觉不够满意。我们决定自己投入精力,使用 UI Pro 来完成。结果不仅我们的网站受到了潜在客户的称赞,他们甚至还想了解我们的平台。
Anthony Bettini

Anthony Bettini

VulnCheck 首席执行官兼创始人

哇,Nuxt UI Pro 彻底改变了游戏规则!它提供的组件质量、对细节的关注以及惊人的多样性让我印象深刻。对于任何开发者来说,这就像中了头奖。我省去了无数本该用来纠结于如何让应用看起来漂亮、拥有出色无障碍 UX 的时间,而是能够专注于真正重要的事情——构建应用本身。对我来说,这是一款每次都会毫不犹豫购买的产品!
Yaz Jallad

Yaz Jallad

Ninjaparade Digital 创始人

Nuxt UI Pro 节省了数百小时的开发和设计时间,同时在任何设备上都能呈现出简洁专业的界面。
Kevin Olson

Kevin Olson

Fume.app 创始人

我决定用一个组件库替换我自定义构建的组件,并选择了 Nuxt UI Pro。只花了我几个小时,新的 UI 看起来更加专业。集成这个库非常简单;组件文档齐全且高度可定制。我强烈推荐它;这个库是我开发新 SaaS 产品的首选。
Michael Hoffmann

Michael Hoffmann

高级前端开发者

Nuxt UI Pro 是我首选的组件库。它开箱即用,能够满足我提出的所有 UI 需求,并且外观出色。它的定制性考虑得非常周全,让你可以轻松覆盖组件。每次更新带来的改进也总是让我惊叹,团队做得非常棒。
Harlan Wilton

Harlan Wilton

Nuxt 核心团队成员

我一看到 Nuxt 团队的新 UI 套件,就立刻抓住了购买的机会。虽然我已经很喜欢 Nuxt UI,但专业版将其提升到了一个全新的水平,我可以将整个代码块粘贴到我的所有项目中,这为我节省了大量时间。
Thomas Sanlis

Thomas Sanlis

自由开发者兼设计师

Nuxt UI 让我在没有任何前期原型的情况下开发了我的 SaaS。他们组件的设计质量和卓越的开发者体验 (DX) 意味着我可以为我的应用尝试许多不同的布局,直到找到适合我用户的完美用户体验 (UX)。Nuxt UI 是我梦想自己构建的 UI 工具包,而 Nuxt UI Pro 让你的 SaaS 开发之路走得更远、更轻松。向团队致敬。
Benjamin Code

Benjamin Code

YouTuber 兼 SaaS 构建者

从概念验证 (POC) 到网络平台,Nuxt UI Pro 是我首选的一切。它开箱即用,帮助我打造像素完美的 UI。它节省了我大量时间,同时仍然高度可定制。试试看,你不会失望的。
Estéban Soubiran

Estéban Soubiran

Web 开发者兼 UnJS 成员

我们之前使用 SaaS 服务搭建文档网站,但感觉不够满意。我们决定自己投入精力,使用 UI Pro 来完成。结果不仅我们的网站受到了潜在客户的称赞,他们甚至还想了解我们的平台。
Anthony Bettini

Anthony Bettini

VulnCheck 首席执行官兼创始人

哇,Nuxt UI Pro 彻底改变了游戏规则!它提供的组件质量、对细节的关注以及惊人的多样性让我印象深刻。对于任何开发者来说,这就像中了头奖。我省去了无数本该用来纠结于如何让应用看起来漂亮、拥有出色无障碍 UX 的时间,而是能够专注于真正重要的事情——构建应用本身。对我来说,这是一款每次都会毫不犹豫购买的产品!
Yaz Jallad

Yaz Jallad

Ninjaparade Digital 创始人

Nuxt UI Pro 节省了数百小时的开发和设计时间,同时在任何设备上都能呈现出简洁专业的界面。
Kevin Olson

Kevin Olson

Fume.app 创始人

我决定用一个组件库替换我自定义构建的组件,并选择了 Nuxt UI Pro。只花了我几个小时,新的 UI 看起来更加专业。集成这个库非常简单;组件文档齐全且高度可定制。我强烈推荐它;这个库是我开发新 SaaS 产品的首选。
Michael Hoffmann

Michael Hoffmann

高级前端开发者

Nuxt UI Pro 是我首选的组件库。它开箱即用,能够满足我提出的所有 UI 需求,并且外观出色。它的定制性考虑得非常周全,让你可以轻松覆盖组件。每次更新带来的改进也总是让我惊叹,团队做得非常棒。
Harlan Wilton

Harlan Wilton

Nuxt 核心团队成员

我一看到 Nuxt 团队的新 UI 套件,就立刻抓住了购买的机会。虽然我已经很喜欢 Nuxt UI,但专业版将其提升到了一个全新的水平,我可以将整个代码块粘贴到我的所有项目中,这为我节省了大量时间。
Thomas Sanlis

Thomas Sanlis

自由开发者兼设计师

Nuxt UI 让我在没有任何前期原型的情况下开发了我的 SaaS。他们组件的设计质量和卓越的开发者体验 (DX) 意味着我可以为我的应用尝试许多不同的布局,直到找到适合我用户的完美用户体验 (UX)。Nuxt UI 是我梦想自己构建的 UI 工具包,而 Nuxt UI Pro 让你的 SaaS 开发之路走得更远、更轻松。向团队致敬。
Benjamin Code

Benjamin Code

YouTuber 兼 SaaS 构建者

从概念验证 (POC) 到网络平台,Nuxt UI Pro 是我首选的一切。它开箱即用,帮助我打造像素完美的 UI。它节省了我大量时间,同时仍然高度可定制。试试看,你不会失望的。
Estéban Soubiran

Estéban Soubiran

Web 开发者兼 UnJS 成员

我们之前使用 SaaS 服务搭建文档网站,但感觉不够满意。我们决定自己投入精力,使用 UI Pro 来完成。结果不仅我们的网站受到了潜在客户的称赞,他们甚至还想了解我们的平台。
Anthony Bettini

Anthony Bettini

VulnCheck 首席执行官兼创始人

哇,Nuxt UI Pro 彻底改变了游戏规则!它提供的组件质量、对细节的关注以及惊人的多样性让我印象深刻。对于任何开发者来说,这就像中了头奖。我省去了无数本该用来纠结于如何让应用看起来漂亮、拥有出色无障碍 UX 的时间,而是能够专注于真正重要的事情——构建应用本身。对我来说,这是一款每次都会毫不犹豫购买的产品!
Yaz Jallad

Yaz Jallad

Ninjaparade Digital 创始人

Nuxt UI Pro 节省了数百小时的开发和设计时间,同时在任何设备上都能呈现出简洁专业的界面。
Kevin Olson

Kevin Olson

Fume.app 创始人

我决定用一个组件库替换我自定义构建的组件,并选择了 Nuxt UI Pro。只花了我几个小时,新的 UI 看起来更加专业。集成这个库非常简单;组件文档齐全且高度可定制。我强烈推荐它;这个库是我开发新 SaaS 产品的首选。
Michael Hoffmann

Michael Hoffmann

高级前端开发者

Nuxt UI Pro 是我首选的组件库。它开箱即用,能够满足我提出的所有 UI 需求,并且外观出色。它的定制性考虑得非常周全,让你可以轻松覆盖组件。每次更新带来的改进也总是让我惊叹,团队做得非常棒。
Harlan Wilton

Harlan Wilton

Nuxt 核心团队成员

我一看到 Nuxt 团队的新 UI 套件,就立刻抓住了购买的机会。虽然我已经很喜欢 Nuxt UI,但专业版将其提升到了一个全新的水平,我可以将整个代码块粘贴到我的所有项目中,这为我节省了大量时间。
Thomas Sanlis

Thomas Sanlis

自由开发者兼设计师

Nuxt UI 让我在没有任何前期原型的情况下开发了我的 SaaS。他们组件的设计质量和卓越的开发者体验 (DX) 意味着我可以为我的应用尝试许多不同的布局,直到找到适合我用户的完美用户体验 (UX)。Nuxt UI 是我梦想自己构建的 UI 工具包,而 Nuxt UI Pro 让你的 SaaS 开发之路走得更远、更轻松。向团队致敬。
Benjamin Code

Benjamin Code

YouTuber 兼 SaaS 构建者

从概念验证 (POC) 到网络平台,Nuxt UI Pro 是我首选的一切。它开箱即用,帮助我打造像素完美的 UI。它节省了我大量时间,同时仍然高度可定制。试试看,你不会失望的。
Estéban Soubiran

Estéban Soubiran

Web 开发者兼 UnJS 成员

我们之前使用 SaaS 服务搭建文档网站,但感觉不够满意。我们决定自己投入精力,使用 UI Pro 来完成。结果不仅我们的网站受到了潜在客户的称赞,他们甚至还想了解我们的平台。
Anthony Bettini

Anthony Bettini

VulnCheck 首席执行官兼创始人

哇,Nuxt UI Pro 彻底改变了游戏规则!它提供的组件质量、对细节的关注以及惊人的多样性让我印象深刻。对于任何开发者来说,这就像中了头奖。我省去了无数本该用来纠结于如何让应用看起来漂亮、拥有出色无障碍 UX 的时间,而是能够专注于真正重要的事情——构建应用本身。对我来说,这是一款每次都会毫不犹豫购买的产品!
Yaz Jallad

Yaz Jallad

Ninjaparade Digital 创始人

Nuxt UI Pro 节省了数百小时的开发和设计时间,同时在任何设备上都能呈现出简洁专业的界面。
Kevin Olson

Kevin Olson

Fume.app 创始人

我决定用一个组件库替换我自定义构建的组件,并选择了 Nuxt UI Pro。只花了我几个小时,新的 UI 看起来更加专业。集成这个库非常简单;组件文档齐全且高度可定制。我强烈推荐它;这个库是我开发新 SaaS 产品的首选。
Michael Hoffmann

Michael Hoffmann

高级前端开发者

Nuxt UI Pro 是我首选的组件库。它开箱即用,能够满足我提出的所有 UI 需求,并且外观出色。它的定制性考虑得非常周全,让你可以轻松覆盖组件。每次更新带来的改进也总是让我惊叹,团队做得非常棒。
Harlan Wilton

Harlan Wilton

Nuxt 核心团队成员

我一看到 Nuxt 团队的新 UI 套件,就立刻抓住了购买的机会。虽然我已经很喜欢 Nuxt UI,但专业版将其提升到了一个全新的水平,我可以将整个代码块粘贴到我的所有项目中,这为我节省了大量时间。
Thomas Sanlis

Thomas Sanlis

自由开发者兼设计师

Nuxt UI 让我在没有任何前期原型的情况下开发了我的 SaaS。他们组件的设计质量和卓越的开发者体验 (DX) 意味着我可以为我的应用尝试许多不同的布局,直到找到适合我用户的完美用户体验 (UX)。Nuxt UI 是我梦想自己构建的 UI 工具包,而 Nuxt UI Pro 让你的 SaaS 开发之路走得更远、更轻松。向团队致敬。
Benjamin Code

Benjamin Code

YouTuber 兼 SaaS 构建者

从概念验证 (POC) 到网络平台,Nuxt UI Pro 是我首选的一切。它开箱即用,帮助我打造像素完美的 UI。它节省了我大量时间,同时仍然高度可定制。试试看,你不会失望的。
Estéban Soubiran

Estéban Soubiran

Web 开发者兼 UnJS 成员

我们之前使用 SaaS 服务搭建文档网站,但感觉不够满意。我们决定自己投入精力,使用 UI Pro 来完成。结果不仅我们的网站受到了潜在客户的称赞,他们甚至还想了解我们的平台。
Anthony Bettini

Anthony Bettini

VulnCheck 首席执行官兼创始人

哇,Nuxt UI Pro 彻底改变了游戏规则!它提供的组件质量、对细节的关注以及惊人的多样性让我印象深刻。对于任何开发者来说,这就像中了头奖。我省去了无数本该用来纠结于如何让应用看起来漂亮、拥有出色无障碍 UX 的时间,而是能够专注于真正重要的事情——构建应用本身。对我来说,这是一款每次都会毫不犹豫购买的产品!
Yaz Jallad

Yaz Jallad

Ninjaparade Digital 创始人

Nuxt UI Pro 节省了数百小时的开发和设计时间,同时在任何设备上都能呈现出简洁专业的界面。
Kevin Olson

Kevin Olson

Fume.app 创始人

我决定用一个组件库替换我自定义构建的组件,并选择了 Nuxt UI Pro。只花了我几个小时,新的 UI 看起来更加专业。集成这个库非常简单;组件文档齐全且高度可定制。我强烈推荐它;这个库是我开发新 SaaS 产品的首选。
Michael Hoffmann

Michael Hoffmann

高级前端开发者

Nuxt UI Pro 是我首选的组件库。它开箱即用,能够满足我提出的所有 UI 需求,并且外观出色。它的定制性考虑得非常周全,让你可以轻松覆盖组件。每次更新带来的改进也总是让我惊叹,团队做得非常棒。
Harlan Wilton

Harlan Wilton

Nuxt 核心团队成员

我一看到 Nuxt 团队的新 UI 套件,就立刻抓住了购买的机会。虽然我已经很喜欢 Nuxt UI,但专业版将其提升到了一个全新的水平,我可以将整个代码块粘贴到我的所有项目中,这为我节省了大量时间。
Thomas Sanlis

Thomas Sanlis

自由开发者兼设计师

Nuxt UI 让我在没有任何前期原型的情况下开发了我的 SaaS。他们组件的设计质量和卓越的开发者体验 (DX) 意味着我可以为我的应用尝试许多不同的布局,直到找到适合我用户的完美用户体验 (UX)。Nuxt UI 是我梦想自己构建的 UI 工具包,而 Nuxt UI Pro 让你的 SaaS 开发之路走得更远、更轻松。向团队致敬。
Benjamin Code

Benjamin Code

YouTuber 兼 SaaS 构建者

从概念验证 (POC) 到网络平台,Nuxt UI Pro 是我首选的一切。它开箱即用,帮助我打造像素完美的 UI。它节省了我大量时间,同时仍然高度可定制。试试看,你不会失望的。
Estéban Soubiran

Estéban Soubiran

Web 开发者兼 UnJS 成员

我们之前使用 SaaS 服务搭建文档网站,但感觉不够满意。我们决定自己投入精力,使用 UI Pro 来完成。结果不仅我们的网站受到了潜在客户的称赞,他们甚至还想了解我们的平台。
Anthony Bettini

Anthony Bettini

VulnCheck 首席执行官兼创始人

哇,Nuxt UI Pro 彻底改变了游戏规则!它提供的组件质量、对细节的关注以及惊人的多样性让我印象深刻。对于任何开发者来说,这就像中了头奖。我省去了无数本该用来纠结于如何让应用看起来漂亮、拥有出色无障碍 UX 的时间,而是能够专注于真正重要的事情——构建应用本身。对我来说,这是一款每次都会毫不犹豫购买的产品!
Yaz Jallad

Yaz Jallad

Ninjaparade Digital 创始人

Nuxt UI Pro 节省了数百小时的开发和设计时间,同时在任何设备上都能呈现出简洁专业的界面。
Kevin Olson

Kevin Olson

Fume.app 创始人

我决定用一个组件库替换我自定义构建的组件,并选择了 Nuxt UI Pro。只花了我几个小时,新的 UI 看起来更加专业。集成这个库非常简单;组件文档齐全且高度可定制。我强烈推荐它;这个库是我开发新 SaaS 产品的首选。
Michael Hoffmann

Michael Hoffmann

高级前端开发者

Nuxt UI Pro 是我首选的组件库。它开箱即用,能够满足我提出的所有 UI 需求,并且外观出色。它的定制性考虑得非常周全,让你可以轻松覆盖组件。每次更新带来的改进也总是让我惊叹,团队做得非常棒。
Harlan Wilton

Harlan Wilton

Nuxt 核心团队成员

我一看到 Nuxt 团队的新 UI 套件,就立刻抓住了购买的机会。虽然我已经很喜欢 Nuxt UI,但专业版将其提升到了一个全新的水平,我可以将整个代码块粘贴到我的所有项目中,这为我节省了大量时间。
Thomas Sanlis

Thomas Sanlis

自由开发者兼设计师

Nuxt UI 让我在没有任何前期原型的情况下开发了我的 SaaS。他们组件的设计质量和卓越的开发者体验 (DX) 意味着我可以为我的应用尝试许多不同的布局,直到找到适合我用户的完美用户体验 (UX)。Nuxt UI 是我梦想自己构建的 UI 工具包,而 Nuxt UI Pro 让你的 SaaS 开发之路走得更远、更轻松。向团队致敬。
Benjamin Code

Benjamin Code

YouTuber 兼 SaaS 构建者

从概念验证 (POC) 到网络平台,Nuxt UI Pro 是我首选的一切。它开箱即用,帮助我打造像素完美的 UI。它节省了我大量时间,同时仍然高度可定制。试试看,你不会失望的。
Estéban Soubiran

Estéban Soubiran

Web 开发者兼 UnJS 成员

我们之前使用 SaaS 服务搭建文档网站,但感觉不够满意。我们决定自己投入精力,使用 UI Pro 来完成。结果不仅我们的网站受到了潜在客户的称赞,他们甚至还想了解我们的平台。
Anthony Bettini

Anthony Bettini

VulnCheck 首席执行官兼创始人

哇,Nuxt UI Pro 彻底改变了游戏规则!它提供的组件质量、对细节的关注以及惊人的多样性让我印象深刻。对于任何开发者来说,这就像中了头奖。我省去了无数本该用来纠结于如何让应用看起来漂亮、拥有出色无障碍 UX 的时间,而是能够专注于真正重要的事情——构建应用本身。对我来说,这是一款每次都会毫不犹豫购买的产品!
Yaz Jallad

Yaz Jallad

Ninjaparade Digital 创始人

Nuxt UI Pro 节省了数百小时的开发和设计时间,同时在任何设备上都能呈现出简洁专业的界面。
Kevin Olson

Kevin Olson

Fume.app 创始人

我决定用一个组件库替换我自定义构建的组件,并选择了 Nuxt UI Pro。只花了我几个小时,新的 UI 看起来更加专业。集成这个库非常简单;组件文档齐全且高度可定制。我强烈推荐它;这个库是我开发新 SaaS 产品的首选。
Michael Hoffmann

Michael Hoffmann

高级前端开发者

Nuxt UI Pro 是我首选的组件库。它开箱即用,能够满足我提出的所有 UI 需求,并且外观出色。它的定制性考虑得非常周全,让你可以轻松覆盖组件。每次更新带来的改进也总是让我惊叹,团队做得非常棒。
Harlan Wilton

Harlan Wilton

Nuxt 核心团队成员

我一看到 Nuxt 团队的新 UI 套件,就立刻抓住了购买的机会。虽然我已经很喜欢 Nuxt UI,但专业版将其提升到了一个全新的水平,我可以将整个代码块粘贴到我的所有项目中,这为我节省了大量时间。
Thomas Sanlis

Thomas Sanlis

自由开发者兼设计师

Nuxt UI 让我在没有任何前期原型的情况下开发了我的 SaaS。他们组件的设计质量和卓越的开发者体验 (DX) 意味着我可以为我的应用尝试许多不同的布局,直到找到适合我用户的完美用户体验 (UX)。Nuxt UI 是我梦想自己构建的 UI 工具包,而 Nuxt UI Pro 让你的 SaaS 开发之路走得更远、更轻松。向团队致敬。
Benjamin Code

Benjamin Code

YouTuber 兼 SaaS 构建者

从概念验证 (POC) 到网络平台,Nuxt UI Pro 是我首选的一切。它开箱即用,帮助我打造像素完美的 UI。它节省了我大量时间,同时仍然高度可定制。试试看,你不会失望的。
Estéban Soubiran

Estéban Soubiran

Web 开发者兼 UnJS 成员

<script setup lang="ts">
const testimonials = [
  {
    user: {
      name: 'Anthony Bettini',
      description: 'CEO and founder of VulnCheck',
      avatar: {
        src: 'https://media.licdn.com/dms/image/v2/C4E03AQEY3pmXsH8hDg/profile-displayphoto-shrink_800_800/profile-displayphoto-shrink_800_800/0/1519741249442?e=1746057600&v=beta&t=dvQfBT9ah03MPNy9cnly30ugreeCdxG4nrxV3lwKAC8',
        loading: 'lazy'
      }
    },
    quote:
      'We were using a SaaS service for the docs site, but were left unfulfilled. We put in the effort to do it in house, with UI Pro and not only did we get complimented by a prospect on our site, but they wanted to know our platform.'
  },
  {
    user: {
      name: 'Yaz Jallad',
      description: 'Founder Ninjaparade Digital',
      avatar: {
        src: 'https://pbs.twimg.com/profile_images/1824690890222485504/lQ7v1AGt_400x400.jpg',
        loading: 'lazy'
      }
    },
    quote:
      "Wow, Nuxt UI Pro is a total game-changer! I'm seriously impressed with the quality, attention to detail, and the insane variety of components you get. It's like hitting the jackpot for any developer. I've saved countless hours that I would've spent stressing over making my apps look good, with amazing accessible UX,  and instead, I've been able to focus on the real deal – building the app itself. It's an instant buy for me, every single time. No second thoughts!"
  },
  {
    user: {
      name: 'Kevin Olson',
      description: 'Founder of Fume.app',
      avatar: {
        src: 'https://ipx.nuxt.com/f_auto,s_40x40/gh_avatar/acidjazz',
        srcset: 'https://ipx.nuxt.com/f_auto,s_80x80/gh_avatar/acidjazz 2x',
        loading: 'lazy'
      }
    },
    quote:
      'Nuxt UI Pro saves 100s of hours of dev and design time while delivering a clean professional look on any device.'
  },
  {
    user: {
      name: 'Michael Hoffmann',
      description: 'Senior Frontend Developer',
      avatar: {
        src: 'https://ipx.nuxt.com/f_auto,s_40x40/gh_avatar/mokkapps',
        srcset: 'https://ipx.nuxt.com/f_auto,s_80x80/gh_avatar/mokkapps 2x',
        loading: 'lazy'
      }
    },
    quote:
      'I decided to replace my custom-built components with a component library and chose Nuxt UI Pro. It only took me a few hours, and the new UI looks more professional. Integrating the library is easy; the components are well-documented and highly customizable. I can only recommend it; this library is my new choice for new SaaS products.'
  },
  {
    user: {
      name: 'Harlan Wilton',
      description: 'Nuxt core team member',
      avatar: {
        src: 'https://ipx.nuxt.com/f_auto,s_40x40/gh_avatar/harlan-zw',
        srcset: 'https://ipx.nuxt.com/f_auto,s_80x80/gh_avatar/harlan-zw 2x',
        loading: 'lazy'
      }
    },
    quote:
      'Nuxt UI Pro is my go to component library. Out-of-the-box it handles all of the UI demands I throw at it while looking great. The customisation is really worth thought out, allowing you to override components in a breeze. Always amazed at the improvements dropped in each update as well, the team is doing an amazing job.'
  },
  {
    user: {
      name: 'Thomas Sanlis',
      description: 'Freelance developer and designer',
      avatar: {
        src: 'https://pbs.twimg.com/profile_images/1374040164180299791/ACw4G3nZ_400x400.jpg',
        loading: 'lazy'
      }
    },
    quote:
      "I jumped at the chance to buy the Nuxt team's new UI kit as soon as I saw it. While I'm already a fan of Nuxt UI, the pro version takes it to a whole new level and lets me paste entire blocks into all my projects, saving me a ton of time."
  },
  {
    user: {
      name: 'Benjamin Code',
      description: 'YouTuber and SaaS builder',
      avatar: {
        src: 'https://pbs.twimg.com/profile_images/1607353032420769793/I8qQSUfQ_400x400.jpg',
        loading: 'lazy'
      }
    },
    quote:
      'Nuxt UI has allowed me to develop my SaaS without any prior mockups. The design quality of their components and the intelligence of the DX meant that I was able to try many different layouts for my application until I found the perfect UX for my users. Nuxt UI is the ui-kit I would have dreamed of building myself, and Nuxt UI Pro makes things even easier when you want to go further with your SaaS. Kudos to the team.'
  },
  {
    user: {
      name: 'Estéban Soubiran',
      description: 'Web developer and UnJS member',
      avatar: {
        src: 'https://pbs.twimg.com/profile_images/1801649350319218689/aS_X_iTm_400x400.jpg',
        loading: 'lazy'
      }
    },
    quote:
      "Nuxt UI Pro is my preferred choice for everything, from a POC to a web platform. It's ready to use out-of-the-box and assists me in crafting pixel-perfect UIs. It saves me a significant amount of time while remaining highly customizable. Give it a try, and you won't be let down."
  }
]
</script>

<template>
  <div class="flex flex-col gap-4 w-full">
    <UPageMarquee
      pause-on-hover
      :overlay="false"
      :ui="{ root: '[--gap:--spacing(4)]', content: 'w-auto py-1' }"
    >
      <UPageCard
        v-for="(testimonial, index) in testimonials"
        :key="index"
        variant="subtle"
        :description="testimonial.quote"
        :ui="{
          description: 'before:content-[open-quote] after:content-[close-quote] line-clamp-3'
        }"
        class="w-64 shrink-0"
      >
        <template #footer>
          <UUser v-bind="testimonial.user" size="xl" :ui="{ description: 'line-clamp-1' }" />
        </template>
      </UPageCard>
    </UPageMarquee>
    <UPageMarquee
      pause-on-hover
      reverse
      :overlay="false"
      :ui="{ root: '[--gap:--spacing(4)]', content: 'w-auto py-1' }"
    >
      <UPageCard
        v-for="(testimonial, index) in testimonials"
        :key="index"
        variant="subtle"
        :description="testimonial.quote"
        :ui="{
          description: 'before:content-[open-quote] after:content-[close-quote] line-clamp-3'
        }"
        class="w-64 shrink-0"
      >
        <template #footer>
          <UUser v-bind="testimonial.user" size="xl" :ui="{ description: 'line-clamp-1' }" />
        </template>
      </UPageCard>
    </UPageMarquee>
  </div>
</template>

截图

使用 PageMarquee 组件可以为您的截图创建无限滚动动画。

Nuxt UI Pro Screenshot 1Nuxt UI Pro Screenshot 2Nuxt UI Pro Screenshot 3Nuxt UI Pro Screenshot 4
Nuxt UI Pro Screenshot 1Nuxt UI Pro Screenshot 2Nuxt UI Pro Screenshot 3Nuxt UI Pro Screenshot 4
Nuxt UI Pro Screenshot 1Nuxt UI Pro Screenshot 2Nuxt UI Pro Screenshot 3Nuxt UI Pro Screenshot 4
Nuxt UI Pro Screenshot 1Nuxt UI Pro Screenshot 2Nuxt UI Pro Screenshot 3Nuxt UI Pro Screenshot 4
Nuxt UI Pro Screenshot 5Nuxt UI Pro Screenshot 6Nuxt UI Pro Screenshot 7Nuxt UI Pro Screenshot 8
Nuxt UI Pro Screenshot 5Nuxt UI Pro Screenshot 6Nuxt UI Pro Screenshot 7Nuxt UI Pro Screenshot 8
Nuxt UI Pro Screenshot 5Nuxt UI Pro Screenshot 6Nuxt UI Pro Screenshot 7Nuxt UI Pro Screenshot 8
Nuxt UI Pro Screenshot 5Nuxt UI Pro Screenshot 6Nuxt UI Pro Screenshot 7Nuxt UI Pro Screenshot 8
<template>
  <div class="relative w-full h-[400px] bg-muted overflow-hidden">
    <UPageMarquee
      reverse
      orientation="vertical"
      :overlay="false"
      :ui="{
        root: '[--duration:40s] absolute w-[460px] -left-[100px] -top-[300px] h-[940px] transform-3d rotate-x-55 rotate-y-0 rotate-z-30'
      }"
    >
      <img
        v-for="i in 4"
        :key="i"
        :src="`/pro/blocks/image${i}.png`"
        width="460"
        height="258"
        :alt="`Nuxt UI Pro Screenshot ${i}`"
        class="aspect-video border border-default rounded-lg bg-white"
      />
    </UPageMarquee>
    <UPageMarquee
      orientation="vertical"
      :overlay="false"
      :ui="{
        root: '[--duration:40s] absolute w-[460px] -top-[400px] left-[480px] h-[1160px] transform-3d rotate-x-55 rotate-y-0 rotate-z-30'
      }"
    >
      <img
        v-for="i in [5, 6, 7, 8]"
        :key="i"
        :src="`/pro/blocks/image${i}.png`"
        width="460"
        height="258"
        :alt="`Nuxt UI Pro Screenshot ${i}`"
        class="aspect-video border border-default rounded-lg bg-white"
      />
    </UPageMarquee>
    <UPageMarquee
      reverse
      orientation="vertical"
      :overlay="false"
      :ui="{
        root: 'hidden md:flex [--duration:40s] absolute w-[460px] -top-[300px] left-[1020px] h-[1060px] transform-3d rotate-x-55 rotate-y-0 rotate-z-30'
      }"
    >
      <img
        v-for="i in [9, 10, 11, 12]"
        :key="i"
        :src="`/pro/blocks/image${i}.png`"
        width="460"
        height="258"
        :alt="`Nuxt UI Pro Screenshot ${i}`"
        class="aspect-video border border-default rounded-lg bg-white"
      />
    </UPageMarquee>
  </div>
</template>

API

Props

Prop默认值类型
as

'div'

any

此组件应渲染为的元素或组件。

repeat

4

number

orientation

'horizontal'

"horizontal" | "vertical"

overlay

true

boolean

reverse

boolean

pauseOnHover

boolean

ui

{ root?: ClassNameValue; content?: ClassNameValue; }

插槽

插槽类型
default

{}

主题

app.config.ts
export default defineAppConfig({
  uiPro: {
    pageMarquee: {
      slots: {
        root: 'group relative flex items-center overflow-hidden gap-(--gap) [--gap:--spacing(16)] [--duration:20s]',
        content: 'flex items-center shrink-0 justify-around gap-(--gap) min-w-max'
      },
      variants: {
        orientation: {
          horizontal: {
            content: 'w-full'
          },
          vertical: {
            content: 'h-full'
          }
        },
        pauseOnHover: {
          true: {
            content: 'group-hover:[animation-play-state:paused]'
          }
        },
        reverse: {
          true: {
            content: '[animation-direction:reverse]'
          }
        },
        overlay: {
          true: {
            root: 'before:absolute before:pointer-events-none before:content-[""] before:z-2 before:from-default before:to-transparent after:absolute after:pointer-events-none after:content-[""] after:z-2 after:from-default after:to-transparent'
          }
        }
      },
      compoundVariants: [
        {
          orientation: 'horizontal',
          class: {
            root: 'flex-row',
            content: 'flex-row animate-[marquee_var(--duration)_linear_infinite] rtl:animate-[marquee-rtl_var(--duration)_linear_infinite] backface-hidden'
          }
        },
        {
          orientation: 'horizontal',
          overlay: true,
          class: {
            root: 'before:inset-y-0 before:left-0 before:h-full before:w-1/3 before:bg-gradient-to-r after:inset-y-0 after:right-0 after:h-full after:w-1/3 after:bg-gradient-to-l backface-hidden'
          }
        },
        {
          orientation: 'vertical',
          class: {
            root: 'flex-col',
            content: 'flex-col animate-[marquee-vertical_var(--duration)_linear_infinite] rtl:animate-[marquee-vertical-rtl_var(--duration)_linear_infinite] h-[fit-content] backface-hidden'
          }
        },
        {
          orientation: 'vertical',
          overlay: true,
          class: {
            root: 'before:inset-x-0 before:top-0 before:w-full before:h-1/3 before:bg-gradient-to-b after:inset-x-0 after:bottom-0 after:w-full after:h-1/3 after:bg-gradient-to-t backface-hidden'
          }
        }
      ]
    }
  }
})
vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nuxt/ui/vite'

export default defineConfig({
  plugins: [
    vue(),
    ui({
      uiPro: {
        pageMarquee: {
          slots: {
            root: 'group relative flex items-center overflow-hidden gap-(--gap) [--gap:--spacing(16)] [--duration:20s]',
            content: 'flex items-center shrink-0 justify-around gap-(--gap) min-w-max'
          },
          variants: {
            orientation: {
              horizontal: {
                content: 'w-full'
              },
              vertical: {
                content: 'h-full'
              }
            },
            pauseOnHover: {
              true: {
                content: 'group-hover:[animation-play-state:paused]'
              }
            },
            reverse: {
              true: {
                content: '[animation-direction:reverse]'
              }
            },
            overlay: {
              true: {
                root: 'before:absolute before:pointer-events-none before:content-[""] before:z-2 before:from-default before:to-transparent after:absolute after:pointer-events-none after:content-[""] after:z-2 after:from-default after:to-transparent'
              }
            }
          },
          compoundVariants: [
            {
              orientation: 'horizontal',
              class: {
                root: 'flex-row',
                content: 'flex-row animate-[marquee_var(--duration)_linear_infinite] rtl:animate-[marquee-rtl_var(--duration)_linear_infinite] backface-hidden'
              }
            },
            {
              orientation: 'horizontal',
              overlay: true,
              class: {
                root: 'before:inset-y-0 before:left-0 before:h-full before:w-1/3 before:bg-gradient-to-r after:inset-y-0 after:right-0 after:h-full after:w-1/3 after:bg-gradient-to-l backface-hidden'
              }
            },
            {
              orientation: 'vertical',
              class: {
                root: 'flex-col',
                content: 'flex-col animate-[marquee-vertical_var(--duration)_linear_infinite] rtl:animate-[marquee-vertical-rtl_var(--duration)_linear_infinite] h-[fit-content] backface-hidden'
              }
            },
            {
              orientation: 'vertical',
              overlay: true,
              class: {
                root: 'before:inset-x-0 before:top-0 before:w-full before:h-1/3 before:bg-gradient-to-b after:inset-x-0 after:bottom-0 after:w-full after:h-1/3 after:bg-gradient-to-t backface-hidden'
              }
            }
          ]
        }
      }
    })
  ]
})
vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import uiPro from '@nuxt/ui-pro/vite'

export default defineConfig({
  plugins: [
    vue(),
    uiPro({
      uiPro: {
        pageMarquee: {
          slots: {
            root: 'group relative flex items-center overflow-hidden gap-(--gap) [--gap:--spacing(16)] [--duration:20s]',
            content: 'flex items-center shrink-0 justify-around gap-(--gap) min-w-max'
          },
          variants: {
            orientation: {
              horizontal: {
                content: 'w-full'
              },
              vertical: {
                content: 'h-full'
              }
            },
            pauseOnHover: {
              true: {
                content: 'group-hover:[animation-play-state:paused]'
              }
            },
            reverse: {
              true: {
                content: '[animation-direction:reverse]'
              }
            },
            overlay: {
              true: {
                root: 'before:absolute before:pointer-events-none before:content-[""] before:z-2 before:from-default before:to-transparent after:absolute after:pointer-events-none after:content-[""] after:z-2 after:from-default after:to-transparent'
              }
            }
          },
          compoundVariants: [
            {
              orientation: 'horizontal',
              class: {
                root: 'flex-row',
                content: 'flex-row animate-[marquee_var(--duration)_linear_infinite] rtl:animate-[marquee-rtl_var(--duration)_linear_infinite] backface-hidden'
              }
            },
            {
              orientation: 'horizontal',
              overlay: true,
              class: {
                root: 'before:inset-y-0 before:left-0 before:h-full before:w-1/3 before:bg-gradient-to-r after:inset-y-0 after:right-0 after:h-full after:w-1/3 after:bg-gradient-to-l backface-hidden'
              }
            },
            {
              orientation: 'vertical',
              class: {
                root: 'flex-col',
                content: 'flex-col animate-[marquee-vertical_var(--duration)_linear_infinite] rtl:animate-[marquee-vertical-rtl_var(--duration)_linear_infinite] h-[fit-content] backface-hidden'
              }
            },
            {
              orientation: 'vertical',
              overlay: true,
              class: {
                root: 'before:inset-x-0 before:top-0 before:w-full before:h-1/3 before:bg-gradient-to-b after:inset-x-0 after:bottom-0 after:w-full after:h-1/3 after:bg-gradient-to-t backface-hidden'
              }
            }
          ]
        }
      }
    })
  ]
})