Vue で Openlayer を使用して読み込みアニメーション効果を実現する

Vue で Openlayer を使用して読み込みアニメーション効果を実現する

注意: スコープアニメーションは使用できません。 ! ! !

GIF経由

<テンプレート>
  <div class="test">
    <div id="map" ref="map" style="幅: 100vw; 高さ: 100vh"></div>
  </div>
</テンプレート>
 
<スクリプト>
"ol/ol.css"をインポートします。
「ol」から { Map、View、Overlay } をインポートします。
"ol/layer/Tile" から TileLayer をインポートします。
「ol/source/OSM」からOSMをインポートします。
 
エクスポートデフォルト{
  名前: "gif",
  データ() {
    戻る {
      マップ: {},
      かぶせる: {}、
      マーカーポイント: {},
      geojsonデータ:
        タイプ: "FeatureCollection",
        特徴: [
          {
            タイプ: "機能",
            プロパティ:
              タイトル:「アラーム1」、
            },
            ジオメトリ:
              タイプ: "ポイント"、
              座標: [91.48879670091165, 37.83814884701121],
            },
          },
          {
            タイプ: "機能",
            プロパティ:
              タイトル: 「アラーム2」、
            },
            ジオメトリ:
              タイプ: "ポイント"、
              座標: [99.19515576149941, 26.713646654711134],
            },
          },
          {
            タイプ: "機能",
            プロパティ:
              タイトル: 「アラーム3」、
            },
            ジオメトリ:
              タイプ: "ポイント"、
              座標: [123.74363825288785, 44.363694825734726],
            },
          },
        ]、
      },
    };
  },
  マウント() {
    このメソッドは、次のとおりです。
    これをGifに追加します。
  },
  メソッド: {
    // マップを初期化する initMap() {
      this.map = 新しいマップ({
        ターゲット: "マップ"、
        レイヤー:
          新しいタイルレイヤー({
            ソース: 新しい OSM()、
          })、
        ]、
        ビュー: 新しいビュー({
          投影: "EPSG:4326",
          中心: [104.912777, 34.730746],
          ズーム: 4.5,
        })、
      });
    },
    // オーバーレイを使用してGIFの動的アイコンポイント情報を追加しますaddGif() {
      座標を this.getCoordinatesByGeojson(this.geojsonData); とします。
 
      for (const i in 座標) {
        gif_span = document.createElement("span"); とします。
 
        document.documentElement.appendChild(gif_span);
        this.$nextTick(() => {
          this.markerPoint = 新しいオーバーレイ({
            位置: 座標[i],
            要素: gif_span、
            配置:「中央-中央」、
          });
          this.map.addOverlay(this.markerPoint);
        });
      }
    },
    //geojsonデータに基づいて座標セットを取得します getCoordinatesByGeojson(geojsonData) {
      座標を [] とします。
      geojsonData.features.map((フィーチャ) => {
        座標 = [...座標、feature.geometry.coordinates];
      });
      座標を返します。
    },
  },
};
</スクリプト>
<スタイル lang='scss' >
。テスト {
  スパン {
    表示: インラインブロック;
    幅: 80ピクセル;
    高さ: 80px;
    境界線の半径: 50%;
    背景: url("https://smart-garden-manage.oss-cn-chengdu.aliyuncs.com/gif.gif")
      繰り返しなし;
    背景サイズ: 80px 80px;
  }
}
</スタイル>

キーフレームを通して @keyframes

<テンプレート>
  <div class="test">
    <div id="map" ref="map" style="幅: 100vw; 高さ: 100vh"></div>
  </div>
</テンプレート>
 
<スクリプト>
"ol/ol.css"をインポートします。
「ol」から { Map、View、Overlay } をインポートします。
"ol/layer/Tile" から TileLayer をインポートします。
「ol/source/OSM」からOSMをインポートします。
 
