class $getPositions { constructor(arg) { this.id = arg.id || 0 //任务id this.fn = arg.fn ? function (data) { arg.fn(data) } : function (data) { console.log("未设置输出回调") return data } this.ourPosition = [] //全部位置 this.nowPosition = [] //当前位置 this.onceNowPosition = [] //当前一次位置 this.getOnceSPosition = null this.state = false this.isContinued = false this.isContinuedTimeInt = null this.isContinuedTimeOut = null return this } //开始获取 init () { //判断权限 return this } continued () { //开始持续获取定位 console.log("开始持续定位") let that = this this.isContinued = true if (this.isContinuedTimeInt) { console.log("重复开始持续定位") return } else { that.once(function (res) { if (res.state == false) { console.log(res.intlat) } }) this.isContinuedTimeInt = setInterval(() => { that.once(function (res) { if (res.state == false) { console.log(res.intlat) } }) }, 5000) } } continuedTime (val) { //开始持续获取定位 let that = this if (val != 1) { // console.log(that.id,"开始持续定位") this.isContinued = true that.once(function (res) { if (res.state == false) { // console.log(res.intlat) that.outData() } }) if (this.isContinuedTimeOut) { // console.log("重复开始持续定位") return } } this.isContinuedTimeOut = setTimeout(() => { that.once(function (res) { if (res.state == false) { // console.log(res.intlat) that.outData() if (res.ok) { //返回成功 that.continuedTime(1) } else { //返回失败 that.continuedTime(1) } } }) }, 3000) } overContinued () { // console.log("结束持续定位") let that = this if (this.isContinued) { this.isContinued = false if (this.isContinuedTimeInt) { clearInterval(that.isContinuedTimeInt) this.isContinuedTimeInt = null } if (this.isContinuedTimeOut) { clearTimeout(that.isContinuedTimeOut) this.isContinuedTimeOut = null } } this.isContinued = false that.outData('out') } once (fn) { // console.log("开始获取一次定位"); this.state = true let ok = true let that = this, fns = fn || '', outit = function () { if (fns) { fns({ state: that.state, intlat: that.onceNowPosition, ok: ok }) } else { that.outData() } } outit() let success = function (position) { // console.log(position); var lat = position.coords.longitude//经度 var lon = position.coords.latitude//纬度 // console.log("成功返回经纬度信息"); // console.log(lon, lat, "成功"); that.onceNowPosition = [lat, lon] that.state = false ok = true outit() } let error = function (error) { // console.log(error, "失败"); let msg = "none" switch (error.code) { case error.PERMISSION_DENIED: msg = "User denied the request for Geolocation." break case error.POSITION_UNAVAILABLE: msg = "Location information is unavailable." break case error.TIMEOUT: msg = "The request to get user location timed out." break case error.UNKNOWN_ERROR: msg = "An unknown error occurred." break } that.onceNowPosition = msg that.state = false ok = false outit() } let options = { enableHighAccuracy: true, // timeout: 5000, timeout: Infinity, maximumAge: 0, } this.getOnceSPosition = navigator.geolocation.getCurrentPosition( success, error, options ) } //结束获取 outInit () { } //抛出数据 outData (val) { let d = { state: this.state, intlat: this.onceNowPosition } if (val) { d[val] = val } this.fn(d) } } // export default $getPositions;