fix(harmony): 双列模式首次切换时瀑布流错位导致图片重影
鸿蒙下双列 items 一直在 display:none 状态下渲染,首次切换时 boundingClientRect 测得尺寸为 0,waterfallflow 算出来的 left/top 让 items 全部叠在一起。 修复:通过 :key 加 isList 前缀,切换模式时强制重建 DOM,新 DOM 在 display:flex 可见状态下生成,测量正确。 平台判断放在 mixin 的 goodsItemKey 方法里用 JS 条件编译,模板 只调方法,避免在 vue 模板里写 #ifdef/#else(uni-app 不支持)。
This commit is contained in:
@@ -489,6 +489,20 @@ export default {
|
||||
},
|
||||
genNonDuplicate(len = 6) {
|
||||
return Number(Math.random().toString().substr(3, len) + Date.now()).toString(36);
|
||||
},
|
||||
/**
|
||||
* 鸿蒙下双列 items 一直在 display:none 状态下渲染,首次切换时尺寸测量不对导致瀑布流错位
|
||||
* 通过 :key 加 isList 前缀,切换模式时强制重建 DOM,新 DOM 在可见状态下生成,测量正确
|
||||
* H5/微信不受影响,走原 item.id
|
||||
*/
|
||||
goodsItemKey(item) {
|
||||
// #ifdef MP-HARMONY
|
||||
return (this.isList ? 's-' : 'd-') + item.id;
|
||||
// #endif
|
||||
|
||||
// #ifndef MP-HARMONY
|
||||
return item.id;
|
||||
// #endif
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user