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;