我想延長/改變與一些特徵的mapbox地理位置控制,例如:如何包裹的UI控制(mapbox地理位置控制)
- 我想而不是一個FlyTo jumpTo的當前位置
- 當geocontrol按鈕打開時,我想添加一些行爲(例如阻止拖動)。
我該怎麼做?我試圖使一個包裝,但後來我得到了一些問題:
- 當切換按鈕的顏色將變成藍色但這 不再工作
- 我不知道怎麼的功能添加到的點擊按鈕。
我有一個fiddle顯示我試圖做一個包裝。正如你所看到的flyTo的作品。
mapboxgl.accessToken = 'pk.eyJ1IjoidG1jdyIsImEiOiJIZmRUQjRBIn0.lRARalfaGHnPdRcc-7QZYQ'
var map = new mapboxgl.Map({
container: 'map', // container id
style: 'mapbox://styles/mapbox/streets-v9', //stylesheet location
center: [-74.50, 40], // starting position
zoom: 9 // starting zoom
})
class GeolocateControlWrapper extends mapboxgl.GeolocateControl {
constructor() {
super()
}
_onSuccess(position) {
this._map.flyTo({
center: [position.coords.longitude, position.coords.latitude],
zoom: 17,
bearing: 0,
pitch: 0
})
this.fire('geolocate', position)
this._finish()
}
}
map.addControl(new GeolocateControlWrapper({
positionOptions: {
enableHighAccuracy: true,
timeout: 300
},
watchPosition: true
}), 'top-left')
編輯,更新: 我仍然有我的問題的第2部分的麻煩。我設法弄到了'包裝'的小提琴,但請參閱this。
Uncaught TypeError: Cannot read property 'extend' of undefined
at GeolocateControlWrapper._onClickGeolocate (eval at <anonymous> (0.b708727….js:485), <anonymous>:192:48)
_onClickGeolocate @ Maplayout.vue?f994:154
VM2654:1 Uncaught SyntaxError: Unexpected identifier
它引用這條線:
mapboxgl.util.extend(defaultGeoPositionOptions, this.options && this.options.positionOptions || {})
任何想法,爲什麼然而,在我的「現實生活」的環境點擊geocontrol按鈕時,我得到下面的錯誤?
編輯,更新: 得到它的工作使用下面的代碼:
class GeolocateControlWrapper extends mapboxgl.GeolocateControl {
_onSuccess (position) {
this._map.flyTo({
center: [position.coords.longitude, position.coords.latitude],
zoom: 17,
bearing: 0,
pitch: 0
})
this.fire('geolocate', position)
this._finish()
}
_setupUI (supported) {
super._setupUI(supported)
if (supported === false) return
this._geolocateButton.className += ' needsclick'
}
_onClickGeolocate() {
super._onClickGeolocate()
// toggle watching the device location
if (this.options.watchPosition) {
if (this._geolocationWatchID !== undefined) { // clear watchPosition
console.log('looks good in if....')
}
else {
// enable watchPosition
console.log('looks good in else....')
}
}
}
}
關於第二個問題的答案;所以我將_onClickGeolocate方法全部添加到我的包裝中,然後將this._map.dragPan.disable()添加到該包裝中,對吧?我該如何去引用其他mapbox模塊,因爲方法使用它擴展模塊:''const constOptions = util.extend(defaultGeoPositionOptions,this.options && this.options.positionOptions || {})''' – musicformellons
嘗試添加util模塊,使用''let mapboxUtil = require('../../../ node_modules/mapbox-gl/js/util/util')'''但是我得到'''./~/ mapbox-gl/js/util/util.js 模塊解析失敗:/home/usr/t1/node_modules/mapbox-gl/js/util/util.js意外的令牌(15:35) 您可能需要一個合適的裝載程序處理這種文件類型。 | * @private | */ | exports.easeCubicInOut =函數(t:數字):數字{ |如果(t <= 0)返回0; |如果(t> = 1)返回1; @ ./~/babel-loader/lib!./~/vue-loader/lib/selector.js? ''' – musicformellons
@musicformellons:嘗試'const util = require('mapbox-gl/js/util/util');' – sgelb