位置: IT常识 - 正文

微信小程序实现顶部固定底部分页滚动效果(微信小程序实现支付功能)

编辑:rootadmin
这篇文章主要介绍了微信小程序实现顶部固定底部分页滚动效果,本文大概给大家分享三种解决方案,每种方案给大家详细剖析通过代码解析哪种方案更适合,感兴趣的朋友跟随小编一起看看吧 目录

推荐整理分享微信小程序实现顶部固定底部分页滚动效果(微信小程序实现支付功能),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:微信小程序实现账号密码登录,微信小程序实现轮播图,微信小程序实现轮播效果的组件,微信小程序实现聊天功能,微信小程序实现发红包,微信小程序实现轮播效果的组件,微信小程序实现轮播效果的组件,微信小程序实现轮播效果的组件,内容如对您有帮助,希望把文章链接给更多的朋友!

方案说明:思路说明:

常见商品页效果:顶部banner+分类,下面商品列表。

方案说明:

方案1:整个页面滚动,滚动至某个位置fixed图中“顶部box2”,分页页面触底加载

方案2:页面高度为屏幕高度,商品部分使用scroll-view,scroll-view初始高度为屏幕高度-顶部高度,只滚动scroll-view。

思路说明:

  1 将整个页面分为上下两部分,整个页面高度100vh(原因1:scroll-view高度需要固定高度;原因2:出现两个滚动条)

  2 页面上半部分包括banner(box1)以及固定的搜索及tab(box2)

  3 根据顶部box的高度,算出下面scroll-view的高度(windowHieght - 200)

  4 scroll-view滑动到 顶部box1+margin10的高度,将box1隐藏,box2动画移至顶部;下面scroll高度+滚动高度(或box1高度) + margin10高度(确保scroll的商品吸顶之后任然沾满屏幕)

方案3:使用插件

微信小程序实现顶部固定底部分页滚动效果(微信小程序实现支付功能)

选择的是方案2,为什么不选择方案1,我们来剖析一下。

方案1适合页面交互比较简单,根据页面滚动高度隐藏展示即可。

  场景1:tab吸顶之后,切换tab请求数据,页面就会渲染为最初样式,不会吸顶。(请求会重新setData数据,有些数据有多有少)

复制以下代码可以直接演示demo效果

demo.wxml

<!--pages/demo/demo.wxml--><view class="wrap"><view class="top-box"><view class="top-box1">顶部box1</view><!-- <view class="top-box2"></view> --><scroll-view class="top-box2" scroll-into-view="{{scrollId}}" scroll-x="true"scroll-with-animation="true" ><block wx:for="{{cates}}" wx:key="index"><view class="{{item.id === currentId?'cate-item-act cate-item':'cate-item'}}" data-id="{{item.id}}" id="good{{item.id}}" bindtap="cateChange">{{item.name}}</view></block></scroll-view></view><scroll-view scroll-y="true" class="scroll-con" bindscroll="goodsViewScroll" bindscrolltoupper="goodsViewScrollTop"><view class="scroll-con-item" wx:for="{{cates}}" wx:key="index">{{item.name}}</view></scroll-view></view>

demo.js

