基于react native的锚点

embedded/2024/9/20 2:02:56/ 标签: react native, android, react.js

基于react native的锚点

    • 效果示例图
    • 示例代码

效果示例图

在这里插入图片描述

示例代码

/* eslint-disable react-native/no-inline-styles */
import React, { useEffect, useRef, useState } from 'react';
import {Image,ImageBackground,ScrollView,StyleSheet,Text,TouchableOpacity,View,
} from 'react-native';
import HTML from 'react-native-render-html';
import { pxToPd, pxToPdT } from '../../common/js/device';
const desc ='<p>如违反《赛事须知》中的内容,可能使我受到警告、判负、丧失比赛资格/获奖资格以及禁赛等赛事处罚,亦可能被请离现场。如违反《赛事须知》中的内容,可能使我受到警告、判负、丧失比赛资格/获奖资格以及禁赛等赛事处罚,亦可能被请离现场。如违反《赛事须知》中的内容,可能使我受到警告、判负、丧失比赛资格/获奖资格以及禁赛等赛事处罚,亦可能被请离现场。</p>';const tempData = [{id: 1,name: '工藤新一一级标题',data: [{id: 2,name: '二级标题002',content: desc,},{id: 3,name: '二级标题003',content: desc,},{id: 4,name: '二级标题004',content: desc,},],},{id: 5,name: '毛利兰一级标题',data: [{id: 6,name: '二级标题006',content: desc,},{id: 7,name: '二级标题007',content: desc,},{id: 8,name: '二级标题008',content: desc,},],},{id: 9,name: '流放了一级标题',data: [{id: 10,name: '二级标题0010',content: desc,},{id: 11,name: '二级标题0011',content: desc,},{id: 12,name: '二级标题0012',content: desc,},],},
];const TestCatalog = () => {const scrollViewRef = useRef(null);//列表数据const [dataList, setDataList] = useState([]);const viewRefs = useRef([]);const menuRef = useRef([]);const initFunction = () => {setDataList(() => tempData);};const goSkipHandle = row => {let tempArr = menuRef.current;tempArr.some(item => {if (item.id === row.id) {scrollViewRef.current.scrollTo({ y: item?.y - 100, animated: true });}});};const getPositionValue = (row, y) => {let tempMenu = [...menuRef.current];let tempItem = row;if (tempItem.y === undefined) {tempItem.y = y;}tempMenu.push(row);menuRef.current = tempMenu;};useEffect(() => {initFunction();return () => {};}, []);return (<><View style={{ flex: 1 }}><ScrollView ref={scrollViewRef}>{/* 列表内容 */}{dataList?.map((item, index) => (<Viewstyle={styles.ruleBlock}key={'ruleBlock-' + index}ref={ref => {viewRefs.current[item?.id] = ref;}}onLayout={() => {if (viewRefs.current[item?.id]) {viewRefs.current[item?.id].measure((x, y, width, height, pageX, pageY) => {console.log(x, y, width, height, pageX);getPositionValue(item, pageY);},);}}}>{/* 一级标题 */}<View style={styles.ruleBlockTitle}><ImageBackgroundstyle={styles.ruleBlockTitleBg}source={require('../../common/imgs/main_ruleDetail_titleBg.png')}><Textstyle={styles.ruleBlockTitleTxt}ellipsizeMode="middle"numberOfLines={1}>{item?.name}</Text></ImageBackground></View>{/* 装饰图 */}<Imagestyle={styles.ruleBlockDecorate}source={require('../../common/imgs/main_ruleDetail_tips.png')}/>{/* 列表内容-start */}{item?.data?.map((subitem, subindex) => (<Viewstyle={styles.ruleBlockSubCon}key={'ruleBlockSubCon-' + subindex}>{/* 二级标题 */}<Viewstyle={styles.ruleBlockSubTitle}ref={ref => {viewRefs.current[subitem?.id] = ref;}}onLayout={() => {if (viewRefs.current[subitem?.id]) {viewRefs.current[subitem?.id].measure((x, y, width, height, pageX, pageY) => {console.log(x, y, width, height, pageX);getPositionValue(subitem, pageY);},);}}}><Text style={styles.ruleBlockSubTitleTxt}>{subitem?.name}</Text></View>{/* 内容 */}<View style={{ width: '100%', height: pxToPd(24) }} /><View style={styles.ruleBlockSubDesc}><HTMLcontentWidth={100}source={{html: `<div>${subitem?.content}</div>`,}}/></View></View>))}{/* 列表内容-end*/}<View style={{ width: '100%', height: pxToPd(40) }} /></View>))}</ScrollView></View><View style={styles.modalWrap}>{dataList?.map(item => (<View><TouchableOpacity onPress={() => goSkipHandle(item)}><Textstyle={{width: '100%',height: pxToPd(60),lineHeight: pxToPd(60),textAlign: 'center',}}>{item?.name}</Text></TouchableOpacity>{item?.data?.map(subitem => (<TouchableOpacity onPress={() => goSkipHandle(subitem)}><Textstyle={{width: '100%',height: pxToPd(60),lineHeight: pxToPd(60),textAlign: 'center',}}>{subitem?.name}</Text></TouchableOpacity>))}</View>))}</View></>);
};const styles = StyleSheet.create({detailBg: {width: '100%',height: pxToPd(1624),},container: {flex: 1,position: 'absolute',top: 0,left: 0,right: 0,bottom: 0,},//内容ruleBlock: {width: '93.6%',marginLeft: '3.2%',borderRadius: pxToPd(40),backgroundColor: '#fff',minHeight: pxToPd(400),position: 'relative',marginBottom: pxToPd(97),},ruleBlockTitle: {width: pxToPd(533),height: pxToPd(86),marginLeft: -pxToPd(8),marginTop: -pxToPd(8),},ruleBlockTitleBg: {width: '100%',height: '100%',},ruleBlockTitleTxt: {height: pxToPd(86),width: pxToPd(500),lineHeight: pxToPd(86),fontSize: pxToPdT(32),fontWeight: 'bold',color: '#fff',marginLeft: pxToPd(19),},ruleBlockDecorate: {width: pxToPd(160),height: pxToPd(193),position: 'absolute',top: -pxToPd(14),right: -pxToPd(1),},ruleBlockSubCon: {width: '93.6%',marginLeft: '3.2%',marginTop: pxToPd(42),},ruleBlockSubTitle: {width: '100%',},ruleBlockSubTitleTxt: {width: '100%',fontSize: pxToPdT(30),fontWeight: 'normal',color: '#333',textAlign: 'center',},ruleBlockSubDesc: {width: '100%',},modalWrap: {borderRadius: pxToPd(24),width: pxToPd(300),position: 'absolute',top: 100,right: 20,backgroundColor: '#f5f5f5',flexDirection: 'column',},
});export default TestCatalog;

