我已经使用moveMarker
的{{1}}方法来使我在mapbox-gl中的标记沿着我的路线行进,并且我已经播放按钮以触发该功能。我的问题是,如果要使用clearInterval创建暂停按钮,该怎么办?
我尝试在setInterval
中创建clearInterval
的函数,但是不起作用
这是我移动标记的功能:
moveMarker
这是停止功能:
moveMarker () {
const moveCoordinate = []
const loop = setInterval(() => {
if (this.index + 1 === (this.coordinates.length - 1)) {
clearInterval(loop)
}
for (let index = 0; index < moveCoordinate.length; index++) {
moveCoordinate[index].remove()
}
this.map.panTo(this.coordinates[this.index])
const lat = this.coordinates[this.index][0]
const lng = this.coordinates[this.index][1]
const newMarker = new mapboxgl.LngLat(lat, lng)
console.log('new', newMarker)
const markerMapbox = new mapboxgl.Marker()
.setLngLat(newMarker)
.addTo(this.map)
moveCoordinate.push(markerMapbox)
this.index++
}, 1000)
},
答案 0 :(得分:1)
首先,您应该将时间间隔存储在data属性中,以便可以在stop
方法中对其进行访问。然后在stop
方法中,只需使用存储的clearInterval
调用interval
:
export default {
...
data() {
return {
interval: null
}
},
methods: {
moveMarker () {
const moveCoordinate = []
this.interval = setInterval(() => {
if (this.index + 1 === (this.coordinates.length - 1)) {
clearInterval(this.interval)
}
for (let index = 0; index < moveCoordinate.length; index++) {
moveCoordinate[index].remove()
}
this.map.panTo(this.coordinates[this.index])
const lat = this.coordinates[this.index][0]
const lng = this.coordinates[this.index][1]
const newMarker = new mapboxgl.LngLat(lat, lng)
console.log('new', newMarker)
const markerMapbox = new mapboxgl.Marker()
.setLngLat(newMarker)
.addTo(this.map)
moveCoordinate.push(markerMapbox)
this.index++
}, 1000)
},
stop() {
clearInterval(this.interval)
},
},
...
}
答案 1 :(得分:0)
在clearInterval
方法上调用moveMarker
不会做任何事情。您需要将间隔ID保存在stop
可以访问的位置。
例如在moveMarker
内部:
this.intervalId = loop
然后:
stop () {
clearInterval(this.intervalId)
}
您无需将intervalId
添加到data
中,因为您不需要它是被动的。