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. 中文情感分析——snownlp类库 源码注释及使用

    最近发现了snownlp这个库,这个类库是专门针对中文文本进行文本挖掘的. 主要功能: 中文分词(Character-Based Generative Model) 词性标注(TnT 3-gram 隐 ...

  2. ioc与bean管理

    IOC称之为控制反转,简单来说就是将对象的创建的权利和对象的声明周期的管理过程交给Spring框架来处理,在这个开发过程中不再需要关注对象的创建和生命周期的管理,而是在需要的时由Spring框架提供, ...

  3. http响应总结:常见http响应错误总结

    工作中经常会被同事问这个http请求为什么调不通,我虽然能解释清楚错误是什么,但是没有总结过,想到刚开始时,也是看了别人的文章才会的,所以总结一下,贡献一下自己的经验. http 404 响应 404 ...

  4. 2019-11-29-WPF-高速书写-StylusPlugIn-原理

    原文:2019-11-29-WPF-高速书写-StylusPlugIn-原理 title author date CreateTime categories WPF 高速书写 StylusPlugIn ...

  5. JavaScript变量与数据类型

    变量 javascript的变量很松散,每个变量初始仅仅用于保存一个占位符而已.定义变量的操作符是 var, var 后面跟着一个标识符--当作变量的名字. 比如: var myname;//定义了一 ...

  6. SQL 复制表到另一个表

    SqlServer 复制表结构和表数据 复制表数据到已存在的表 INSERT INTO targetTableName SELECT COLUMNS FROM sourceTableName; 复制表 ...

  7. APS.NET MVC + EF (14)---项目框架搭建

    一:框架搭建     1:先创建Model. 2:创建数据访问接口层.IUserInfoDal 在该接口中定义了常见的方法CURD以及分页方法. public interface IUserInfoD ...

  8. RFID相关知识总结(超高频UHF)

    RFID标签分类 1.LF(Low frequency) 低频 频段范围: 125 KHz-135KHz(ISO18000-2) 常见应用:该频段特点是具有良好的物体穿透能力.广泛应用于进出管理.门禁 ...

  9. 基于第三方vuejs库组件做适配性个性开发

    相信大家在使用vuejs时候会用到很多的第三方库,能够找到适合自己的库并且加以使用可以大大加快进度,减少bug.但是很多时候会出现这样一个尴尬的境地: 基线的第三方组件并不能很好地满足我们自己地需求, ...

  10. Centos中编辑php扩展库

    今天需要在Centos中编译Exif库以便获取图片的exif信息,可在Linux中从来没有编译过扩展库呀,只好查资料了.发现是用phpize这个东东来编译扩展. 首先执行了下 php -i | gre ...