Vite + Vue3 + OpenLayers 手動激活地圖

一、需求說明

開發中遇到一種需求:

  1. 需要展示地圖,但默認不影響頁面滾動。
  2. 點擊地圖後,在地圖上方滾動鼠標滾輪可以縮放地圖。
  3. 點擊地圖之外的地方,鼠標再回到地圖上滾動滾輪時,頁面可以上下滾動,但地圖不會縮放。



二、開發環境

Vite + Vue3 + ol6


# 1、使用 Vite 創建項目;取個好聽的項目名;拉取 vue 的代碼模板
npm init vite@latest

# 2、初始化項目
cd you-project
npm install

# 3、安裝 ol
npm i ol -S

# 4、啓動項目
npm run dev



使用 Vite 初始化項目並安裝 ol ,更詳細做法可以查看 『Vite + Vue3 + OpenLayers 起步』



三、編碼

<template>
  <!-- 地圖容器 -->
  <div tabindex="2" id="map" class="map__x"></div>
</template>

<script setup>
import { ref, onMounted } from 'vue'
import { Map, View } from 'ol'
import Tile from 'ol/layer/Tile'
import OSM from 'ol/source/OSM'
import 'ol/ol.css'

const map = ref(null) // 綁定地圖實例的變量

// 初始化地圖
function initMap() {
  map.value = new Map({
    target: 'map', // 對應頁面裏 id 爲 map 的元素
    layers: [ // 圖層
      new Tile({ // 瓦片
        source: new OSM() // OSM底圖
      })
    ],
    view: new View({ // 地圖視圖
      projection: "EPSG:4326", // 投影規則
      center: [113.120444,23.034742], // 中心點
      zoom: 12 // 默認縮放級別
    })
  })
}

onMounted(() => {
  // 在元素加載完之後再執行地圖初始化
  initMap()
})
</script>

<style lang="scss" scoped>
.map__x {
  width: 600px;
  height: 600px;
  border: 1px solid #eee;
}
</style>

上面的代碼最主要的部分是 地圖容器(HTML) 部分添加了一個 tabindex 屬性,有了該屬性,鼠標放到地圖容器上默認也是不會被選中的,所以滾動的時候就是觸發頁面滾動,不會操作到地圖。


這其實是 HTML 原生的屬性,這個屬性指定 tab 鍵控制次序。W3C 上面說 Safari 不支持該屬性,但據我實際測試是支持的!



四、推薦

本例展示地址(vite+vue3+ol)

本例倉庫(vite+vue3+ol)


ol在vue2中使用(預覽)

ol在vue2中使用(倉庫)


OpenLayers 官網

《WebGIS之OpenLayers全面解析(第2版)》


如果不清楚 OpenLayers 是什麼,可以閱讀: 『Vite + Vue3 + OpenLayers 起步』

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章