当前位置: 首页 > news >正文

React Native 实现滑一点点内容区块指示器也滑一点点

效果图如上,内容滑一点点,指示器也按比例话一点点,列表宽度跟数据有关。

实现思路如下:

1.监听列表滑动事件,获取列表横向滑动距离,假设为A;

2.获取列表的宽度,及列表可滑动的宽度,假设为B;

3.获取指示器宽度,及指示器可滑动的宽度;假设为C;

4.计算指示器滑动距离,假设为X;

5.根据 滑动距离/列表可滑宽度 = 滑动距离/指示器可滑宽度,得出A/B=X/C,

所以X= A/B * C,把ABC数据带进来,即可算出指示器滑动距离,并设置给指示器item的左间距。

代码实现如下:UI样式如下

<View> <FlatListhorizontal={true}showsHorizontalScrollIndicator={false}data={tripData}renderItem={({item, index, separators}) => this.renderItem(item, index, length)}keyExtractor={(item, index) => index.toString()}renderScrollComponent={props => (<ScrollView {...props} />)}getItemLayout={(data, index) => ({length: this.vItemWidth, offset: (this.vItemWidth + 5) * index, index})}onTouchStart={(e) => this.scrollEnable(false)}onTouchCancel={(e) => this.scrollEnable(true)}onScroll={this.onScroll}/>{this.renderIndicator()}</View>renderIndicator() {return(<View style={styles.indicatorContainer}><Viewref={(view) => {this.indicatorView = view;}}style={[styles.indicatorItem]}/></View>);};scrollEnable(enable) {//处理一些滑动冲突事件}renderItem(item, index, length) {
//item的样式
}

滑动算法如下:

onScroll = (event) => { let nativeEvent = {...event.nativeEvent};let offsetX = nativeEvent.contentOffset.x;//用户横向滑动距离let indicatorWidth = styles.indicatorContainer.width;//指示器容器宽度let indicatorItemWidth = styles.indicatorItem.width;  //指示器宽度let indicatorLeft = offsetX / this.slideWidth * (indicatorWidth - indicatorItemWidth); this.indicatorView.setNativeProps({marginLeft: indicatorLeft}); };//列表可滑距离=列表总宽度 - 单屏宽度
列表总宽度= item的宽度 * item的个数 + item间间距 * (item个数 - 1) + 左间距 + 有间距;
列表可滑距离 = 列表总宽度 - 单屏显示的宽度;

http://www.lryc.cn/news/546888.html

相关文章:

  • 怎么写C#命令行参数程序,及控制台带参数案例(程序完整源码)下载
  • 全国青少年航天创新大赛各项目对比分析
  • 基于RAG的法律条文智能助手
  • 智能对讲机:5G+AI赋能下的石油工业新“声”态
  • leetcode日记(77)子集Ⅱ
  • Linux tar命令
  • 【nodeJS】服务端连接mysql、定义一个接口,并在前端调用
  • 驱动开发系列40 - Linux 显卡KMD驱动代码分析(一) - 设备初始化过程
  • 玩转大语言模型——Ubuntu系统环境下使用llama.cpp进行CPU与GPU混合推理deepseek
  • 20250301在chrome中安装CRX猫抓
  • Docker 深度解析:适合零基础用户的详解
  • LeetCode 分割回文串(回溯、dp)
  • 期权帮|股指期货入门知识:什么是股指期货基差?什么是股指期货价差?
  • 解锁GPM 2.0「卡顿帧堆栈」|代码示例与实战分析
  • Python:类型转换和深浅拷贝,可变与不可变对象
  • Redis——缓存穿透、击穿、雪崩
  • 8.1.STM32_OLED
  • Gartner发布安全运营指标构建指南
  • 【赵渝强老师】监控Redis
  • 【Unity】搭建HTTP服务器并解决IP无法访问问题解决
  • 如何远程访问svn中的URL
  • Free Auto Clicker - 在任意位置自动重复鼠标点击
  • 0005__PyTorch 教程
  • Unity Burst编译
  • 软件测试中的BUG
  • LabVIEW基于IMAQ实现直线边缘检测
  • C#:LINQ学习笔记01:LINQ基础概念
  • 15Metasploit框架介绍
  • NLP如何训练AI模型以理解知识
  • 【树莓派学习】树莓派3B+的安装和环境配置