React Native 头部 滑动吸顶效果的实现

效果如下图所示:

实现方法:

一、吸顶组件封装

StickyHeader .js
import * as React from 'react';
import {StyleSheet, Animated} from "react-native"; /**
* 滑动吸顶效果组件
* @export
* @class StickyHeader
*/
export default class StickyHeader extends React.Component { static defaultProps = {
stickyHeaderY: -,
stickyScrollY: new Animated.Value(),
}; constructor(props) {
super(props);
this.state = {
stickyLayoutY: ,
};
} // 兼容代码,防止没有传头部高度
_onLayout = (event) => {
this.setState({
stickyLayoutY: event.nativeEvent.layout.y,
});
}; render() {
const {stickyHeaderY, stickyScrollY, children, style} = this.props;
const {stickyLayoutY} = this.state;
let y = stickyHeaderY !== - ? stickyHeaderY : stickyLayoutY;
const translateY = stickyScrollY.interpolate({
inputRange: [-, , y, y + ],
outputRange: [, , , ],
}); return (
<Animated.View
onLayout={this._onLayout}
style={
[
style,
styles.container,
{transform: [{translateY}]}
]}
> {children} </Animated.View>
)
}
} const styles = StyleSheet.create({
container: {
zIndex:
},
});

二、使用

import React, {Component} from 'react';
import {Animated, FlatList, Text, View, StyleSheet} from 'react-native';
import StickyHeader from "./StickyHeader"; export default class MovieListScreen extends Component { constructor(props) {
super(props);
this.state = {
movieList: [, , , , , , , , , , , , , , , , ], scrollY: new Animated.Value(),
headHeight: -
};
} _keyExtractor = (item, index) => index.toString(); _itemDivide = () => {
return <View style={{height: , backgroundColor: '#ccc'}}/>;
}; render() {
return (
<Animated.ScrollView
style={{flex: 1}}
onScroll={
Animated.event(
[{
nativeEvent: {contentOffset: {y: this.state.scrollY}} // 记录滑动距离
}],
{useNativeDriver: true}) // 使用原生动画驱动
}
scrollEventThrottle={1}
> <View onLayout={(e) => {
let {height} = e.nativeEvent.layout;
this.setState({headHeight: height}); // 给头部高度赋值
}}>
<View>
<Text style={styles.topHeader}>这是头部</Text>
</View>
</View> <StickyHeader
stickyHeaderY={this.state.headHeight} // 把头部高度传入
stickyScrollY={this.state.scrollY} // 把滑动距离传入
>
<View>
<Text style={styles.tab}>这是顶部</Text>
</View>
</StickyHeader> <FlatList
data={this.state.movieList}
renderItem={this._renderItem}
keyExtractor={this._keyExtractor}
ItemSeparatorComponent={this._itemDivide}
/> </Animated.ScrollView> )
} _renderItem = (item) => {
return (
<View>
<Text style={{height: }}></Text>
</View>
);
}; } const styles = StyleSheet.create({
container: {
flex: ,
},
topHeader: {
height: ,
textAlign: "center",
},
tab: {
height: ,
zIndex: ,
textAlign: "center",
backgroundColor: "red"
}
});

参考:

https://www.jb51.net/article/162381.htm

本博客地址: wukong1688

本文原文地址:https://www.cnblogs.com/wukong1688/p/11045306.html

转载请著名出处!谢谢~~

