この記事では、シームレスなカルーセル効果を実現するためのVueの具体的なコードを例として紹介します。具体的な内容は次のとおりです。 1. まず、2 つの vue コンポーネント Sweiper.vue と SweiperItem.vue を作成します。 2. ページに 2 つのコンポーネントを導入し、v-model を使用して Sweiper.vue でパラメータを渡します ( v-model は実際にはデフォルトの属性値とデフォルトのイベント入力を持つ構文糖です)。 3. コアは、選択された値を SweiperItem に渡し、それが SweiperItem 内の名前値と等しい場合にどの画像を表示するかを決定することです。 <テンプレート> <div> <Sweiper v-model="選択済み"> <!--v-model は構文糖衣であり、値イベントや入力イベントと同等です--> <Sweiper-item name="item1"> <div class="item"> <img :src="getImg('01')" alt=""> </div> </スワイパーアイテム> <Sweiper-item name="item2"> <div class="item"> <img :src="getImg('02')" alt=""> </div> </スワイパーアイテム> <スワイパーアイテム名="item3"> <div class="item"> <img :src="getImg('03')" alt=""> </div> </スワイパーアイテム> </スワイパー> </div> </テンプレート> ここでの画像は、配列を v-for でループしていないので、その構造がわかります<script> 「../components/Sweiper.vue」からSweiperをインポートします。 「../components/SweiperItem.vue」からSweiperItemをインポートします。 エクスポートデフォルト{ 名前: "mySweiper", コンポーネント: スワイパー、 スワイパーアイテム }, データ() { 戻る { selected: "item1", //デフォルトは最初の項目です} }, 方法:{ getImg(url){ "img/"+url+".jpg" を返します }, }, マウントされた(){ /*setInterval(()=>{ this.selected="item2" },3000) この時点では、mounted は 1 回しか実行されないため、変更されません。Sweiper で監視リスナーを記述する必要があります}*/この手順は Sweiper コンポーネントに記述されているためコメント化されています} </スクリプト> <スタイル> 。アイテム{ /*境界線: 1px 黒一色;*/ } .item>画像{ 幅: 100%; /*高さ: 0.1rem;*/ } </スタイル> スワイパー <テンプレート> <div class="スワイパー"> <スロット></スロット> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前:「スワイパー」 データ() { 戻る { 現在:'' } }, 小道具:{ 価値:{ タイプ:文字列、 デフォルト:"" }, }, マウントされた(){ //自動カルーセル中に名前の値を検索し、indexOf メソッドを使用して現在のカルーセルの次のテーブルをトラバースします this.names=this.$children.map(child=>{ 子の名前を返す }); this.showImg(); this.paly() }, 方法:{ 表示画像(){ this.current=this.value||this.$children[0].name; //現在のインスタンスの直接の子コンポーネント this.$children.map(vm=>{ vm.selected = this.current }) }, 淡い(){ //カルーセルが再生されるたびに画像を調整します this.timer=setInterval(()=>{ //indexOf は指定された文字列の最初の出現を返します const index = this.names.indexOf(this.current); newIndex=index+1 とします。 //より厳密にする if (newIndex===this.names.length){ 新しいインデックス = 0; } this.$emit("input",this.names[newIndex]) },3000) } }, 時計:{ //値を監視し、変更があった場合は選択内容を変更する 価値(){ this.showImg() } }, 破棄する前に() { //列が破棄される前に clearInterval(this.timer) } }; </スクリプト> <スタイル> .スワイパー{ /*境界線: 1px 黒一色;*/ 幅: 100%; 高さ: 4rem; オーバーフロー: 非表示; マージン: 0 自動; 位置: 相対的; } </スタイル> スワイパーアイテム.vue <テンプレート> <遷移> <div class="Sweiper-item" v-show="isShow"> <スロット></スロット> </div> </トランジション> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前:"SweiperItem", データ(){ 戻る { 選択済み:"" } }, 小道具:{ 名前:{ タイプ:文字列、 必須:true }, }, マウントされた(){ }, 計算:{ isShow(){ this.selected===this.name を返します。 } } }; </スクリプト> <スタイル> .v-enter-active、.v-leave-active{ 遷移: すべて 1 線形; } .v-leave-to{ 変換:translate(-100%); } .v-enter{ 変換: translate(100%); } .v-enter-active{ 位置: 絶対; トップ:0; 左: 0; } </スタイル> 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: Linux で jar パッケージを起動してバックグラウンドで実行する方法
この記事では、カスタムツリーコンポーネントを再帰的に実装するVueの具体的なコードを参考までに共有し...
Q: xml と html の違いがわかりません。違いは何ですか? A: XMLと HTML の違い...
Centos6.4 で mysql5.7.18 をインストールするための具体的な手順が全員に共有され...
この記事では、ネイティブ JS で実装されたブラインドの特殊効果を紹介します。効果は次のとおりです。...
コマンドを実行docker run -d --name consul -p 8500:8500 co...
vscode エディタを使用して vue テンプレートを作成すると、新しい vue ファイルを作成す...
MySQLは重複データを処理します一部の MySQL テーブルには重複レコードが含まれている場合があ...
Nginx の最適化 - バージョン番号と Web ページのキャッシュ時間を非表示にするバージョン番...
目次1. マージインターフェース1.1 非関数メンバー1.2 関数メンバー序文:今日お話ししたいのは...
MySQL のデータ ディクショナリは、データベースの重要なコンポーネントの 1 つです。INFOR...
困難SVG グラフィックの 2 つのマスクの作成まず、コード左側のピンク色のボックスの内容ですこれに...
この記事の例では、ショッピングカート機能を実装するためのvuexの具体的なコードを参考までに共有して...
1. ブリッジ: デフォルトでは VMnet0 が使用されます1. 原則:ブリッジは、それぞれ 2...
Linux システムのシャットダウン コマンドは何ですか? Liangxu Tutorial Net...
最近、MySQL を使用してテーブル データを Excel ファイルにエクスポートしました。MySQ...