【小程序】小程序使用vant Weapp的popup时,设置position:fixed无效的问题

文章讲述了作者在使用有赞popup组件时遇到的底部fixed失效问题,通过设置popup高度、分部middleView和bottomView并控制overflow属性,最终解决了页面滚动问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近要实现是一个筛选的pop,用了有赞的popup组件,初始绘制时如下,没有问题

滑动的时候发现,底部用的fixed无效,会随着pop的页面一起滚动。

看了下原因和解决方案,大多都是前端H5,借鉴各位大佬的思路。

解决思路如下:设置pop高度为屏幕高度windowHeight(去除手机通知栏和小程序标题栏),pop里面分为中间middleView和底部bottomView两部分,底部bottomView指定高度bottomHeight,设置中间middleView的高度middleHeight=windowHeight-bottomHeight。编译运行,啪啪打脸。

pop虽然设置了高度,但是页面超出了范围,设置的高度其实就没什么用了。

所以在pop的custom-style里面设置overflow:hidden,在middleView的style里面设置scroll。

okk。

代码就很简单了。

 wxml里面。

<van-popup show="{{ showRightPop }}" bind:close="onClose" position="right" custom-style="width:85%;display:flex;flex-direction:column;height:{{windowHeight}}px;overflow:hidden">
</van-popup>
 <view class="middleView" style="height: {{middleHeight}}px;overflow: scroll;display: flex;flex-direction: column;">
</view>

js里面。 

        let windHeight = wx.getSystemInfoSync().windowHeight;
        this.setData({
            middleHeight: windHeight - 100,
            windowHeight: windHeight
        })
       

本次分享到此结束。 

2023.12.21补充

试了一下把pop和mid里面的height去掉,发现也是可以的,所以解决这个问题的关键就在于给pop设置hidden,给mid设置auto或者scroll。不过这样就需要在mid里面加一个margin-bottom,不然显示不全,或者加一个空白view设置高度。

欢迎大家批评指正。 

### 微信小程序实现底部弹出层的方法 #### 使用 `wx.setActionSheet` 实现底部弹出菜单 微信小程序内置了 `wx.getActionInfo()` 和 `wx.showActionSheet()` API 来创建简单的底部弹出菜单。这种方式适合于提供少量选项供用户选择的情况。 ```javascript // 调用 wx.showActionSheet 显示底部菜单 wx.showActionSheet({ itemList: ['A', 'B', 'C'], success(res) { console.log(`选择了第 ${res.tapIndex} 项`); } }); ``` 此方法简单易用,但对于复杂场景可能不够灵活[^1]。 #### 自定义底部弹出层组件 对于更复杂的交互需求,则可以考虑构建自定义的底部弹出层组件。通过组合 `<view>`、`<cover-view>` 等基础标签以及 CSS 动画属性来自由设计样式和行为逻辑。 ```html <!-- wxml 文件 --> <view class="popup-mask" bindtap="hidePopup" hidden="{{!isShow}}"> <view class="popup-content"> <!-- 这里放置具体的内容 --> </view> </view> <!-- wxss 文件 --> .popup-mask { position: fixed; bottom: 0; width: 100%; background-color: rgba(0, 0, 0, .5); } .popup-content { height: 30vh; background-color: white; } /* js文件 */ Page({ data: { isShow: false }, showPopup() { this.setData({ isShow: true }); }, hidePopup() { this.setData({ isShow: false }); } }) ``` 这种方法允许完全控制外观与功能,适用于需要高度定制化的场合[^2]。 #### 利用第三方库简化开发过程 如果不想从零开始编写代码,也可以借助成熟的 UI 库如 WeUI 或 Vant Weapp 中已经封装好的 BottomSheet 组件快速搭建所需的效果。这些库通常会附带详细的文档说明和支持社区,有助于加快项目进度并减少错误发生几率[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值