[Vue.js]要素の表示・非表示を検出するライブラリ「vue-observe-visibility」

vue-observe-visibilityとは

vue-observe-visibilityは、要素がウィンドウに表示・非表示されたことを検知できるライブラリです。

 

【動画サイズ:1.9MB】

 

環境

この記事は、以下の管理人の検証環境にて記事にしています。

 

ライブラリの取得

ライブラリを取得するには、npm, CDNのどれか一つを使用します。

npm

npm install --save vue-observe-visibility

CDN

<script src="https://cdn.jsdelivr.net/npm/[email protected]/intersection-observer.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue-observe-visibility.umd.min.js"></script>

gitリポジトリは以下から取得できます。

 

導入手順

管理人が行った、動作確認サンプルを実装するために、以下の手順でソースコードを導入していきます。
このサンプルでは、要素がウィンドウに表示・非表示されたことを検知します。

 

step
1
ライブラリの呼び出し

まずライブラリを呼び出す為に、以下の2通りのケースで呼び出します。

ES6等で実装する場合

import VueObserveVisibility from 'vue-observe-visibility'

UMDで実装する場合

const VueObserveVisibility = window['vue-observe-visibility'].default;

 

step
2
Vueインスタンスを設定


上記で取得した  VueObserveVisibilityVue.useに取り込みます。

Vue.use(VueObserveVisibility);

new Vue({
  el: '#app',
  data:function() {
    return {
      prop: {
        callback: this.visibilityChanged,
        throttle: 0,
        intersection: {
          threshold: 0
        },
      }
    }
  },
  methods: {
    visibilityChanged: function (isVisible, entry) {
      console.log('itemID:', entry.target.dataset.item);
      console.log('entry:', isVisible);
    }
  }
});

 

step
3
テンプレートを準備

検知をしたい要素にv-observe-visibilityをプロパティとして設定します。

サンプルはケバブケースで記載しています。

<div id="app" >
  <div class="box">
    <div v-for="i in 10" v-observe-visibility="prop" class="item" :key="i" :data-item="i">
      <img src="https://unsplash.it/500?random" width="500" height="500">
    </div>
  </div>
</div> 

 

サンプル

今回のソースを実際に触って確認できるようにデモを用意しました。

See the Pen [Vue.js]要素がページ上に表示された事を検出するライブラリ「vue-observe-visibility」 by カバの樹 (@kabanoki) on CodePen.dark

 

さいごに

要素がウィンドウに表示・非表示されたことを検知できるライブラリでした。

今日はこの辺でー

 

  • この記事を書いた人

カバノキ

印刷会社のWEB部隊に所属してます。 WEB制作に携わってから、もう時期10年になります。 普段の業務では、PHPをメインにサーバーサイドの言語を扱っています。 最近のお気に入りはJavascriptです。 Vue.jsを狂喜乱舞しながら、社内に布教中です。

-Event Handling, UI Utilities, vue.js, ライブラリ
-, , ,