Page({data: {cates:[{id:null,name:'全部'},{id:1,name:'分类1'},{id:2,name:'分类2'},{id:3,name:'分类3'},{id:4,name:'分类4'},{id:5,name:'分类5'},{id:6,name:'分类6'},{id:7,name:'分类7'},{id:8,name:'分类8'}],currentId:null,serviceList:[{id:1,name:'1'},{id:2,name:'2'},{id:3,name:'3'},{id:4,name:'4'},{id:5,name:'5'},{id:6,name:'6'},{id:7,name:'7'},{id:8,name:'8'}],scrollId:null,//滑动id,切换tab效果animationStyle:'',isNeedFixed:false},/*** 生命周期函数--监听页面加载*/onLoad(options) {let that = this;wx.getSystemInfo({success: function (res, rect) {that.setData({// 商品scroll高度 = 可使用窗口 - (顶部box的高度+margin20 -20(底部留白))scrollViewHeight: parseInt(res.windowHeight - 220 -20),scrollViewStyle:`height:${parseInt(res.windowHeight - 220-20)}px`})}})},cateChange(e){let currentId = e.currentTarget.dataset.id;let scrollId = e.currentTarget.id;this.setData({currentId,scrollId})},// 加this.data.isNeedFixed条件防止频繁的setdata// 1 隐藏box1,box2会自动吸顶 box2置顶// 2 设置scroll-view高度+120, 设置顶部box高度为box2高度goodsViewScroll(e){console.log(e.detail.scrollTop, this.data.isNeedFixed)if(e.detail.scrollTop >= 120 ){console.log('可以动画调整位置了')this.setData({isNeedFixed:true,box1Style:`height:0px;`,boxStyle:`height:80px;`,scrollViewStyle: `height:${this.data.scrollViewHeight + 120}px`,}}// if(e.detail.scrollTop < 120 ) {// console.log('需要保持原样')// this.setData({// isNeedFixed:false,// box1Style:`height:110px;`,// boxStyle:`height:200px;`,// scrollViewStyle: `height:${this.data.scrollViewHeight}px`,// },()=>{// wx.pageScrollTo({// scrollTop: 0,// })// })// }},goodsViewScrollTop(e){this.setData({isNeedFixed:false,box1Style:`height:110px;`,boxStyle:`height:200px;`,scrollViewStyle: `height:${this.data.scrollViewHeight}px`,})}})

demo.wxss

.wrap {height: 100vh;}.top-box {height: 200px;height: 200px;background-color: #fff;border: 1px solid #d1d1d1;transition:height 0.2s;-webkit-transition:height 0.2s; /* Safari */}.top-box1 {height: 110px;width: 100%;margin-bottom: 10px;background-color: #3293FF;overflow: hidden;transition:height 0.2s;-webkit-transition:height 0.2s; /* Safari */}.top-box2 {height: 80px;width: 100%;background-color: #ffbe32;white-space: nowrap;padding: 50rpx 0;box-sizing: border-box;}.top-box2 .cate-item {display: inline-block;padding: 10rpx 20rpx;font-size: 26rpx;margin-right: 20rpx;color: #767A84;}.top-box2 .cate-item:last-child{margin-right: 0rpx;}.top-box2 .cate-item-act {background: #3293FF;color: #fff;border-radius: 48rpx;}.scroll-con {padding: 0 10px;margin-top: 20px;box-sizing: border-box;background-color: #fff;}.scroll-con-item {height: 100px;width: 100%;background-color: salmon;margin-bottom: 10px;}.ani-btn {display: inline-block;padding: 20rpx;margin: 10rpx;border: 1px solid #d1d1d1;}@keyframes move{ from{transform: translateY( 30px)} to {transform: translateY( 0px)}}

说明1:scroll-into-view 设置哪个方向可滚动,则在哪个方向滚动到该元素

  scroll-view设置x轴滚动到scrollId位置 scroll-x="true"scroll-into-view="{{scrollId}}"    

  item子元素设置id="good{{item.id}}" 由于id不能已数字开头,所以前面拼了"good"

说明2:为什么要在bindscrolltoupper触顶事件中处理初始化样式,而不是在bindscroll的时候处理?

  使用bindscroll处理,滑动会有来回闪动的情况

这些只是大致思路,还有很多细节需要处理和考.......

到此这篇关于微信小程序实现顶部固定 底部分页滚动效果的文章就介绍到这了,更多相关小程序顶部固定内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

本文链接地址:https://www.jiuchutong.com/zhishi/310666.html 转载请保留说明!

上一篇:java非公平锁如何理解(java公平锁有哪些)

下一篇:RabbitMQ 常见问题(rabbitmq work queue)

  • 微信勿扰模式是对所有人吗(微信勿扰模式是针对个人还是所有人)

    微信勿扰模式是对所有人吗(微信勿扰模式是针对个人还是所有人)

  • AppStore是什么意思

    AppStore是什么意思

  • 手机qq怎么显示qq音乐(手机QQ怎么显示QQ音乐)

    手机qq怎么显示qq音乐(手机QQ怎么显示QQ音乐)

  • 笔记本按键失灵能修吗(Dell笔记本按键失灵)

    笔记本按键失灵能修吗(Dell笔记本按键失灵)

  • 抖音直播显示本场点赞是什么意思(抖音直播显示本人怎么弄)

    抖音直播显示本场点赞是什么意思(抖音直播显示本人怎么弄)

  • qq等级代挂什么意思(最新可用qq等级代挂软件)

    qq等级代挂什么意思(最新可用qq等级代挂软件)

  • oppo更新后怎么恢复原来版本(oppo更新后怎么长截屏)

    oppo更新后怎么恢复原来版本(oppo更新后怎么长截屏)

  • 微信录视频不显示发送(为什么微信录视频不出√号)

    微信录视频不显示发送(为什么微信录视频不出√号)

  • 电子秤数字乱跳的原因(家用电子秤数字乱跳)

    电子秤数字乱跳的原因(家用电子秤数字乱跳)

  • 苹果手机温度低关机怎么办(苹果手机温度低会充不进去电?)

    苹果手机温度低关机怎么办(苹果手机温度低会充不进去电?)

  • 清理微信缓存图片还有吗(清理微信缓存图片可以恢复嘛)

    清理微信缓存图片还有吗(清理微信缓存图片可以恢复嘛)

  • 定位不准什么原因(定位不准了)

    定位不准什么原因(定位不准了)

  • 电脑数字下标怎么打(电脑怎么弄数字下标)

    电脑数字下标怎么打(电脑怎么弄数字下标)

  • 面对面快传的视频在哪(面对面快传的视频找不到)

    面对面快传的视频在哪(面对面快传的视频找不到)

  • 小米迷你盒子怎么重置(小米迷你盒子怎样安装当贝市场到电视上)

    小米迷你盒子怎么重置(小米迷你盒子怎样安装当贝市场到电视上)

  • 如何将文件按顺序排列(如何将文件按顺序重命名)

    如何将文件按顺序排列(如何将文件按顺序重命名)

  • 微信小程序可以建商城吗(微信小程序可以改名字吗)

    微信小程序可以建商城吗(微信小程序可以改名字吗)

  • 荣耀20支持面部解锁吗(荣耀支持面部解锁的手机)

    荣耀20支持面部解锁吗(荣耀支持面部解锁的手机)

  • vivo手机相机时间水印设置在哪里(vivo手机相机时间地点设置在哪里)

    vivo手机相机时间水印设置在哪里(vivo手机相机时间地点设置在哪里)

  • 中国手机为什么不用北斗卫星(中国手机为什么不能用谷歌)

    中国手机为什么不用北斗卫星(中国手机为什么不能用谷歌)

  • 魅族pop耳机固件升级(魅族耳机pop1)

    魅族pop耳机固件升级(魅族耳机pop1)

  • 布莱斯峡谷国家公园的冬天,犹他州 (© Don Paulson/Danita Delimont)(美国布莱斯大峡谷成因)

    布莱斯峡谷国家公园的冬天,犹他州 (© Don Paulson/Danita Delimont)(美国布莱斯大峡谷成因)

  • vue实现思维导图(vue思维导图怎么下载)

    vue实现思维导图(vue思维导图怎么下载)

  • [JavaScript你真的以为这么简单吗]JavaScript高级

    [JavaScript你真的以为这么简单吗]JavaScript高级

  • 【学姐面试宝典】前端基础篇Ⅳ(JavaScript)(学长学姐面试要注意哪些细节)

    【学姐面试宝典】前端基础篇Ⅳ(JavaScript)(学长学姐面试要注意哪些细节)

  • 自行研发的无形资产不确认递延所得税
  • 土地出让价款
  • 5附加税政策优惠退税需要哪些资料
  • 税盘服务费抵税怎么做分录
  • 实收资本实缴需要什么手续
  • 以前月份暂估成本怎么冲
  • 个人所得税可以退几年前的?
  • 未预缴开票
  • 会议收入包括哪些
  • 手撕发票怎么区分地区开具
  • 注册资金未到账需要缴纳印花税吗
  • 外商投资企业所得税法第八条
  • 开给天猫的服务费分录如何做
  • 受托软件开发不转让著作权的账务处理
  • 专用发票报销时限
  • 预缴两个点的税是什么意思
  • 工资薪金与年终奖筹划
  • 本期准予扣除税额是什么
  • 社保和公积金的钱可以取出来吗
  • 增值税有留底怎么申请退税
  • 劳务派遣公司增值税税率
  • 公司商品房出售流程
  • 公益性捐赠税前扣除资格认定程序
  • win11怎么取消开机启动项
  • 确认预计负债的必要条件
  • 社保缴费要和工龄一致吗
  • 收到厂家返利怎么做账务处理
  • bios中如何关闭cd/dvd
  • 如何修改自己电脑物理地址
  • 美容美发属于什么品类
  • 重装系统前需要注意什么
  • mac侧边栏设置
  • 工作流activity
  • linux format命令
  • 销售商品收到商业汇票一张会计分录
  • abstract php
  • php去除空格和换行符
  • 员工安置费标准出台
  • 什么叫存续分立
  • 关键点检测backbone
  • thinkphp框架怎么用
  • 软件研发支出计入什么科目
  • 收回前欠货款存入银行的会计分录
  • win11系统中怎样调整office底色
  • redis相关
  • 未确认融资费用账务处理
  • 本地住宿费能报销吗
  • 报税网页打不开报表怎么办
  • 带附件的目录
  • 在linux服务器中新增加一块硬盘
  • 独立核算的分公司可以享受六税两费减半吗
  • 加计扣除减免政策
  • 个人所得税的征收
  • sql如何进行事务操作
  • 防暑降温费是不是必须发
  • 权益法核算投资收益纳税调整
  • 先抵扣后付款怎么做账
  • 房地产毛利额纳税调整
  • 事业单位研究开设的课题
  • 仓库管理办法有哪些
  • 公司销售部门购买产品
  • 银行扣掉的手续费怎么算
  • win7系统分辨率调整不了
  • linux安装linux
  • ubuntu20.04亮度调节
  • linux常用命令清除
  • win10更新提示错误
  • opengl读取obj文件
  • 欢迎使用来电提醒业务是什么意思
  • 一个简单的灵魂福楼拜
  • 获取本站的context root
  • 批处理copy合并文件
  • 获取nodejs命令行信息
  • nodejs如何使用
  • python中pandas.DataFrame对行与列求和及添加新行与列示例
  • 在windows 10中
  • jquery 异步加载
  • 重庆税务电子税务
  • 消费税的税收筹划ppt
  • 国家税务总局2016年17号公告
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设