Vue.jsを使用してこれを実装するにはどうすればよいですか?

ISAAC

私はVue.jsを初めて使用するため、このタスクを正しく実装する適切な方法がわかりません。4秒ごとに設定された間隔で画像を置き換えるスライダーを作成しようとしています。今は問題なく動作しますが、この目標を達成するためにVue.jsの全機能を使用したいと思います。また、メモリリークを回避するために、マウント解除時にインターバルを終了する方法を知りたいです。

    <template>
    <div class="trending col-4">
        <div class="trending-div">
            <h1 class="headline">Trending</h1>
            <div class="trending-articles">
                <div class="trending-articles-names" @click="changeIamge">
                    <p class="trending-articles-names-number activeButton">1</p>
                    <p class="trending-articles-names-articleTitle activeBold">Lorem ipsum </p>
                </div>
                <div class="trending-articles-names" @click="changeIamge">
                    <p class="trending-articles-names-number">2</p>
                    <p class="trending-articles-names-articleTitle">Lorem, ipsum </p>
                </div>
                <div class="trending-articles-names" @click="changeIamge">
                    <p class="trending-articles-names-number">3</p>
                    <p class="trending-articles-names-articleTitle">Lorem ipsum </p>
                </div>
            </div>
            <div class="trending-carousel">
                <div @click="pic" :style="{ backgroundImage: `url(path/to/image)`}" class="trending-carousel-image active"></div>
                <div @click="pic" :style="{ backgroundImage: `url(path/to/image)`}" class="trending-carousel-image"></div>
                <div @click="pic" :style="{ backgroundImage: `url(path/to/image)`}" class="trending-carousel-image"></div>
            </div>
        </div>
    </div>
</template>

<script>
    export default{
        data: function() {
            return {
                counter: 0,

            }
        },
        mounted: function() {
            let carouselImages = document.querySelectorAll('.trending-carousel-image');
            let buttons = document.querySelectorAll('.trending-articles-names-number');
            let title = document.querySelectorAll('.trending-articles-names-articleTitle');
            setInterval(() => {
                carouselImages[this.counter].classList.remove("active")
                buttons[this.counter].classList.remove("activeButton")
                title[this.counter].classList.remove("activeBold")
                if(this.counter === 3) {
                    carouselImages[0].classList.add("active");
                    buttons[0].classList.add("activeButton");
                    title[0].classList.add("activeBold");
                    this.counter = 0;
                }else {
                    carouselImages[this.counter+1].classList.add("active");
                    buttons[this.counter+1].classList.add("activeButton");
                    title[this.counter+1].classList.add("activeBold");
                    this.counter++;
                }
            },4000);
        }
    }
</script>
タートルファイト

vueを使用する場合は、DOMを直接操作しないようにする必要があります。

  • 要素にクラスを動的に追加/削除する場合は、次のオブジェクト構文を使用できます。v-bind:class
  • アニメーション/トランジションが必要な場合は、Vueトランジションtransition/ transition-group)を使用できます
  • 同様の要素が多数ある場合(.trending-articles-namesサンプルコードなど)、v-forそれらを使用して作成できます

