微信小程序-账单页面月份悬浮替换

实现效果如图所示,废话不多说下拉看代码
效果展示

  1. 首先,在wxml文件中进行数据遍历渲染,并添加定位view(最为关键,如果不使用dom操作定位,会导致不同手机高度不同从而效果出现差异)
<view class="container">
    <!-- 悬浮窗内容 -->
    <view class="item_top suspension" wx:if="{{is_suspension}}">
        <picker mode="date" value="{{m.formattingDate(list[suspension_index].date)}}" end="{{nowDate}}" bindchange="changeDate" fields="month">
            <text>{{list[suspension_index].date}}</text>
            <text class="toDown"></text>
        </picker>
        <view class="item_total">已提现¥{{list[suspension_index].total}}</view>
    </view>
    
    <!-- 列表内容 -->
    <view wx:for="{{list}}" wx:key="unique">
        <view class="item_top">
            <picker mode="date" value="{{m.formattingDate(item.date)}}" end="{{nowDate}}" bindchange="changeDate" fields="month">
                <text>{{item.date}}</text>
                <text class="toDown"></text>
            </picker>
            <view class="item_total">已提现¥{{item.total}}</view>
        </view>
        <view class="item_content">
            <block wx:if="{{item.subList.length}}">
                <view class="subItem_box" wx:for="{{item.subList}}" wx:for-item="subItem" wx:key="unique" wx:for-index="subIndex">
                    <imageModule class="imageModule subItem_img" src="{{subItem.type == 1 ? wxPay : aliPay}}"></imageModule>
                    <view style="flex: 1">
                        <view>提现-{{subItem.type == 1 ? '微信' : '支付宝'}}</view>
                        <view class="subItem_time">{{subItem.date}}</view>
                    </view>
                    <view class="subItem_info">
                        <view style="font-weight: bold;">{{subItem.number}}</view>
                        <view style="font-size: 28rpx;">申请中</view>
                    </view>
                </view>
            </block>
            <view class="tips" wx:else>暂无提现记录~</view>
        </view>
        
        <!-- 月份定位 -->
        <view id="item{{index}}"></view>
    </view>
</view>
  1. 在onLoad进行处理,获取每个月份的高度并记录,监听页面滚动并计算
onLoad: function (options) {
    let list_height = []

	// list数组长度对应月份
    for (let i = 0; i < this.data.list.length; i++) {
        var query = wx.createSelectorQuery();
        query.select('#item' + i).boundingClientRect()
        query.exec(function(res){
        	// 获取月份定位view的高度
            list_height.push(res[0].top)
        })
    }

    this.setData({ list_height })
},

onPageScroll(e) {
    let { is_suspension, list_height, suspension_index } = this.data

    if (e.scrollTop > 55) {
    	// 是否显示悬浮,55为悬浮窗高度
        is_suspension = true
    } else {
        is_suspension = false
    }

    for (let i = 0; i < list_height.length; i++) {
        const itemPrev = list_height[i - 1] || 0;
        const item = list_height[i];

	// 判断滚动高度在当前月份模块底部与上一月份模块底部中间,则显示当前月份信息
        if (parseFloat(e.scrollTop) > parseFloat(itemPrev) && parseFloat(e.scrollTop) < parseFloat(item)) {
        	// 设置页面滚动对应月份内容范围,并在悬浮窗中显示相应月份数据
            suspension_index = i
            break
        }
    }

    this.setData({ is_suspension, suspension_index })
}
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
微信小程序是一种基于微信平台的应用的开发模式,可以快速的开发出符合用户需求的小程序。在小程序的开发中,组件是一个非常重要的概念,通过组件可以实现复用性和模块化编程思想。 组件应用是小程序开发的基础。通过组件可以将某一模块化并封装起来,使得组件可以在不同的页面间得到复用,大大提升了开发效率并减少了代码冗余。微信小程序提供了丰富的自带组件,包括文本、图片、按钮、输入框等等,开发者也可以自己开发组件来满足自己的需求。实际开发中,通过组件可以快速搭建页面框架和业务逻辑。 Demo是一个演示小程序的示例程序。在小程序的实际开发过程中,一个好的Demo非常重要。通过Demo,开发人员可以更深入的了解小程序的开发流程、组件的应用和实际的业务开发等等。在Demo中,通常会包括小程序的一些基础操作,如页面跳转、数据绑定、组件的使用等。而在实际开发中,Demo还会包括一些复杂的业务场景,如支付、登录、数据列表展示等等。Demo不仅为开发者提供了学习和实践的机会,也方便了使用者了解该小程序的功能和特点。 总之,微信小程序组件的应用和Demo的开发都是小程序开发过程中非常重要的两个部分。良好的组件应用和精心设计的Demo,可以在极短的时间内实现小程序开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值