如果要在不同方法中添加clearInterval怎么办?

时间:2019-08-13 06:20:57

标签: node.js vue.js setinterval nuxt clearinterval

我已经使用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)
  },

2 个答案:

答案 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中,因为您不需要它是被动的。