http://www.ppmy.cn/embedded/113032.html

相关文章

若依nday复现

前言 声明&#xff1a;此文章仅做学习&#xff0c;未经授权严禁转载。请勿利用文章内的相关技术从事非法测试&#xff0c;如因此产生的一切不良后果与文章作者无关 本文章只做简单汇总&#xff0c;在此感谢其他师傅的文章和分享 前置准备 环境搭建 下载&#xff1a;https:/…

微服务之间远程调用实现思路

项目使用的Spring Cloud Alibaba框架&#xff0c;微服务之间远程调用使用OpenFeign&#xff0c;具体实现步骤如下&#xff1a; &#xff08;1&#xff09;在api工程定义OpenFeign接口&#xff0c;使用FeignClient注解进行定义。 &#xff08;2&#xff09;服务提供方定义Open…

【FFmpeg应用场景概述】

Question FFmpeg应用场景概述 Answer FFmpeg是一个开源的音视频处理工具&#xff0c;广泛应用于多种场景。以下是一些常见的应用场景概述&#xff1a; 视频转码&#xff1a;FFmpeg支持多种音视频格式的转换&#xff0c;可以将视频文件从一种格式转换为另一种格式&#xff0c…

Vue基础明晰

Vue基础明晰 ​ Vue长期处于会写而不去理解&#xff0c;此文简单梳理一下。 ​ 一个Vue页面基本分为两部分&#xff1a;1.搜索、按钮等为主的表单域 2.展示数据库信息的表格域 Form表单&#xff1a; 一个Form表单其下为多个form-item&#xff0c;各搜索输入框都包裹在form-i…

HarmonyOS开发之使用Picker(从相册选择图片),并且通过Swiper组件实现图片预览

一&#xff1a;效果图&#xff1a; 二&#xff1a;添加依赖 import picker from ohos.file.picker; 三&#xff1a;创建showDialog showDialog() {AlertDialog.show({message: 从相册选择,alignment: DialogAlignment.Bottom,offset: { dx: 0, dy: -12 },primaryButton: {val…

pip安装包、卸载包、更新包命令

