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

RN向上向下滑动组件封装(带有渐变色)

这段组件代码逻辑是出事有一个View和下面的块,下面的块也就是红色区域可以按住向上向下滑动,当滑动到屏幕最上面则停止滑动,再向上滑动的过程中,上方的View的背景色也会有个渐变效果,大概逻辑就是这样

代码如下

import React, {useEffect, useRef, useState} from 'react';
import {View,PanResponder,Animated,StyleSheet,SafeAreaView,Dimensions,Text,
} from 'react-native';const App = () => {const [colors, setColors] = useState('rgba(237, 36, 46, 1)');const scrollY = useRef(new Animated.Value(300)).current;const currentHeight = useRef(300);const panResponder = useRef(PanResponder.create({onStartShouldSetPanResponder: () => true,onPanResponderMove: (evt, gestureState) => {const newHeight = currentHeight.current - gestureState.dy;const clampedHeight = Math.min(Math.max(newHeight, 0),Dimensions.get('window').height,);scrollY.setValue(clampedHeight);},onPanResponderRelease: () => {currentHeight.current = scrollY._value;},}),).current;useEffect(() => {const listener = scrollY.addListener(({value}) => {// console.log('ScrollY value changed:', value); // animail处的高度// console.log('Dimensions.get().height', Dimensions.get('window').height); // 设备总高度console.log('上方View的高度等于总高度-下方animail的高度',Dimensions.get('window').height - value,);// 因为我这里需求是给View一个完整颜色,根据rgba值从0到1显示,因此我要将上面高度分成100份// 向上或者向下减少多少份 当前高度-总高度const nums =(Dimensions.get('window').height - value) /(Dimensions.get('window').height - 300);// 设置颜色setColors('rgba(237,36,46,' + nums + ')');});// 在组件卸载时移除监听器return () => {scrollY.removeListener(listener);};}, []);return (<View style={styles.container}><Viewstyle={{backgroundColor: colors,width: 300,height: 50,}}></View><Animated.Viewstyle={[styles.box,{height: scrollY.interpolate({inputRange: [0, 600],outputRange: [0, 600],}),backgroundColor: 'red',},]}{...panResponder.panHandlers}><SafeAreaView>{/* 占位内容 */}<Text>1111</Text></SafeAreaView></Animated.View></View>);
};const styles = StyleSheet.create({container: {flex: 1,},box: {position: 'absolute',bottom: 0,left: 0,right: 0,},
});export default App;

效果图
初始效果
在这里插入图片描述
当往上滑动时效果
在这里插入图片描述
可以看出滑动过程中上方块的背景色被改变了,我这个块当顶部就停止滑动了

下面是我项目里面需要用的效果,当到顶部时会把背景做个替换,这个也就是在代码里面的nums为0时,就是顶部可以在那里去做背景替换

在这里插入图片描述

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

相关文章:

  • 27、Lua 学习笔记之五(Lua中的数学库)
  • 【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
  • OpenHarmony实战开发-页面深色模式适配。
  • 域名解析出现错误,该如何解决?
  • 从iPhone恢复已删除照片的最佳软件
  • MySQL模糊查询
  • QEMU_v8搭建OP-TEE运行环境
  • C++11 设计模式0. 设计模式的基本概念,设计模式的准则,如何学习设计模式,24种设计模式的分为3大类
  • (十)C++自制植物大战僵尸游戏设置功能实现
  • 数据结构——通讯录(顺序表的实战项目)
  • 数据库-Redis(14)
  • Thinkphp5.0命令行创建验证器validate类
  • 人民网至顶科技:《开启智能新时代:2024中国AI大模型产业发展报告发布》
  • AI大模型探索之路-应用篇13:企业AI大模型选型指南
  • 【安全】查杀linux上c3pool挖矿病毒xmrig
  • 车载测试:UDS之BootLoader刷写
  • OpenHarmony实战开发-MpChart图表实现案例。
  • brpc: bthread使用
  • H.265视频直播点播录像EasyPlayer.js流媒体播放器用户常见问题及解答
  • 蓝桥杯杂题选做
  • 【HTML】简单制作一个分形动画
  • JVM修炼之路【11】- 解决内存溢出、内存泄漏 以及相关案例
  • Java面试题:描述Java 17中的密封接口及其用途
  • C++11的新特性
  • 【C语言__动态内存管理__复习篇6】
  • C语言 | Leetcode C语言题解之第30题串联所有单词的子串
  • 大数据dolphinscheduler 本地容器化安装
  • 简单的车牌号识别
  • openGauss学习笔记-261 openGauss性能调优-使用Plan Hint进行调优-将部分Error降级为Warning的Hint
  • CSS水波纹效果