vueに純粋に実装された非常に単純なカルーセル
は次のようになります:(コードペンはここから入手できます

new Vue({
  el: '#root',
  data: function() {
    return {
      articles: [{
        name: "Lorem Ipsum",
        image: "https://via.placeholder.com/300x50.png/FF0000/FFFFFF?text=First"
      }, {
        name: "Lorem Ipsum 2",
        image: "https://via.placeholder.com/300x50.png/00FF00/FFFFFF?text=Second"
      }, {
        name: "Lorem Ipsum 3",
        image: "https://via.placeholder.com/300x50.png/0000FF/FFFFFF?text=Third"
      }],
      activeImage: 0,
      interval: null
    }
  },
  mounted() {
    this.interval = setInterval(this.next, 5000);
  },
  destroyed() {
    // remember to clear the interval once the component is no longer used
    clearInterval(this.interval);
  },
  methods: {
    prev() {
      this.activeImage--;
      if (this.activeImage < 0)
        this.activeImage = this.articles.length - 1;
    },
    next() {
      this.activeImage++;
      if (this.activeImage >= this.articles.length)
        this.activeImage = 0;
    },
    pic(article) {
      console.log("CLICKED ON", article);
    }
  }
});
.carousel {
  overflow: hidden;
  width: 300px;
  display: flex;
}

.carousel img {
  transition: transform 0.5s ease;
}

button {
  margin: 6px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="root">
  <div class="trending col-4">
    <div class="trending-div">
      <div class="trending-articles">
        <div v-for="(article, idx) in articles" :key="idx" class="trending-articles-names" @click="activeImage = idx">{{article.name}}</div>
      </div>
      <div class="carousel">
        <img v-for="(article, idx) in articles" :key="idx" @click="pic(article)" :src="article.image" :style="{transform: `translateX(-${activeImage * 100}%)`}" />
      </div>
      <button type="button" @click="prev">PREV</button>
      <button type="button" @click="next">NEXT</button>
    </div>
  </div>
</div>

ただし、生産プロジェクトには既製のカルーセルコンポーネントを使用することをお勧めします。
いくつか例を挙げると、vueのカルーセルに使用できる優れたライブラリがいくつかあります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Vue.jsを使用してこれを表示するにはどうすればよいですか?

分類Dev

このコードをvue2.0に実装するにはどうすればよいですか?

分類Dev

vue jsを使用して指定された行を表示するにはどうすればよいですか?

分類Dev

vue.js 2を使用してフォームを送信するにはどうすればよいですか?

分類Dev

vue jsを使用して次の値を表示するにはどうすればよいですか?

分類Dev

Vue.jsで画像をボタンとして使用するにはどうすればよいですか?

分類Dev

Vue.jsでv-forを使用してメソッドを実行するにはどうすればよいですか?

分類Dev

Vueの2つの任意の要素間の通信を実装するにはどうすればよいですか?

分類Dev

VueでSassを使用してTailwindを使用するにはどうすればよいですか?

分類Dev

vue jsを使用して、jsonデータとして提供されるworkHrをテーブル形式で表示するにはどうすればよいですか?

分類Dev

vueを使用してnativescriptの要素を取得するにはどうすればよいですか?

分類Dev

Vue 3を使用してdivの背景色を変更するにはどうすればよいですか?

分類Dev

Vue.jsを使用して小道具に基づいて要素に複数のクラスを追加するにはどうすればよいですか?

分類Dev

Vueルーター-このタイプのルートを実装するにはどうすればよいですか?

分類Dev

Vue.jsでv-forを使用して新しいdivを動的に作成するにはどうすればよいですか?

分類Dev

Vue.js開発サーバーをhttpsで実行するにはどうすればよいですか?

分類Dev

Vue.js開発サーバーをhttpsで実行するにはどうすればよいですか?

分類Dev

in vueで同等のJSを実行するにはどうすればよいですか?(n個の増分)

分類Dev

Vueの「フルビルド」を使用していることを確認するにはどうすればよいですか?

分類Dev

Vueを使用して単一ファイルコンポーネントでこの種のTypeScriptを使用するにはどうすればよいですか?

分類Dev

VueでlocalStorageを使用するにはどうすればよいですか?

分類Dev

vue.jsで完全な好みのブレッドクラムを実装するにはどうすればよいですか?

分類Dev

VueフロントエンドとRailsバックエンドでenvvairablesを実装するにはどうすればよいですか?このタスクを完了するには、dotenvパッケージを使用する必要がありますか?

分類Dev

Vue.jsを使用しているときにVuetifyカードの単語を強調表示するにはどうすればよいですか?

分類Dev

Vue.js ApolloClientミドルウェアを再実行するにはどうすればよいですか?

分類Dev

vue.jsを使用して、子が埋め込まれた動的ルーターリンクを設定するにはどうすればよいですか?

分類Dev

vue.jsでSVG.jsプラグインを使用するにはどうすればよいですか?

分類Dev

Vue jsを使用して通知を既読としてマークするにはどうすればよいですか?

分類Dev

Vue JSを使用してHTMLの同じタグで「v-if」と「v-else」を使用するにはどうすればよいですか?

Related 関連記事

  1. 1

    Vue.jsを使用してこれを表示するにはどうすればよいですか?

  2. 2

    このコードをvue2.0に実装するにはどうすればよいですか?

  3. 3

    vue jsを使用して指定された行を表示するにはどうすればよいですか?

  4. 4

    vue.js 2を使用してフォームを送信するにはどうすればよいですか?

  5. 5

    vue jsを使用して次の値を表示するにはどうすればよいですか?

  6. 6

    Vue.jsで画像をボタンとして使用するにはどうすればよいですか?

  7. 7

    Vue.jsでv-forを使用してメソッドを実行するにはどうすればよいですか?

  8. 8

    Vueの2つの任意の要素間の通信を実装するにはどうすればよいですか?

  9. 9

    VueでSassを使用してTailwindを使用するにはどうすればよいですか?

  10. 10

    vue jsを使用して、jsonデータとして提供されるworkHrをテーブル形式で表示するにはどうすればよいですか?

  11. 11

    vueを使用してnativescriptの要素を取得するにはどうすればよいですか?

  12. 12

    Vue 3を使用してdivの背景色を変更するにはどうすればよいですか?

  13. 13

    Vue.jsを使用して小道具に基づいて要素に複数のクラスを追加するにはどうすればよいですか?

  14. 14

    Vueルーター-このタイプのルートを実装するにはどうすればよいですか?

  15. 15

    Vue.jsでv-forを使用して新しいdivを動的に作成するにはどうすればよいですか?

  16. 16

    Vue.js開発サーバーをhttpsで実行するにはどうすればよいですか?

  17. 17

    Vue.js開発サーバーをhttpsで実行するにはどうすればよいですか?

  18. 18

    in vueで同等のJSを実行するにはどうすればよいですか?(n個の増分)

  19. 19

    Vueの「フルビルド」を使用していることを確認するにはどうすればよいですか?

  20. 20

    Vueを使用して単一ファイルコンポーネントでこの種のTypeScriptを使用するにはどうすればよいですか?

  21. 21

    VueでlocalStorageを使用するにはどうすればよいですか?

  22. 22

    vue.jsで完全な好みのブレッドクラムを実装するにはどうすればよいですか?

  23. 23

    VueフロントエンドとRailsバックエンドでenvvairablesを実装するにはどうすればよいですか?このタスクを完了するには、dotenvパッケージを使用する必要がありますか?

  24. 24

    Vue.jsを使用しているときにVuetifyカードの単語を強調表示するにはどうすればよいですか?

  25. 25

    Vue.js ApolloClientミドルウェアを再実行するにはどうすればよいですか?

  26. 26

    vue.jsを使用して、子が埋め込まれた動的ルーターリンクを設定するにはどうすればよいですか?

  27. 27

    vue.jsでSVG.jsプラグインを使用するにはどうすればよいですか?

  28. 28

    Vue jsを使用して通知を既読としてマークするにはどうすればよいですか?

  29. 29

    Vue JSを使用してHTMLの同じタグで「v-if」と「v-else」を使用するにはどうすればよいですか?

ホットタグ

アーカイブ