plus.nativeObj.View 使用 setStyle 设置定位之后,内部的 GIF 图片无法跟随移动, iOS 平台没有这个问题。

plus.nativeObj.View 使用 setStyle 设置定位之后,内部的 GIF 图片无法跟随移动, iOS 平台没有这个问题。

示例代码:

const src = ""; // 本地某gif图片路径
const res = uni.getSystemInfoSync();
const clientWidth = res.windowWidth
const clientHeight = res.windowHeight  

const tags: PlusNativeObjViewDrawTagStyles[] = [
{ tag: 'img', id: 'img', src: src as string }
];

var view = new plus.nativeObj.View('yspc',
{ left: (clientWidth - 70) + 'px', top: (clientHeight - 66) + 'px', height: '66px', width: '66px' },
tags
);

view.show();  

let startOffsetX = 0;
let startOffsetY = 0;

view.addEventListener("touchstart", function (event) {
startOffsetX = event.clientX;
startOffsetY = event.clientY;
});

view.addEventListener("touchmove", function (event) {
const { screenX, screenY } = event;  

view.setStyle({  
  left: screenX - startOffsetX + 'px',  
  top: screenY - startOffsetY + 'px',  
});

}, false);

操作步骤:

运行上述代码即可复现。

预期结果:

拖动 View 时内部的 img 元素跟随移动。

实际结果:

iOS 平台表现正常, Android 平台 img 图片依旧停留在原地。

bug描述:

plus.nativeObj.View 使用 setStyle 设置定位之后,安卓平台下,内部的 gif img 仍然停留在原处,iOS没有这个问题。


2 回复

我也遇到这个问题了,有解决方案没?


这是一个已知的Android平台上的plus.nativeObj.View的兼容性问题。在Android平台上,当使用setStyle改变View的位置时,内部的GIF图片不会跟随父容器移动。

解决方法可以考虑以下两种方案:

  1. 使用绝对定位重新绘制图片:
view.draw([{
    tag: 'img',
    id: 'img',
    position: {top:'0px', left:'0px'},
    src: src
}]);
回到顶部