この記事では、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の前の小さなアイコン
突然、ドキュメントの保存と共同作業のためのプライベート サービスを構築する必要がありました。多くの場...
この記事は主に、以前のインストール方法を使用して MySQL 5.7.14 をインストールするときに...
ここでは、MySQL の使用中に発生するいくつかの問題とその解決策を示します。 sql_mode=o...
最近Kafka勉強しています。クラスタの状態をテストする準備をしていたときに、仮想マシンを 3 つ開...
wangEditor は、JavaScript と CSS に基づいて開発された Web リッチ テ...
1. 応用シナリオ親ページ a.jspサブページ b.jsp (ページ a に埋め込まれた ifra...
ダウンロード:ステップ 1: ウェブサイトを開きます (ダウンロードするには公式ウェブサイトにアクセ...
1. 背景Docker サービスが開始されると、デフォルトで docker0 ブリッジが作成され (...
概要バックグラウンド管理システムには多くのフォーム要件があります。データをjson 形式で書き込み、...
1. プロジェクトを右クリックしてプロパティを選択します2. プロジェクトファセットをクリック3. ...
オープンプラットフォームの増加に伴い、そこから派生するさまざまなアプリケーションサービスも増加傾向に...
XPath は、XML ドキュメントの一部を選択するための言語です。 XPath は、XSLT、XQ...
プロジェクトで frameset 属性を使用したことがあるかどうかはわかりません。昨年、オンライン ...
目次1. 概要2. 応用例2.1、Docker コンテナ分離名前空間2.2. Docker のフリー...
目次1. オブジェクト1.1 オブジェクトとは何ですか? 1.2 なぜオブジェクトが必要なのか? 2...