ios微信小程序table头部与左侧固定双重滚动会抖动的坑,解决思路

在这里插入图片描述

正常情况是左右滑动时,左侧固定不动,上下滑动时表头不动;而且需求不是完整页面滚动。而是单独这个表滚动;

第一个坑是他有一个ios自带的橡胶上下回弹效果。导致滚动时整个表都跟着回弹;
这个是很好解决。微信开发官网/uniapp都有属性可以改

<scroll-view :enhanced="true" :bounces="false"> </scroll-view>

第二个坑。当向y轴滑动时。x轴的方向会轻微的缓动,
想要和安卓一样的效果,滑动y,x轴,每次只有一个方向滚动;
尝试方法有;
做一个假的表头;

<view class="thead" :style="{left:myPos+'px'}">
表头
</view>

<scroll-view scroll-y :enhanced="true" :bounces="false"  @scroll="onscrollY">
<scroll-view scroll-x :enhanced="true" :bounces="false"  @scroll="onscrollX">
<view class="tbody">
 	<view class="tr" v-for="(tr,index) in trList" :key="index">
                <view class="td">{
   {
   tr.date}}</view>
         			...
              </view>
</view>
 </scroll-view>
 </scroll-view>

侦听onscrollX 滑动。让表头跟着位移。但是还是不行。滚动时thead会比表身慢;没有对齐。这是scroll本身事件延时导致的。

第二个思路。既然假thead比真表身滚动时无法对齐。那么就再做一个假表身。=》整个假表。假表用来显示。真表用来滚动;

用来显示的表我们称为a表。用来滚动的表我们称为b容器,b容器是一个与a表宽高位置完全一致的容器。他将覆盖在a表的上层。并且透明度为0;
这里是重点。必须要保证ab的位置大小完全一致;

//用来显示的表;a表
 <scroll-view scroll-y scroll-x  :enhanced="true" :bounces="false" :scroll-top="my" :scroll-left="mx">
 
 <view class="thead" style="height:30px" >
              <view class="th" v-for="(item,index) in headList" 		:key="index">{
   {
   item.title}}</view>
            </view>

            <view class="tbody ">
             
              <view class="tr" v-for="(tr,index) in trList" :key="index">
                <view class="td">{
   {
   tr.date}}</view>
         			...
              </view>
            </view>
</view>
</scroll-view>

//用来滚动的表;b容器
<scroll-view scroll-y :enhanced="true" :bounces="false"  @scroll="onscrollY">
//与表头宽高一致
 <view class="thead" style="height:30px"></view >
<scroll-view scroll-x :enhanced="true" :bounces="false"  @scroll="onscrollX">
<view class="tbody">
 	//与表身宽高一致
</view>
 </scroll-view>
 </scroll-view>

侦听滚动;

   onscroll(e) {
         
      setTimeout(() => {
   
        this.mx = e.detail.scrollLeft;
      }, 0);
    },
    onscroll2(e) {
   
      setTimeout(() => {
   
        this.my = e.detail.scrollTop;
      
       
      }, 0);
     
    },

这里还会有一个坑,前面说了scroll本身有延时;当滚动b容器到顶部的时候手指离开后。会有概率导致a表还没有滚动到顶部;还差一小段。因为b容器已经到顶部了。所以无法滚动;这就很尴尬了;
在这里插入图片描述
这个也有思路;
获取a表的滚动位置和b容器的滚动位置;对比。如果b容器已经到顶部。而a表没有到顶部。那么手指离开后,设置this.my=0; 以此类推。底部,最左,最右;

最终完全解决;得到和安卓效果相似的表;

相关推荐

  1. 程序自定义头部

    2023-12-21 06:40:03       30 阅读
  2. IPTCP报文固定头部字段

    2023-12-21 06:40:03       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-21 06:40:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-21 06:40:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-21 06:40:03       82 阅读
  4. Python语言-面向对象

    2023-12-21 06:40:03       91 阅读

热门阅读

  1. iOS 收集 SDK 内部 log

    2023-12-21 06:40:03       74 阅读
  2. Web 安全之文件上传漏洞详解

    2023-12-21 06:40:03       63 阅读
  3. 【ARM 安全系列介绍 3.2 -- Base64 介绍】

    2023-12-21 06:40:03       48 阅读
  4. 探索Node.js包管理器npm:介绍与使用指南

    2023-12-21 06:40:03       50 阅读
  5. 【工业智能】音频信号相关场景

    2023-12-21 06:40:03       55 阅读
  6. C语言实现寻找10000以内的完数

    2023-12-21 06:40:03       58 阅读
  7. Oracle中Null和‘‘的区别

    2023-12-21 06:40:03       65 阅读
  8. 12月20日,每日信息差

    2023-12-21 06:40:03       63 阅读
  9. 前端加密后端校验(MD5)

    2023-12-21 06:40:03       72 阅读
  10. 2019QWB growpjs

    2023-12-21 06:40:03       60 阅读
  11. linux下载yum和python

    2023-12-21 06:40:03       71 阅读