[RN] React Native 头部 滑动吸顶效果的实现的更多相关文章

  1. [RN] React Native 实现图片预览

    [RN] React Native 实现图片预览 效果预览: 代码如下: 'use strict'; import React, {Component} from 'react'; import {I ...

  2. [RN] React Native 下实现底部标签(支持滑动切换)

    上一篇文章 [RN] React Native 下实现底部标签(不支持滑动切换) 总结了不支持滑动切换的方法,此篇文章总结出 支持滑动 的方法 准备工作之类的,跟上文类似,大家可点击上文查看相关内容. ...

  3. react.js中实现tab吸顶效果问题

    在react项目开发中有一个需求是,页面滚动到tab所在位置时,tab要固定在顶部. 实现的思路其实很简单,就是判断当滚动距离scrollTop大于tab距离页面顶部距离offsetTop时,将tab ...

  4. [RN] React Native 幻灯片效果 Banner

    [RN] React Native 幻灯片效果 Banner 1.定义Banner import React, {Component} from 'react'; import {Image, Scr ...

  5. 自定义tab吸顶效果一(原理)

    PS:问题:什么是吸顶,吸顶有什么作用,吸顶怎么使用? 在很多app商城中,介绍软件的时候就会使用吸顶效果, 吸顶有很多作用,一个最简单粗暴的作用就是,让用户知道此刻在浏览哪个模块,并可以选择另外的模 ...

  6. 基于scroll的吸顶效果

    本次要实现的是一种常见的网页效果,如下: 页面由头部,导航,主体内容三部分组成,当页面发生滚动时,头部逐渐隐藏,导航部分向上移动,直到导航部分距离浏览器顶部为零时,导航部分固定不动,保持吸顶效果,如下 ...

  7. better-scroll之吸顶效果巨坑挣扎中

    今天和大家分享下better-scroll这款移动端用来解决各种滚动需求的插件(目前已经支持PC) 关于其中的API大家可以去官网看下  这里就给大家介绍几种常用的以及需要注意的点是什么 首先说一下b ...

  8. js之吸顶效果

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. [RN] React Native 使用 阿里 ant-design

    React Native 使用 阿里 ant-design 实例效果如图: 一.安装 npm install antd-mobile-rn --save npm install babel-plugi ...

随机推荐

  1. UVA 583 分解质因数

    Webster defines prime as:prime (prim) n. [ME, fr. MF, fem. of prin first, L primus; akin to L prior] ...

  2. ReentrantReadWriteLock可重入,锁升级,锁降级

    public class ReentrantReadWriteLockTest { public static void main(String[] args) throws InterruptedE ...

  3. openresty 报错:lua entry thread aborted: runtime error

    [1]问题现象 (1)本地openresty系统 (2)报错信息 2019/09/10 08:13:55 [error] 2385#2385: *4 lua entry thread aborted: ...

  4. R数据挖掘 第一篇:聚类分析(划分)

    聚类是把一个数据集划分成多个子集的过程,每一个子集称作一个簇(Cluster),聚类使得簇内的对象具有很高的相似性,但与其他簇中的对象很不相似,由聚类分析产生的簇的集合称作一个聚类.在相同的数据集上, ...

  5. win10系统优化

    1.服务:关闭 windows update\ windows search \ windows 备份 2.系统:高级系统设置->性能最优,同事修改虚拟内存如下 3.任务管理器:关闭多余的启动项 ...

  6. 异步编程的上下文与操作符--await/async generator/yield

    上下文的保存机制: 1.保存到异步类型中:promise & future & closure & observable: 2.栈帧保存:其它保存机制: 3.保存到服务提供方的 ...

  7. PYTHON的ASCII码转换

    首先,我们要知道ASCII的ord 这个变值,附上代码: c=input("请输入一个字符:") print (c+"的ASCII码为 ".ord(c)) #用 ...

  8. mssql 根据执行计划细节做优化操作

    示例: 1.如果select * 通常情况下聚集索引会比非聚集索引更优. 2.如果出现Nested Loops,需要查下是否需要聚集索引,非聚集索引是否可以包含所有需要的列. 3.Hash Match ...

  9. .net H5微信,支付宝充值

    using clientpay.Data.AlipayConfig; using clientpay.Data.BLL; using clientpay.Data.Entity; using Aop. ...

  10. C# 常用工具方法之DataTable(一)

    1.DataTable 转 泛型T的List /// <summary> /// 数据集DataTable转换成List集合 /// </summary> /// <ty ...