Tshoiasc
Tshoiasc
  • 发布:2022-04-18 15:01
  • 更新:2022-04-22 16:11
  • 阅读:646

【报Bug】nvue页面position:sticky 与 bindingX相关冲突问题

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 12.2.1

HBuilderX类型: Alpha

HBuilderX版本号: 3.4.6

手机系统: Android

手机系统版本号: Android 11

手机厂商: 小米

手机机型: Redmi K40

页面类型: nvue

vue版本: vue2

打包方式: 离线

项目创建方式: HBuilderX

示例代码:
<template>  
    <scroller ref="page">  
<refresh class="refresh" @refresh="onrefresh" @pullingdown="onpullingdown"  
            :display="page_refreshing?'show':'hide'">  
            <loading-indicator color="#999"></loading-indicator>  
</refresh>  
<view>  
<view class="container">  
                <view class="navbar-box" ref="navbar" style="position:sticky;height:88px;width:750rpx"></view>  
</view>  
</view>  
    </scroller>  
</template>  

onReady监听:

onReady() {  
            this.navbarHeight = plus.navigator.getStatusbarHeight() + (this.systemInfo.platform == "ios" ? 44 :  
                48)  
            let that = this  
            setTimeout(() => {  
                let navbar = that.getEl(this.$refs.navbar)  
                let page = that.getEl(this.$refs.page)  
                var gesTokenObj = BindingX.bind({  
                    anchor: page,  
                    eventType: 'scroll',  
                    props: [{  
                        element: navbar,  
                        property: 'opacity',  
                        expression: `1-(abs(y)/${that.navbarHeight})`  
                    }]  
                }, function(e) {  
                    console.log(e)  
                    console.log("1",navbar)  
                    console.log(that.$refs.container)  

                });  
                this.navbar_active = gesTokenObj.token;  
            }, 300)  

        },  

操作步骤:

看看下拉和上拉效果

预期结果:

理论上不应该有两个能显示到视图层的navbar 但是更不应该ref选择不上后浮上来的navbar

实际结果:

不管用户如何滑动都可以根据该表达式改变navbar的透明度

bug描述:

1.对于nvue 的position:sticky 的元素 会形成上下两层
在页面初始化时会显示其中一层,在页面下滑后会显示另外一层(这个很容易测试,我就不贴代码了,不加背景不加background,把opacity设置上就能看到有重叠的两个了,现在是Android发现了ios还没进行测试)
2.如第一条所说,这个情况会产生两个节点,而且当给节点赋予ref属性时在onReady事件选择bindingX的token后绑定相关视觉表达式仅会在页面第一次进入后在未执行上滑操作前执行的下拉刷新操作会对该节点生效。(个人感觉其实是生效了,但是生效的是已经被压在后面的那个节点)。

2022-04-18 15:01 负责人:DCloud_Android_ST 分享
已邀请:
DCloud_App_Array

DCloud_App_Array

确实是Android平台实现sticky的机制存在的问题,目前暂时只能设置停靠区域不使用透明背景色避免。
后续我们会改进优化,但还没有具体的时间点。

  • Tshoiasc (作者)

    谢谢回复。这个问题通过用bindingX的transform变着法的实现sticky逻辑的给强行解决了一下,现在看起来没什么大问题就是没具体测试性能。

    2022-05-11 10:51

该问题目前已经被锁定, 无法添加新回复