Skip to content

Sticky スティッキー - Vant 4

Sticky スティッキー

紹介

Sticky コンポーネントは CSS の position: sticky と同様の効果です。画面内では通常のレイアウト、画面外へスクロールすると上部に固定されます。

取り込み

以下の方法でコンポーネントをグローバル登録します。詳細はコンポーネント登録を参照してください。

js
import { createApp } from'vue'; import { Sticky } from'vant'; const app = createApp(); app.use(Sticky);

🎯 コード例

📌 基本的な使い方

内容を Sticky で包むだけで簡単にスティッキー効果を実現。スクロールで上部に吸着します。

html
<template>
  <div class="demo-sticky">
    <van-sticky>
      <van-button type="primary" style="margin-left: 15px;">
        基础用法
      </van-button>
    </van-sticky>
  </div>
</template>

<style>
.demo-sticky {
  height: 150vh;
  padding-top: 50px;
  background: linear-gradient(180deg, #f7f8fa 0%, #fff 100%);
}
</style>

📏 上部オフセット

offset-top で上部との距離を調整し、重要な内容との重なりを避けます。

html
<template>
  <div class="demo-sticky">
    <van-sticky :offset-top="50">
      <van-button type="warning" style="margin-left: 115px;">
        吸顶距离 50px
      </van-button>
    </van-sticky>
  </div>
</template>

<style>
.demo-sticky {
  height: 150vh;
  padding-top: 50px;
  background: linear-gradient(180deg, #f7f8fa 0%, #fff 100%);
}
</style>

📦 コンテナの指定

container でコンテナを指定すると、その範囲内で固定されます。

html
<template>
  <div class="demo-sticky">
    <div ref="container" class="scroll-container">
      <van-sticky :container="container">
        <van-button type="success" style="margin-left: 215px;">
          指定容器
        </van-button>
      </van-sticky>
      <div class="content">
        <p v-for="i in 20" :key="i">容器内容 {{ i }}</p>
      </div>
    </div>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const container = ref(null);
    return { container };
  },
};
</script>

<style>
.scroll-container {
  height: 300px;
  overflow-y: auto;
  background: #fff;
  border: 1px solid #ebedf0;
  border-radius: 6px;
}

.content {
  padding: 15px;
}

.content p {
  margin: 10px 0;
  padding: 10px;
  background: #f7f8fa;
  border-radius: 4px;
}
</style>

⬇️ 下部オフセット

position="bottom" で下部に固定し、offset-bottom で距離を調整します。

html
<template>
  <div class="demo-sticky">
    <van-sticky position="bottom" :offset-bottom="50">
      <van-button type="danger" style="margin-left: 15px;">
        吸底距离 50px
      </van-button>
    </van-sticky>
  </div>
</template>

<style>
.demo-sticky {
  height: 150vh;
  padding-top: 50px;
  background: linear-gradient(180deg, #f7f8fa 0%, #fff 100%);
}
</style>

📋 API

🎛️ Props

パラメータ説明デフォルト
position📍 固定位置(bottom を指定可能)stringtop
offset-top📏 上部固定時の距離(px``vw``vh``rem*numberstring*
offset-bottom📐 下部固定時の距離(px``vw``vh``rem*numberstring*
z-index🔢 固定時の z-index*numberstring*
container📦 コンテナの HTML ノードElement-

🎪 Events

イベント名説明コールバック引数
change🔄 固定状態が変化した時に発火isFixed: boolean
scroll📜 スクロール時に発火{ scrollTop: number, isFixed: boolean }

📘 型定義

コンポーネントは以下の型定義を提供します:

ts
import type { StickyProps, StickyPosition } from 'vant';

🎨 テーマカスタマイズ

🎭 スタイル変数

以下の CSS 変数でスタイルをカスタマイズできます。使用方法は ConfigProvider コンポーネント を参照してください。

名称デフォルト説明
--van-sticky-z-index99🔢 固定時のレイヤー。適切な表示優先度を保証

📚 関連ドキュメント

🧭 ナビゲーションコンポーネント

📦 レイアウトコンポーネント

🔧 ツールコンポーネント

Vant に基づく企業向けモバイルソリューション