微信小程序自定义导航栏与自带下拉刷新冲突
在使用HbuilderX开发微信小程序时(在HbuilderX中写代码,在微信开发者工具编译),由于微信小程序自带的导航栏功能少,样式单一等,于是采用colorUI自定义导航栏实现需求。而问题就一而再再而三的出现了:
- 自定义导航栏导致系统自带的下拉刷新不能用(官方回应这是微信小程序的bug)
- 采用HbuilderX自带的scroll-view组件的下拉刷新
- 但scroll-view在微信小程序却出现了:
- 无限刷新问题
- scroll-view下拉刷新区域滚动问题
现在我来一一记录我是怎么处理这些问题的。
1、在pages.json文件中自定义导航栏并将系统自带的下拉刷新关闭
{"path": "pages/home/home","style" :{"enablePullDownRefresh": false,"navigationStyle": "custom"}}
2、采用scroll-view的下拉刷新
用法:在整个template页面下(或者想触发下拉刷新的组件外)套一个scroll-view标签,并将refresher-enabled属性设置为true,意为开启自定义下拉刷新,具体文档链接如下:
scroll-view组件官方文档
3、解决小程序无限刷新的问题
这里我先跟大家解释一下为什么会出现这个问题,scroll-view的下拉刷新的开启与关闭是与他自带的一个属性refresher-triggered有关,如果值为true则开启下拉刷新,false则关闭
之所以会无限刷新是因为直接将refresher-triggered赋值为false不生效。具体解决办法如下:
<template><scroll-viewscroll-y :style="{height: verticalNavHeight + 'px'}" refresher-enabled="true":refresher-triggered="triggered" :refresher-threshold="100" @refresherrefresh="onRefresh()"@refresherrestore="onRestore()">......</scroll-view>
</template><script>
export default {data(){return{// 下拉刷新triggered: false,onRefreshing: false,refreshTime: 1000} },methods: {onRefresh() {if (this.onRefreshing) returnthis.onRefreshing = trueif (!this.triggered)this.triggered = truesetTimeout(() => {this.triggered = falsethis.onRefreshing = false// 刷新数据this.getData()setTimeout(() => {uni.showToast({title: 'success'})}, 100)}, this.refreshTime)},onRestore() {// 这一步是关键,官方文档this.triggered = 'restore'无效(亲测)this.triggered = false} }
}
</script>
4、解决scroll-view下拉刷新区域滚动问题
这又是什么问题呢?我们先来看看官方文档的描述
什么是区域滚动?
这里给大家解释一下,滚动分为页面滚动跟区域滚动,而区域是多高呢?则需要通过CSS设置一个固定高度,比如设置height:500px,则在高度500px内触发scroll-view区域滚动。
(注意:这里设置的高度需要是固定值px)
什么是页面滚动?
这里举个例子,比如手机竖屏长度是1000px,在这个页面的内容(组件)堆叠长度已经超过1000px,则会触发页面滚动,相应的右侧也会出现滚动条。
而当区域滚动的长度大于了页面滚动后,无论怎么滚动(拖动屏幕),触发的都是页面滚动!
所以当默认触发页面滚动后,区域滚动是不管用的,而且这时候下拉还会触发scroll-view的下拉刷新。
解决办法:设置scroll-view的高度小于页面高度或者等于页面高度(根据需求自行设计,不超过页面高度就行)
下面附带计算除去导航栏和tabBar的页面高度的代码:
// #ifdef MP-WEIXIN
// 导航栏的高度
let custom = uni.getMenuButtonBoundingClientRect();
Vue.prototype.CustomBar = custom.bottom + custom.top - e.statusBarHeight;
// #endif// scroll-view高度
uni.getSystemInfo({// 50是tabBar的高度success: (res) => {this.verticalNavHeight = res.screenHeight - this.CustomBar - 50}
})
如果想知道某个Dom元素的高度:
const query = uni.createSelectorQuery().in(this)query.select("#first-search").boundingClientRect(data => {console.log(data)this.searchHeight = data.height}).exec()
微信小程序自定义导航栏与自带下拉刷新冲突相关推荐
- 微信小程序自定义导航栏(带汉堡包菜单)
微信小程序自定义导航栏(带汉堡包菜单) 1.在app.json中 window配置navigationStyle (如果单独页面使用,可在页面的json文件配置) 2.计算相关值 整个导航栏的高度: ...
- 微信小程序自定义导航栏 navigation bar 返回键 首页
微信小程序自定义导航栏(wx_custom_navigation_bar) 自定义返回键.首页键,动态设置标题,响应式组件 版本号:2.0.0 作者:chen-yt github: https://g ...
- 微信小程序自定义导航栏如何实现(简洁版)~内附代码
先来张效果图 实现起来也是十分容易的,几行代码. Page({data: {},onLoad() {// 获取设备的信息let menuButtonObject = wx.getMenuButtonB ...
- 微信小程序-自定义导航栏
微信小程序-自定义导航栏 第一步 添加属性 "navigationStyle": "custom" 第二步 自定义导航栏 第二步 自定义组件 第四步 使用组件 ...
- 微信小程序自定义导航栏组件
效果图 首先要先在 json文件里加上 "navigationStyle":"custom", 这句,去掉原生的自定义导航栏 一.子组件-wxml <vi ...
- 微信小程序自定义导航栏组件,完美适配所有手机,可实现各种功能和情况
背景 在做小程序时,关于默认导航栏,我们遇到了以下的问题: Android.IOS手机对于页面title的展示不一致,安卓title的显示不居中 页面的title只支持纯文本级别的样式控制,不能够做更 ...
- 微信小程序自定义导航栏机型适配--底部Tabbar--view高度--底部按钮适配
自定义微信小程序头部导航栏 自定义微信小程序头部导航栏,有几种方式 方式一 {"navigationStyle": "custom" // 将navigatio ...
- 微信小程序自定义导航栏返回和标题
1.新建组件 index.json {"component": true } navbar.wxss //navbar.wxss .navbar{width: 100%;//设置导 ...
- 微信小程序自定义导航栏组件(完美适配所有手机),可自定义实现任何你想要的功能
背景 在做小程序时,关于默认导航栏,我们遇到了以下的问题: Android.IOS 手机对于页面 title 的展示不一致,安卓 title 的显示不居中 页面的 title 只支持纯文本级别的样式控 ...
最新文章
- 神经网络和深度学习简史(三)
- ARP解决方法/工具 真假ARP防范区别方法 ARP终极解决方案
- python开发框架 代码生成_500 行 Python 代码构建一个轻量级爬虫框架
- How to find CRM system's integrated ERP system
- 1 计算机网络体系结构与OSI参考模型
- day02_20190106 基础数据类型 编码 运算符
- websocket 应用实例
- spss和matlab主成分符号,主成分分析及MATLAB和SPSS求解整理
- python实现根据前序序列和中序序列求二叉树的后序序列
- 2019 CSS经典面试题(史上最全,持续更新中...)
- 国内镜像加速 Android 源码下载
- 对话亚洲高校首个博士论文奖-裘捷中丨KDD2022
- 小红书百万博主如何炼成?美妆博主专访
- 部署 HTTPS 访问 ( https:// )
- Unity-简单的坦克大战的一些思路
- 网站安全与渗透测试工程师岗位区别
- 前一个问题的答案后续
- 基于PT8.2柔性传感器使用
- R语言爬取中国天气网单个城市实时天气预报数据
- 【axios源码】- 取消请求cancel模块研读解析