この記事では、Vue3.0の手書きカルーセル効果の具体的なコードを参考までに共有します。具体的な内容は次のとおりです。 始めましょう HTML構造 <テンプレート> <div class="xtx-carousel" @mouseleave="enterFn" @mouseenter="leaveFn"> <ul class="carousel-body"> <li class="carousel-item" :class="{ fade: indexid === index }" v-for="(item, index) in list" :key="item.id"> <ルーターリンク先="/"> <img :src="item.imgUrl" alt="" /> </ルーターリンク> </li> </ul> <a href="javascript:;" class="carousel-btn prev" @click="lastPage"><i class="iconfont icon-angle-left"></i></a> <a href="javascript:;" class="carousel-btn next" @click="nextPage"><i class="iconfont icon-angle-right"></i></a> <div class="carousel-indicator"> <span @click="indexid = i - 1" v-for="i in list.length" :key="i" :class="{ active: indexid === i - 1 }"></span> </div> </div> </テンプレート> js構文 <スクリプト> 'vue' から { ref, watch, onUnmounted } をインポートします。 エクスポートデフォルト{ 名前:「カルーセル」 小道具: { // 画像データリスト: { タイプ: オブジェクト、 デフォルト: () => {} }, // カルーセルの各切り替えイベントの継続時間: { タイプ: 数値、 デフォルト: 2 }, // カルーセルの自動再生を有効にするかどうか: { タイプ: ブール値、 デフォルト: true }, // クリックすると複数のページをめくる: { タイプ: 数値、 デフォルト: 1 } }, セットアップ(プロパティ) { // インデックス const indexid = ref(0) // カルーセル const timer = ref(null) 定数TimeFn = () => { クリアインターバル(タイマー) // 各実行の前に前のタイマーをクリアします timer.value = setInterval(() => { インデックスID.値++ // 制限を超えた場合は補充します if (indexid.value > props.list.length - 1) { インデックスID値 = 0 } }, props.duration * 1000) } // クリック + 次の停止画像 const nextPage = () => { インデックスID.値 += props.ページ if (indexid.value > props.list.length - 1) { インデックスID値 = 0 } } // クリック + 前の画像 const lastPage = () => { indexid.value -= props.page インデックスID値<0の場合{ インデックスID値 = propsリストの長さ - 1 } } // タイマーをクリアする const leaveFn = () => { // console.log('タイマーをクリア') clearInterval(タイマー値) // コンソール.log(タイマー) } // コンポーネント消費、クリーンアップタイマー onUnmounted(() => { clearInterval(タイマー値) }) // タイマーを開始する const enterFn = () => { props.list.length > 1 の場合、props.autoplay は次のように動作します。 // console.log('タイマーを開始') 時間関数() } } 時計( () => props.list、 () => { props.list.length > 1 の場合、props.autoplay は次のように動作します。 時間関数() } } ) {indexid、leaveFn、enterFn、nextPage、lastPage} を返します。 } } </スクリプト> CSS スタイル <style スコープ lang="less"> .xtx-カルーセル{ 幅: 100%; 高さ: 100%; 最小幅: 300px; 最小高さ: 150px; 位置: 相対的; .カルーセル{ &-体 { 幅: 100%; 高さ: 100%; } &-アイテム { 幅: 100%; 高さ: 100%; 位置: 絶対; 左: 0; 上: 0; 不透明度: 0; 遷移: 不透明度 0.5 秒線形; &.フェード{ 不透明度: 1; zインデックス: 1; } 画像 { 幅: 100%; 高さ: 100%; } } &-インジケータ { 位置: 絶対; 左: 0; 下: 20px; zインデックス: 2; 幅: 100%; テキスト配置: 中央; スパン { 表示: インラインブロック; 幅: 12px; 高さ: 12px; 背景: rgba(0, 0, 0, 0.2); 境界線の半径: 50%; カーソル: ポインタ; ~ スパン { 左マージン: 12px; } &。アクティブ { 背景: #fff; } } } &-btn { 幅: 44px; 高さ: 44px; 背景: rgba(0, 0, 0, 0.2); 色: #fff; 境界線の半径: 50%; 位置: 絶対; 上: 228px; zインデックス: 2; テキスト配置: 中央; 行の高さ: 44px; 不透明度: 0; 遷移: すべて 0.5 秒; &.前へ { 左: 20px; } &。次 { 右: 20px; } } } &:ホバー{ .carousel-btn { 不透明度: 1; } } } </スタイル> グローバルプラグインとして登録する '../carousel.vue' から Carousel をインポートします。 // Vue2.0 プラグインの記述要素: オブジェクトをエクスポートし、インストール関数を持ち、デフォルトで Vue コンストラクターを渡し、エクスポート デフォルト { に基づいて Vue を拡張します。 // Vue3.0 プラグインの記述要素: オブジェクトをエクスポートし、インストール関数を持ち、デフォルトでアプリ アプリケーション インスタンスを渡し、エクスポート デフォルト { に基づいてアプリを拡張します。 インストール(アプリ) { // アプリを拡張します。アプリはコンポーネント ディレクティブ関数を提供します // プロトタイプをマウントする場合は、app.config.globalProperties メソッド app.component(Carousel.name, xtxCarousel) } } main.jsエントリファイルにマウントする 'vue' から {createApp} をインポートします。 './App.vue' からアプリをインポートします。 './router' からルーターをインポートします './store' からストアをインポートします import libraryUI from '@/components/library/index' //独自のプラグイン createApp(App) .use(ストア) .use(ルーター) .use(libraryUI) // プラグインをマウントします。mount('#app') プラグインの使い方は? <カルーセル:list="リスト" 期間="1" /> 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Dockerスペースがいっぱいでコンテナに入れない場合の解決策
>>: ウェブサイトにファビコンを追加するためのヒント: URLの前の小さなアイコン
以下の手順に従ってください1. request.jsコンテンツ: http リクエスト インターセプ...
目次グローバルオブジェクトグローバルオブジェクトとグローバル変数プロセスコンソール一般的なツールユー...
この記事では、例を使用して、MySQL ストアド プロシージャの原理と使用方法を説明します。ご参考ま...
コンポーネントに背景画像コントロールを追加するには、次の 2 つの手順だけが必要です。 <表示...
みなさんこんにちは。今日は、純粋な CSS を使用して Google マテリアル デザインのテキスト...
目次プロトタイプチェーンプロトタイプチェーンに基づいてシンプルなJQueryライブラリを実装すること...
背景ブラウザの互換性の問題を解決するのは非常に面倒なことです。高度な技術はそれほど必要ありませんが、...
1. インストールヒント: 現在、VUE3.0 の公式翻訳ドキュメントはありません。しかし、すでに誰...
1.ロックしますか? 1.1 ロックとは何ですか?ロックの本当の意味は、鍵またはコードで開くことがで...
MySQL の日付型単一行関数: CURDATE()またはCURRENT_DATE()は現在の日付を...
前回は、JavaScript の charAt() メソッドの使い方を紹介しました。今日は、最も多く...
以下の質問はすべて InnoDB ストレージ エンジンに基づいています。 1. 最も大きな ID を...
マイクロソフトIIS (Internet Information Server) は、Microso...
ケースの説明: - ページ効果を実現するためにテーブルを使用する- ハイパーリンクを機能させたくない...
1. Windows10の組み込みLinuxサブシステムをインストールする1.1. Linuxサブシ...