一丧鸯、需求說明
Vite + Vue3 + OpenLayers 手動激活地圖
開發(fā)中遇到一種需求:
- 需要展示地圖仇参,但默認不影響頁面滾動嘹叫。
- 點擊地圖后,在地圖上方滾動鼠標滾輪可以縮放地圖诈乒。
- 點擊地圖之外的地方罩扇,鼠標再回到地圖上滾動滾輪時,頁面可以上下滾動怕磨,但地圖不會縮放喂饥。
二、開發(fā)環(huán)境
Vite + Vue3 + ol6
# 1肠鲫、使用 Vite 創(chuàng)建項目员帮;取個好聽的項目名;拉取 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", // 投影規(guī)則
center: [113.120444,23.034742], // 中心點
zoom: 12 // 默認縮放級別
})
})
}
onMounted(() => {
// 在元素加載完之后再執(zhí)行地圖初始化
initMap()
})
</script>
<style lang="scss" scoped>
.map__x {
width: 600px;
height: 600px;
border: 1px solid #eee;
}
</style>
上面的代碼最主要的部分是 地圖容器(HTML)
部分添加了一個 tabindex
屬性,有了該屬性袋毙,鼠標放到地圖容器上默認也是不會被選中的型檀,所以滾動的時候就是觸發(fā)頁面滾動,不會操作到地圖听盖。
這其實是 HTML
原生的屬性胀溺,這個屬性指定 tab
鍵控制次序裂七。W3C
上面說 Safari
不支持該屬性,但據(jù)我實際測試是支持的月幌!
四碍讯、推薦
如果不清楚 OpenLayers
是什么,可以閱讀: 『Vite + Vue3 + OpenLayers 起步』