エクスポートデフォルト{
  名前: "gif",
  データ() {
    戻る {
      マップ: {},
      かぶせる: {}、
      ポイントオーバーレイ: {},
      geojsonデータ:
        タイプ: "FeatureCollection",
        特徴: [
          {
            タイプ: "機能",
            プロパティ:
              タイトル:「アラーム1」、
            },
            ジオメトリ:
              タイプ: "ポイント"、
              座標: [91.48879670091165, 37.83814884701121],
            },
          },
          {
            タイプ: "機能",
            プロパティ:
              タイトル: 「アラーム2」、
            },
            ジオメトリ:
              タイプ: "ポイント"、
              座標: [99.19515576149941, 26.713646654711134],
            },
          },
          {
            タイプ: "機能",
            プロパティ:
              タイトル: 「アラーム3」、
            },
            ジオメトリ:
              タイプ: "ポイント"、
              座標: [123.74363825288785, 44.363694825734726],
            },
          },
        ]、
      },
    };
  },
  マウント() {
    このメソッドは、次のとおりです。
    これをGifに追加します。
  },
  メソッド: {
    // マップを初期化する initMap() {
      this.map = 新しいマップ({
        ターゲット: "マップ"、
        レイヤー:
          新しいタイルレイヤー({
            ソース: 新しい OSM()、
          })、
        ]、
        ビュー: 新しいビュー({
          投影: "EPSG:4326",
          中心: [104.912777, 34.730746],
          ズーム: 4.5,
        })、
      });
    },
    // オーバーレイを使用してGIFの動的アイコンポイント情報を追加しますaddGif() {
      座標を this.getCoordinatesByGeojson(this.geojsonData); とします。
 
      for (const i in 座標) {
        point_div を document.createElement("div") とします。
        point_div.className = "css_animation";
        point_div.id = `coordinate_${i}`;
        document.documentElement.appendChild(point_div);
 
        this.$nextTick(() => {
          this.point_overlay = 新しいオーバーレイ({
            位置: 座標[i],
            要素: point_div、
            配置:「中央-中央」、
          });
          this.map.addOverlay(this.point_overlay);
        });
      }
    },
    //geojsonデータに基づいて座標セットを取得します getCoordinatesByGeojson(geojsonData) {
      座標を [] とします。
      geojsonData.features.map((フィーチャ) => {
        座標 = [...座標、feature.geometry.coordinates];
      });
      座標を返します。
    },
  },
};
</スクリプト>
<スタイル lang='scss' >
。テスト {
  .css_アニメーション {
    高さ: 50px;
    幅: 50px;
    境界線の半径: 50%;
    背景: rgba(255, 0, 0, 0.9);
    ボックスシャドウ: インセット 0 0 8px 赤;
    変換: スケール(0);
    アニメーション: myfirst 3s;
    animation-iteration-count: infinite; // 無限ループ}
  @keyframes myfirst {
    に {
      変換: スケール(2);
      背景: rgba(0, 0, 0, 0);
      ボックスシャドウ: インセット 0 0 50px rgba(255, 0, 0, 0);
    }
  }
}
</スタイル>

アニメーションを読み込み、アニメーションが配置されている特徴点の属性を取得できます。

注意: このコードには問題があります。現在、クリックするとプロパティを取得したりアニメーションを表示したりすることはできますが、同時にはできません。これを最適化する必要があります。

<テンプレート>
  <div class="test">
    <div id="map" ref="map" style="幅: 100vw; 高さ: 100vh"></div>
    <div
      id="ポップアップ"
      スタイル="
        位置: 絶対;
        背景色: rgba(47, 57, 90, 0.678);
        下: 20px;
        左: 30px;
        境界線: 1px 白の実線;
        パディング: 10px;
        幅: 60ピクセル;
      「
    >
      {{プロパティ.title}}
    </div>
  </div>
</テンプレート>
 
<スクリプト>
"ol/ol.css"をインポートします。
「ol」から { Map、View、Overlay } をインポートします。
"ol/source" から { OSM、Vector を VectorSource としてインポートします。
「ol/layer」から { Vector を VectorLayer として、 Tile を TileLayer として } をインポートします。
「ol/format/GeoJSON」からGeoJSONをインポートします。
 
「ol/interaction/Select」からSelectをインポートします。
"ol/events/condition" から { altKeyOnly、click、pointerMove } をインポートします。
「ol/style」から {Fill、Stroke、Style、Circle } をインポートします。
 
エクスポートデフォルト{
  名前: "gif",
  データ() {
    戻る {
      マップ: {},
      レイヤー: {},
 
      かぶせる: {}、
      ポイントオーバーレイ: {},
      geojsonデータ:
        タイプ: "FeatureCollection",
        特徴: [
          {
            タイプ: "機能",
            プロパティ:
              タイトル:「アラーム1」、
            },
            ジオメトリ:
              タイプ: "ポイント"、
              座標: [91.48879670091165, 37.83814884701121],
            },
          },
          {
            タイプ: "機能",
            プロパティ:
              タイトル: 「アラーム2」、
            },
            ジオメトリ:
              タイプ: "ポイント"、
              座標: [99.19515576149941, 26.713646654711134],
            },
          },
          {
            タイプ: "機能",
            プロパティ:
              タイトル: 「アラーム3」、
            },
            ジオメトリ:
              タイプ: "ポイント"、
              座標: [123.74363825288785, 44.363694825734726],
            },
          },
        ]、
      },
 
      選択: {},
      プロパティ:
        タイトル: ""、
      },
    };
  },
  マウント() {
    このメソッドは、次のとおりです。
    // this.addGif(); //コメントアウトした後、クリックしてフィーチャ属性を取得します},
  メソッド: {
    // マップを初期化する initMap() {
      this.layer = 新しいVectorLayer({
        ソース: 新しい VectorSource({
          機能: 新しい GeoJSON().readFeatures(this.geojsonData)、
        })、
      });
      this.map = 新しいマップ({
        ターゲット: "マップ"、
        レイヤー:
          新しいタイルレイヤー({
            ソース: 新しい OSM()、
          })、
          このレイヤー、
        ]、
        ビュー: 新しいビュー({
          投影: "EPSG:4326",
          中心: [104.912777, 34.730746],
          ズーム: 4.5,
        })、
      });
 
      this.select = 新しいSelect({
        条件: click, //クリックして選択});
      this.map.addInteraction(this.select);
 
      overlayer_popup = new Overlay({
        要素: document.getElementById("popup"),
        配置: "center-center", // 必ず追加してください。追加しないとオフセットが発生します});
 
      this.select.on("選択", (e) => {
        let coordinate = e.mapBrowserEvent.coordinate; //選択された座標を取得します。let featureSelect = e.selected[0]; //選択されたフィーチャー if (e.selected.length !== 0) {
          overlayer_popup.setPosition(座標);
          this.map.addOverlay(overlayer_popup);
        } それ以外 {
          overlayer_popup.setPosition("");
        }
 
        if (featureSelect) {
          this.properties = featureSelect.getProperties(); //現在のフィーチャのすべてのプロパティを取得します //選択したスタイルを設定します featureSelect.setStyle(
            新しいスタイル({
              イメージ: 新しい円({
                半径: 10,
                塗りつぶし: 新しい塗りつぶし({
                  //ベクター レイヤーの塗りつぶし色と透明色: "rgba(255,0,0,0.5)",
                })、
                ストローク: 新しいストローク({
                  //境界線スタイルの色: "rgba(100, 90, 209, 0.6)",
                  幅: 3,
                })、
              })、
            })
          );
        }
      });
 
      // ベクター要素上のマウスのスタイルを設定します this.map.on("pointermove", (e) => {
        const isHover = this.map.hasFeatureAtPixel(e.pixel);
        this.map.getTargetElement().style.cursor = isHover ? "ポインター" : "";
      });
    },
    // オーバーレイを使用してGIFの動的アイコンポイント情報を追加しますaddGif() {
      座標を this.getCoordinatesByGeojson(this.geojsonData); とします。
 
      for (const i in 座標) {
        point_div を document.createElement("div") とします。
        point_div.className = "css_animation";
        point_div.id = `coordinate_${i}`;
        document.documentElement.appendChild(point_div);
 
        this.$nextTick(() => {
          this.point_overlay = 新しいオーバーレイ({
            位置: 座標[i],
            要素: point_div、
            配置:「中央-中央」、
          });
          this.map.addOverlay(this.point_overlay);
        });
      }
    },
    //geojsonデータに基づいて座標セットを取得します getCoordinatesByGeojson(geojsonData) {
      座標を [] とします。
      geojsonData.features.map((フィーチャ) => {
        座標 = [...座標、feature.geometry.coordinates];
      });
      座標を返します。
    },
  },
};
</スクリプト>
<style lang='scss' スコープ>
。テスト {
}
</スタイル>
<スタイル lang='scss' >
。テスト {
  .css_アニメーション {
    高さ: 50px;
    幅: 50px;
    境界線の半径: 50%;
    背景: rgba(255, 0, 0, 0.9);
    ボックスシャドウ: インセット 0 0 8px 赤;
    変換: スケール(0);
    アニメーション: myfirst 3s;
    animation-iteration-count: infinite; // 無限ループ}
  @keyframes myfirst {
    に {
      変換: スケール(2);
      背景: rgba(0, 0, 0, 0);
      ボックスシャドウ: インセット 0 0 50px rgba(255, 0, 0, 0);
    }
  }
}
</スタイル>

Vue+Openlayer の読み込みアニメーションに関するこの記事はこれで終わりです。Vue Openlayer の読み込みアニメーションに関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vueカスタム読み込みアニメーションの例
  • Vue SPAは最初に読み込みアニメーションの実装コードを入力します
  • Vueはページ読み込みアニメーション効果を実装します
  • Vue 手書き読み込みアニメーション プロジェクト

<<:  MySQL データベースの一般的な基本操作の分析 [データベースの作成、表示、変更、削除]

>>:  docker を使用して Windows 10 Home バージョンで Laravel 開発環境を構築する方法の詳細なチュートリアル

推薦する

Vueシングルページアプリケーションの事前レンダリング方法の例

目次序文vue-cli 2.0 バージョンvue-cli 3.0 バージョン要約する序文vue-cl...

nginx設定ファイルの解釈の詳細な説明

nginx 設定ファイルは主に 4 つの部分に分かれています。 main{#(グローバル設定) ht...

Firebug ツールを使用して iPad でページをデバッグする

iPad でページをデバッグするにはどうすればいいですか? iOS 5 をご利用の場合、iPad の...

MySQL データベース監視ソフトウェア lepus の使用上の問題と解決策

lepus3.7 を使用して MySQL データベースを監視中に、次の問題が発生しました。このブログ...

CentOS8でルートパスワードを素早く変更する方法

Centos8仮想マシンを起動し、上下キーを押して図1のインターフェースの最初の行を選択します。図1...

Vue3 でタイマーコンポーネントをカプセル化する方法

背景一部のショッピング モールの Web ページで商品の詳細を開くと、購入数量を選択するためのカウン...

Excelアップロード機能を実現するVue + iViewの完全コード

1. HTML部分 <Col span="2">ファイルをアップロー...

MySQL 5.7.17 のインストールと設定方法のグラフィック チュートリアル (Ubuntu 16.04)

公式 MySQL Web サイトから Ubuntu Linux 用の最新バージョンの MySQL を...

ネイティブ js で呼び出し、適用、バインドを実装する方法

1. 呼び出しを実装するステップ:関数をオブジェクトのプロパティとして設定します。これを関数に割り当...

MySQLストアドプロシージャにおけるカーソル(DECLARE)の原理と使い方の詳細な説明

この記事では、例を使用して、MySQL ストアド プロシージャにおけるカーソル (DECLARE) ...

React useEffect の理解と使用

目次繰り返しレンダリングループを避ける副作用の除去についてReact16.8 の新しい useEff...

Ubuntu 18.04にMySQL 5.7をインストールする

この記事は MySQL 公式サイトを参考にしてまとめたものであり、遭遇したいくつかの問題も記録されて...

実用的なクイックスタートReactルーティング開発

インストールインストールするには、次のコマンドを入力します。 // ネプ npm で react-r...

ソースコードの観点からキープアライブコンポーネントのキャッシュ原理に答える

今日は、早速本題に入り、面接中に尋ねられた質問、つまりキープアライブ コンポーネントのキャッシュ原理...

JavaScript 開発における標準コミットメッセージの重要性の詳細な説明

目次標準コミットメッセージの重要性コミットするコミットリント依存関係をインストールする.commit...