在使用HbuilderX开发微信小程序时(在HbuilderX中写代码,在微信开发者工具编译),由于微信小程序自带的导航栏功能少,样式单一等,于是采用colorUI自定义导航栏实现需求。而问题就一而再再而三的出现了:

  • 自定义导航栏导致系统自带的下拉刷新不能用(官方回应这是微信小程序的bug)
  • 采用HbuilderX自带的scroll-view组件的下拉刷新
  • 但scroll-view在微信小程序却出现了:
    1. 无限刷新问题
    2. 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. 微信小程序自定义导航栏(带汉堡包菜单)

    微信小程序自定义导航栏(带汉堡包菜单) 1.在app.json中 window配置navigationStyle (如果单独页面使用,可在页面的json文件配置) 2.计算相关值 整个导航栏的高度: ...

  2. 微信小程序自定义导航栏 navigation bar 返回键 首页

    微信小程序自定义导航栏(wx_custom_navigation_bar) 自定义返回键.首页键,动态设置标题,响应式组件 版本号:2.0.0 作者:chen-yt github: https://g ...

  3. 微信小程序自定义导航栏如何实现(简洁版)~内附代码

    先来张效果图 实现起来也是十分容易的,几行代码. Page({data: {},onLoad() {// 获取设备的信息let menuButtonObject = wx.getMenuButtonB ...

  4. 微信小程序-自定义导航栏

    微信小程序-自定义导航栏 第一步 添加属性 "navigationStyle": "custom" 第二步 自定义导航栏 第二步 自定义组件 第四步 使用组件 ...

  5. 微信小程序自定义导航栏组件

    效果图 首先要先在 json文件里加上 "navigationStyle":"custom", 这句,去掉原生的自定义导航栏 一.子组件-wxml <vi ...

  6. 微信小程序自定义导航栏组件,完美适配所有手机,可实现各种功能和情况

    背景 在做小程序时,关于默认导航栏,我们遇到了以下的问题: Android.IOS手机对于页面title的展示不一致,安卓title的显示不居中 页面的title只支持纯文本级别的样式控制,不能够做更 ...

  7. 微信小程序自定义导航栏机型适配--底部Tabbar--view高度--底部按钮适配

    自定义微信小程序头部导航栏 自定义微信小程序头部导航栏,有几种方式 方式一 {"navigationStyle": "custom" // 将navigatio ...

  8. 微信小程序自定义导航栏返回和标题

    1.新建组件 index.json {"component": true } navbar.wxss //navbar.wxss .navbar{width: 100%;//设置导 ...

  9. 微信小程序自定义导航栏组件(完美适配所有手机),可自定义实现任何你想要的功能

    背景 在做小程序时,关于默认导航栏,我们遇到了以下的问题: Android.IOS 手机对于页面 title 的展示不一致,安卓 title 的显示不居中 页面的 title 只支持纯文本级别的样式控 ...

最新文章

  1. 神经网络和深度学习简史(三)
  2. ARP解决方法/工具 真假ARP防范区别方法 ARP终极解决方案
  3. python开发框架 代码生成_500 行 Python 代码构建一个轻量级爬虫框架
  4. How to find CRM system's integrated ERP system
  5. 1 计算机网络体系结构与OSI参考模型
  6. day02_20190106 基础数据类型 编码 运算符
  7. websocket 应用实例
  8. spss和matlab主成分符号,主成分分析及MATLAB和SPSS求解整理
  9. python实现根据前序序列和中序序列求二叉树的后序序列
  10. 2019 CSS经典面试题(史上最全,持续更新中...)
  11. 国内镜像加速 Android 源码下载
  12. 对话亚洲高校首个博士论文奖-裘捷中丨KDD2022
  13. 小红书百万博主如何炼成?美妆博主专访
  14. 部署 HTTPS 访问 ( https:// )
  15. Unity-简单的坦克大战的一些思路
  16. 网站安全与渗透测试工程师岗位区别
  17. 前一个问题的答案后续
  18. 基于PT8.2柔性传感器使用
  19. R语言爬取中国天气网单个城市实时天气预报数据
  20. 【axios源码】- 取消请求cancel模块研读解析

热门文章

  1. 人人极客专访 | 我和我们的操作系统
  2. DW1000 UWB用于pixhawk室内定位
  3. linux设置nexus开机自启动_linux nexus自启动
  4. Travel SCU - 4444
  5. CSS3 matrix矩阵
  6. 培训c语言程序,编程人员培训手册C语言程序设计基础.PPT
  7. 必备软件——others
  8. linux下使用命令行来调节系统音量的两种方法amixer和pactl
  9. Android 热修复方案分析
  10. BUCT-2023寒假集训-进阶训练赛(九)题解