pip安装包、卸载包、更新包命令 pip命令具体说明备注pip list列出当前环境下已安装的包pip install [安装包名]安装指定包pip install SomePackage1.0.4安装指定版本pip uninstall [卸载包名]卸载指定包pip install --upgrade [要升级的包名称]升级指定包pip install -U [要升…

C++笔记---继承(下)

1. 无法被继承的类 要实现无法被继承的类有两种方式&#xff1a; C98及其之前&#xff1a;将父类的构造函数设置为private成员。 C11及其之后&#xff1a;使用final关键字修饰父类。 将构造函数设置为private是因为&#xff1a;子类的构成必须调用父类的构造函数&#xff0c;但…

C++学习笔记(26)

七 、显示字符串中的字符 从界面上输入一个字符串&#xff08;C 风格&#xff09;&#xff0c;把字符串中的每个字符显示出来&#xff0c;如果输入的是"abc"&#xff0c;要求&#xff1a; 1&#xff09;正序显示&#xff1a;a b c 2&#xff09;逆序显示&#xff1a;…

NC 矩阵最长递增路径

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 给定一个 n 行…

【SQL】百题计划:SQL最基本的判断和查询。

[SQL]百题计划 Select product_id from Products where low_fats "Y" and recyclable "Y";

车辆重识别(关于卷积神经网络一些资料)2024/9/11

关于卷积神经网络的介绍 一&#xff0c;全连接神经网络 1&#xff0c;全连接神经网络的整体结构 X代表左边输入的数据&#xff08;向量或者矩阵等等&#xff09;&#xff0c;Y代表模型对数据处理之后的结果&#xff0c;中间的节点都可以算作为隐藏层。 2&#xff0c;全连接神经…

【Linux】进程调度与切换

【Linux】进程调度与切换 1. 基本概念2. 进程切换3. 进程调度3.1运行队列实现优先级设计3.2 处理效率问题3.3 活动队列与过期队列3.4 如何解决饥饿问题3.5 active指针和expired指针 1. 基本概念 竞争性: 系统进程数目众多&#xff0c;而CPU资源只有少量&#xff0c;甚至1个&am…

【乐吾乐大屏可视化组态编辑器】API接口文档(pgsql)

API接口文档&#xff08;pgsql&#xff09; 在线使用&#xff1a;https://v.le5le.com/ 采用前后端分离架构&#xff0c;乐吾乐后端服务提供一整套完整的web组态编辑器的所有数据接口&#xff0c;包含2D/3D图纸接口服务、文件接口服务和用户接口服务等&#xff0c;安装包版本…

通信工程学习:什么是GPON吉比特无源光网络

GPON&#xff1a;吉比特无源光网络 GPON&#xff08;Gigabit-Capable Passive Optical Network&#xff0c;吉比特无源光网络&#xff09;是一种基于ITU-T G.984.x标准的最新一代宽带无源光综合接入技术。该技术以其高带宽、高效率、大覆盖范围和用户接口丰富等特点&#xff0c…

tcp线程进程多并发

tcp线程多并发 #include<myhead.h> #define SERPORT 8888 #define SERIP "192.168.0.118" #define BACKLOG 20 typedef struct { int newfd; struct sockaddr_in cin; }BMH; void *fun1(void *sss) { int newfdaccept((BMH *)sss)->newfd; …

Java 枚举 新特性

Java 枚举&#xff08;enum&#xff09;自JDK 1.5引入以来&#xff0c;随着版本的升级不断增强。本文将回顾枚举的演进&#xff0c;尤其是结合switch语句的应用&#xff0c;展示枚举如何在现代Java中变得更加灵活。 1. JDK 1.5&#xff1a;Java 枚举的诞生 在JDK 1.5之前&…

新手教学系列——用Nginx将页面请求分发到不同后端模块

在当今的Web开发中,前后端分离架构已经成为主流,尤其是大型应用项目。前端可以通过Vue这样的框架来统一管理页面和用户交互,而后端则通常会拆分成多个微服务模块,以便应对不同业务需求和功能扩展。在这样的架构下,Nginx作为一个高效、灵活的Web服务器,能够帮助我们将前端…

探索pytorch数据集中Mnist数据集的数据格式

1 问题 1.1安装pytorch时&#xff0c;由于使用的vscode编译器&#xff0c;所以采用pip进行安装&#xff0c;但是遇到pytorch版本与python版本不对应的问题。 1.2探索pytorch数据集中Mnist数据集的数据格式。 2 方法 2.1 首先查看自己电脑能够适应的pytorch版本2.2 打开pytorch的…

Windows与Linux下 SDL2的第一个窗口程序

Windows效果和Linux效果如下&#xff1a; 下面是代码&#xff1a; #include <stdio.h> #include "SDL.h"int main(int argc, char* argv[]) { // 初始化SDL视频子系统if (SDL_Init(SDL_INIT_VIDEO) ! 0){// 如果初始化失败&#xff0c;打印错误信息printf(&…

python植物大战僵尸项目源码【免费】

植物大战僵尸是一款经典的塔防游戏&#xff0c;玩家通过种植各种植物来抵御僵尸的进攻。 源码下载地址&#xff1a; 植物大战僵尸项目源码 提取码: 8muq