この記事では、シームレスなカルーセル効果を実現するための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 パッケージを起動してバックグラウンドで実行する方法
1. MySQL rpm パッケージのインストール # インストールソースをダウンロードします [r...
起源最近、私は要件 A に取り組んでいます。そこには、次のように記述される小さな機能ポイントがありま...
以前の就職面接で面接官が尋ねた質問を覚えています。「インライン要素とは何ですか。ブロックレベル要素と...
序文最近のプロジェクトでは、大量のデータを保存する必要があり、このデータには有効期限があります。クエ...
目次1. 関数を使用してコンポーネントを作成する2. クラスを使用してコンポーネントを作成する3. ...
現在このような問題が発生しています 私の状況は、QT が動かなくなってしまったため、仮想マシンを再起...
ワーカープロセスは、起動されると、まず自身の動作に必要な環境を初期化し、次に実行する必要があるイベン...
この記事では、マウスがテーブルの行を通過するときにJavaScriptを使用して色ラベルを表示する方...
この記事は主にSQLシリアル番号取得コード例を紹介します。記事ではサンプルコードを詳細に紹介しており...
tomcatでは、jspは文字化けしませんが、htmlの中国語は文字化けします理由はいくつかあります...
境界線のスタイルborder-style プロパティは、表示する境界線の種類を指定します。 bord...
Vue を使用してプロジェクトを開発する過程で、次のような問題によく遭遇します。Vue のデータでオ...
序文: Mybatis の特殊文字処理、Mybatis の xml ファイル内の特殊文字の処理、ここ...
<br />以前、「コンテンツページ番号のプレビューナビゲーション」と「写真プレビューナ...
この記事では、参考までに、簡単なスネークゲームを実装するためのjsキャンバスの具体的なコードを共有し...