Quyuanから抽出されたスタンドアロンのマルチメディアスワイパーとビューアWebコンポーネントライブラリです。フレームワークに依存せず、タッチ対応のカルーセルとマルチメディアビューアを提供します。
- 🚀 フレームワーク非依存: 純粋なWeb Components、任意のフレームワークまたはバニラJSで動作
- 📱 タッチ対応: Swiper.jsをベースとしたスムーズなタッチ操作
- 🎬 複数のメディアタイプ: 画像、パノラマ、動画、YouTube、3Dモデル、Gaussianスプラットに対応
- 🔧 ゼロ依存関係: すべての依存関係がバンドル済み(Lit依存なし)
- 📦 軽量: tree-shakingサポートによる最適化されたバンドルサイズ
- 🛠️ TypeScript: 型定義付きの完全なTypeScriptサポート
- Node.js: 20以降
- パッケージマネージャー: pnpm 9.0.0以降(推奨)
- ブラウザ: Web Componentsをサポートするモダンブラウザ
- Chrome/Edge 79+
- Firefox 63+
- Safari 12.1+
pnpm add @c4h/chucinpm install @c4h/chuci<script src="https://cdn.jsdelivr.net/npm/@c4h/chuci@latest/dist/chuci.umd.js"></script>
<script>
// コンポーネントはグローバルにChuciとして利用可能
// HTMLで直接カスタム要素を使用できます
</script><cc-swiper>
<cc-swiper-slide
thumbnail-url="thumb1.jpg"
image-url="full1.jpg"
image-type="image"
caption="最初の画像">
</cc-swiper-slide>
<cc-swiper-slide
thumbnail-url="thumb2.jpg"
image-url="full2.jpg"
image-type="image"
caption="2番目の画像">
</cc-swiper-slide>
</cc-swiper>
<script type="module">
import '@c4h/chuci'
</script>import '@c4h/chuci';
// スワイパー要素を取得
const swiper = document.querySelector('cc-swiper');
// プログラムでビューアを開く
swiper.openViewer('path/to/image.jpg', 'image', 0);
// スライド変更イベントをリッスン
swiper.addEventListener('slidechange', (e) => {
console.log('現在のスライド:', e.detail.activeIndex);
});<cc-swiper has-thumb>
<cc-swiper-slide thumbnail-url="..." image-url="..." image-type="image"></cc-swiper-slide>
<cc-swiper-slide thumbnail-url="..." image-url="..." image-type="image"></cc-swiper-slide>
</cc-swiper><cc-swiper autoplay>
<!-- スライド -->
</cc-swiper>- image: 通常の画像(jpg, png, gif など)
- panorama: 360°パノラマ画像
- youtube: YouTube動画(YouTube URLを提供)
- video: HTML5動画(mp4, webm など)
- 3dmodel: 3Dモデル(OBJ/MTL形式)
- gaussian: Gaussianスプラッティングファイル(.splat, .ply)
メインのカルーセルコンポーネント。
属性:
has-thumb: サムネイルギャラリーを表示autoplay: 自動再生を有効化
メソッド:
openViewer(imageUrl: string, imageType: string, slideIndex?: number): プログラムでビューアを開くimageUrl: 表示するメディアのURLimageType: メディアのタイプ(上記のサポートされるタイプを参照)slideIndex: オプションのスライドインデックス(デフォルト: 0)
イベント:
slidechange: スライドが変更されたときに発火detail.activeIndex: 現在のアクティブなスライドインデックス
プロパティ:
slider: 基盤となるSwiperインスタンスへのアクセス
個別のスライドコンポーネント。
属性:
thumbnail-url: サムネイル画像のURL(必須)image-url: フルメディアのURL(必須)image-type: メディアタイプ(上記のサポートされるタイプを参照)(必須)caption: オプションのキャプションテキスト
3DモデルとGaussianスプラット用の属性:
material-url: 3Dモデル用のマテリアルファイルURL(OBJ/MTL)debug-mode: デバッグ情報の表示を有効化("true"または"false")camera-position: 初期カメラ位置を"x,y,z"形式で指定(例:"0,1,5")camera-target: カメラターゲット位置を"x,y,z"形式で指定(例:"0,0,0")show-texture: 3Dモデルのテクスチャの表示/非表示("true"または"false")fit-to-container: モデルをコンテナサイズに合わせる("true"または"false")
すべてのビューアコンポーネントはCcViewerBaseを継承し、以下をサポートします:
メソッド:
open(url: string): メディアURLでビューアを開くclose(): ビューアを閉じる
プロパティ:
showPrevButton(boolean): 前へナビゲーションボタンの表示/非表示showNextButton(boolean): 次へナビゲーションボタンの表示/非表示
イベント:
close: ビューアが閉じられたときに発火navigate-prev: 前へボタンがクリックされたときに発火navigate-next: 次へボタンがクリックされたときに発火
<cc-swiper-slide
thumbnail-url="thumb.jpg"
image-url="model.obj"
image-type="3dmodel"
material-url="model.mtl"
debug-mode="true"
camera-position="0,1,5"
camera-target="0,0,0"
show-texture="true">
</cc-swiper-slide><cc-swiper-slide
thumbnail-url="thumb.jpg"
image-url="scene.splat"
image-type="gaussian"
debug-mode="true"
camera-position="0,0,10">
</cc-swiper-slide><cc-swiper-slide
thumbnail-url="thumb.jpg"
image-url="https://www.youtube.com/watch?v=VIDEO_ID"
image-type="youtube">
</cc-swiper-slide>CSSカスタムプロパティ:
cc-swiper {
--cc-slider-theme-color: #007aff;
--cc-slider-navigation-color: #007aff;
}
cc-viewer-base,
cc-viewer-image,
cc-viewer-panorama,
cc-viewer-youtube,
cc-viewer-video,
cc-viewer-3dmodel,
cc-viewer-gaussian {
--cc-viewer-z-index: 1000;
}ブラウザ互換性の詳細については、要件セクションを参照してください。
# 依存関係のインストール
pnpm install
# 開発サーバーの起動
pnpm run dev
# テストの実行
pnpm test
# ライブラリのビルド
pnpm run buildMIT License
Copyright (c) 2024-2026 Code for History
詳細はLICENSEファイルを参照してください。
元のQuyuan実装から移行する場合:
- インポートを
quyuanから@c4h/chuciに変更 - コンポーネント名は同じまま(
cc-swiper、cc-swiper-slideなど) - 3DモデルのURLはパイプ区切り形式を使用しなくなりました:
<!-- 旧 --> <cc-swiper-slide image-url="model.obj|model.mtl" ...> <!-- 新 --> <cc-swiper-slide image-url="model.obj" material-url="model.mtl" ...>
Code for HistoryによるQuyuanから抽出。