uni-app mapContext.translateMarker 轨迹显示问题:浏览器有轨迹显示,但安卓手机无法显示轨迹
uni-app mapContext.translateMarker 轨迹显示问题:浏览器有轨迹显示,但安卓手机无法显示轨迹
| 信息类别 | 详情 |
|---|---|
| 产品分类 | uniapp/App |
| PC开发环境操作系统 | Windows |
| PC开发环境操作系统版本号 | win10 |
| HBuilderX类型 | 正式 |
| HBuilderX版本号 | 3.1.18 |
| 手机系统 | Android |
| 手机系统版本号 | Android 11 |
| 手机厂商 | 华为 |
| 手机机型 | ART-AL00x |
| 页面类型 | nvue |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
示例代码:
carline(linedata) {
linedata = [{
latitude: 34.032236,
longitude: 108.720464
},
{
latitude: 34.042236,
longitude: 108.710688
},
{
latitude: 34.052236,
longitude: 108.720688
},
{
latitude: 34.072236,
longitude: 108.720688
}
]
let _this = this
clearInterval(_this.timer);
let cargps = []
linedata.forEach(function(item, index) {
cargps.push({
id: index,
latitude: item.latitude,
longitude: item.longitude,
iconPath: '../../static/iconpj/carbule.png',
width: 20,
height: 20,
})
})
var i = 0;
_this.markers = [cargps[i]]
var mapContext = uni.createMapContext("myMap", this);
let translateMarkerConfig = {
markerId: 0,
destination: {
latitude: cargps[i].latitude,
longitude: cargps[i].longitude,
},
duration: 1000,
animationEnd: function() {
console.log('1轨迹回放完成')
// 轨迹回放完成
},
fail(e) {
// 轨迹回放失败
console.log('轨迹回放失败' + e)
},
}
mapContext.translateMarker(translateMarkerConfig)
console.log(cargps[i])
}
_this.timer = setInterval(() => {
console.log(cargps[i].latitude)
let timefink = {
markerId: 0,
destination: {
latitude: cargps[i + 1].latitude,
longitude: cargps[i + 1].longitude,
},
duration: 1000,
animationEnd: function() {
console.log('2轨迹回放完成')
// 轨迹回放完成
},
fail(e) {
// 轨迹回放失败
console.log('轨迹回放失败' + e)
},
}
mapContext.translateMarker(timefink)
i++
if (i + 1 == cargps.length) {
i = 0
clearInterval(_this.timer);
}
}, 1000);
操作步骤:
carline(linedata) {
linedata = [{
latitude: 34.032236,
longitude: 108.720464
},
{
latitude: 34.042236,
longitude: 108.710688
},
{
latitude: 34.052236,
longitude: 108.720688
},
{
latitude: 34.072236,
longitude: 108.720688
}
]
let _this = this
clearInterval(_this.timer);
let cargps = []
linedata.forEach(function(item, index) {
cargps.push({
id: index,
latitude: item.latitude,
longitude: item.longitude,
iconPath: '../../static/iconpj/carbule.png',
width: 20,
height: 20,
})
})
var i = 0;
_this.markers = [cargps[i]]
var mapContext = uni.createMapContext("myMap", this);
let translateMarkerConfig = {
markerId: 0,
destination: {
latitude: cargps[i].latitude,
longitude: cargps[i].longitude,
},
duration: 1000,
animationEnd: function() {
console.log('1轨迹回放完成')
// 轨迹回放完成
},
fail(e) {
// 轨迹回放失败
console.log('轨迹回放失败' + e)
},
}
mapContext.translateMarker(translateMarkerConfig)
console.log(cargps[i])
}
_this.timer = setInterval(() => {
console.log(cargps[i].latitude)
let timefink = {
markerId: 0,
destination: {
latitude: cargps[i + 1].latitude,
longitude: cargps[i + 1].longitude,
},
duration: 1000,
animationEnd: function() {
console.log('2轨迹回放完成')
// 轨迹回放完成
},
fail(e) {
// 轨迹回放失败
console.log('轨迹回放失败' + e)
},
}
mapContext.translateMarker(timefink)
i++
if (i + 1 == cargps.length) {
i = 0
clearInterval(_this.timer);
}
}, 1000);
预期结果:
carline(linedata) {
linedata = [{
latitude: 34.032236,
longitude: 108.720464
},
{
latitude: 34.042236,
longitude: 108.710688
},
{
latitude: 34.052236,
longitude: 108.720688
},
{
latitude: 34.072236,
longitude: 108.720688
}
]
let _this = this
clearInterval(_this.timer);
let cargps = []
linedata.forEach(function(item, index) {
cargps.push({
id: index,
latitude: item.latitude,
longitude: item.longitude,
iconPath: '../../static/iconpj/carbule.png',
width: 20,
height: 20,
})
})
var i = 0;
_this.markers = [cargps[i]]
var mapContext = uni.createMapContext("myMap", this);
let translateMarkerConfig = {
markerId: 0,
destination: {
latitude: cargps[i].latitude,
longitude: cargps[i].longitude,
},
duration: 1000,
animationEnd: function() {
console.log('1轨迹回放完成')
// 轨迹回放完成
},
fail(e) {
// 轨迹回放失败
console.log('轨迹回放失败' + e)
},
}
mapContext.translateMarker(translateMarkerConfig)
console.log(cargps[i])
}
_this.timer = setInterval(() => {
console.log(cargps[i].latitude)
let timefink = {
markerId: 0,
destination: {
latitude: cargps[i + 1].latitude,
longitude: cargps[i + 1].longitude,
},
duration: 1000,
animationEnd: function() {
console.log('2轨迹回放完成')
// 轨迹回放完成
},
fail(e) {
// 轨迹回放失败
console.log('轨迹回放失败' + e)
},
}
mapContext.translateMarker(timefink)
i++
if (i + 1 == cargps.length) {
i = 0
clearInterval(_this.timer);
}
}, 1000);
实际结果:
app端无轨迹显示
bug描述:
carline(linedata) {
linedata = [{
latitude: 34.032236,
longitude: 108.720464
},
{
latitude: 34.042236,
longitude: 108.710688
},
{
latitude: 34.052236,
longitude: 108.720688
},
{
latitude: 34.072236,
longitude: 108.720688
}
]
let _this = this
clearInterval(_this.timer);
let cargps = []
linedata.forEach(function(item, index) {
cargps.push({
id: index,
latitude: item.latitude,
longitude: item.longitude,
iconPath: '../../static/iconpj/carbule.png',
width: 20,
height: 20,
})
})
var i = 0;
_this.markers = [cargps[i]]
var mapContext = uni.createMapContext("myMap", this);
let translateMarkerConfig = {
markerId: 0,
destination: {
latitude: cargps[i].latitude,
longitude: cargps[i].longitude,
},
duration: 1000,
animationEnd: function() {
console.log('1轨迹回放完成')
// 轨迹回放完成
},
fail(e) {
// 轨迹回放失败
console.log('轨迹回放失败' + e)
},
}
mapContext.translateMarker(translateMarkerConfig)
console.log(cargps[i])
}
_this.timer = setInterval(() => {
console.log(cargps[i].latitude)
let timefink = {
markerId: 0,
destination: {
latitude: cargps[i + 1].latitude,
longitude: cargps[i + 1].longitude,
},
duration: 1000,
animationEnd: function() {
console.log('2轨迹回放完成')
// 轨迹回放完成
},
fail(e) {
// 轨迹回放失败
console.log('轨迹回放失败' + e)
},
}
mapContext.translateMarker(timefink)
i++
if (i + 1 == cargps.length) {
i = 0
clearInterval(_this.timer);
}
}, 1000);
app 打印台 都进不去轨迹成功失败的回调 其余所有cosoler 都能打出来
更多关于uni-app mapContext.translateMarker 轨迹显示问题:浏览器有轨迹显示,但安卓手机无法显示轨迹的实战教程也可以访问 https://www.itying.com/category-93-b0.html
5 回复
nvue页面我记得app端好像是要放到计算属性computed里面然后重新赋值在放到map那里才会显示的。
更多关于uni-app mapContext.translateMarker 轨迹显示问题:浏览器有轨迹显示,但安卓手机无法显示轨迹的实战教程也可以访问 https://www.itying.com/category-93-b0.html
留个联系方式么?大佬?
已解决 不要用vue 用nvue
大佬是怎么解决的呢 可以分享下么
这是一个典型的Android端地图API兼容性问题。在uni-app中,translateMarker方法在Android和iOS端的实现机制不同,导致动画效果存在差异。
主要问题分析:
-
Android端动画队列问题:Android端的地图组件对连续调用
translateMarker支持不完善,当快速连续调用时可能出现动画丢失。 -
时序控制问题:使用
setInterval直接连续调用translateMarker,在Android端容易导致前一个动画还未完成就被下一个覆盖。
建议修改方案:
carline(linedata) {
let _this = this
clearInterval(_this.timer);
let cargps = linedata.map((item, index) => ({
id: index,
latitude: item.latitude,
longitude: item.longitude,
iconPath: '../../static/iconpj/carbule.png',
width: 20,
height: 20,
}))
_this.markers = [cargps[0]]
var mapContext = uni.createMapContext("myMap", this);
let i = 0;
function moveToNext() {
if (i >= cargps.length - 1) {
i = 0;
return;
}
let config = {
markerId: 0,
destination: {
latitude: cargps[i + 1].latitude,
longitude: cargps[i + 1].longitude,
},
duration: 1000,
animationEnd: function() {
console.log('轨迹点移动完成: ' + (i + 1))
i++;
setTimeout(moveToNext, 50); // 添加延迟确保动画队列稳定
},
fail: function(e) {
console.log('轨迹回放失败: ' + JSON.stringify(e))
// 失败后也继续执行
i++;
setTimeout(moveToNext, 50);
}
}
mapContext.translateMarker(config)
}
// 启动第一个点的移动
moveToNext();
}

