この記事では、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. メディアクエリ方式 /*iPhone X への適応*/ @media 画面のみ、(デバイス幅:...
目次1. 日付までのタイムスタンプ2. UTCを北京時間に変換するWXS (WeiXin Scrip...
一般的な提案は、WHERE 条件のインデックスを作成することですが、これは実際には一方的です。インデ...
1. エフェクトHTMLを送信する <div id="送信ボタン">...
序文以前は、キャッシュを使用してルートを強調表示していました。すべてのルートをトラバースし、クリック...
序文日常の開発では、テキストの水平スクロール効果(一般にカルーセルと呼ばれる)によく遭遇します。これ...
上記:このドキュメントは、3 台の仮想マシンが相互に ping を実行できること、ファイアウォールが...
Web デザインで js を使用すると、多くのページ効果を実現できますが、HTML タグの META...
かなり前に実装された機能ですが、クリックすると選択したメニュー項目の背景色が白くなることに気付きまし...
プロジェクトの要件は、日付と時刻を選択し、現在の時刻以降の時刻のみを選択し、最小レベルを分単位で無効...
目次質問:プロジェクトには 2 つのトークンがあり、1 つは有効期間が 2 時間 (ショート トーク...
CSS Sprite は、CSS スプライトとも呼ばれ、画像結合技術です。この方法は、複数の小さなア...
操作要素の詳細については、前回の記事を参照してください。JavaScript WebAPI、DOM、...
序文MySQLクエリはselectコマンドを使用し、limitとoffsetパラメータを使用して、指...
目次質問1: 小道具は具体的にどのように使用されますか?原理は何ですか?下を見る質問 2: 年齢に ...