React Native(下拉刷新,加载更多)超简单实现!
2017-03-13 17:15
405 查看
我们直接进入我们今天的主题了.我们先看一下今天要实现的效果:
我们下拉的时候显示“下拉刷新状态“,当滑动到底部的时候自动显示“加载更多“。
思路:
1、下拉刷新我们直接使用rn自带的RefreshControl。
2、当我们滑动到scrollview或者listview的最底部的时候,开始显示进度条,然后加载更多。
好啦~~我们今天主要要解决的就是怎么判断scrollview或者listview滑动到最底部:
1、scrollview滑动到最顶部
搞过android的小伙伴都知道,在我们原生scrollview中,当我们的scrollview的scrollY为0的时候,即到达顶部位置,那么rn中也是一样的。
2、scrollview滑动到滑动到底部
当scrollview的高度+scrollY>=contentHeight的时候,就证明已经滑动到底部了。
好了,有了思路我们就开动了,在scrollview 中我们可以监听scroll的变化:
注意ios中一定要给scrollEventThrottle这个属性一个值,不然onScroll调用的频率会很少,影响我们的效果。
然后我们看看_onScroll方法中怎么写呢?
是不是soeay呢??当y+height>=contentHeight-20,这个20为我设置的一个偏移量(童鞋们可以按需求设置)。然后修改我们的state就ok了。
LoadingMore.js:
ScreenUtil.js:
好啦~~! 就到这里了哦~~~
我们下拉的时候显示“下拉刷新状态“,当滑动到底部的时候自动显示“加载更多“。
思路:
1、下拉刷新我们直接使用rn自带的RefreshControl。
2、当我们滑动到scrollview或者listview的最底部的时候,开始显示进度条,然后加载更多。
好啦~~我们今天主要要解决的就是怎么判断scrollview或者listview滑动到最底部:
1、scrollview滑动到最顶部
搞过android的小伙伴都知道,在我们原生scrollview中,当我们的scrollview的scrollY为0的时候,即到达顶部位置,那么rn中也是一样的。
2、scrollview滑动到滑动到底部
当scrollview的高度+scrollY>=contentHeight的时候,就证明已经滑动到底部了。
好了,有了思路我们就开动了,在scrollview 中我们可以监听scroll的变化:
<ScrollView refreshControl={ <RefreshControl refreshing={this.state.isRefreshing} onRefresh={this._onRefresh.bind(this)} tintColor="#ff0000" title="加载中..." titleColor="#00ff00" colors={['#ff0000', '#00ff00', '#0000ff']} progressBackgroundColor="#ffffff" /> } onScroll={this._onScroll.bind(this)} scrollEventThrottle={50} >
注意ios中一定要给scrollEventThrottle这个属性一个值,不然onScroll调用的频率会很少,影响我们的效果。
然后我们看看_onScroll方法中怎么写呢?
/** * scrollview滑动的时候 * @private */ _onScroll(event) { if(this.state.loadMore){ return; } let y = event.nativeEvent.contentOffset.y; let height = event.nativeEvent.layoutMeasurement.height; let contentHeight = event.nativeEvent.contentSize.height; console.log('offsetY-->' + y); console.log('height-->' + height); console.log('contentHeight-->' + contentHeight); if(y+height>=contentHeight-20){ this.setState({ loadMore:true }); } }
是不是soeay呢??当y+height>=contentHeight-20,这个20为我设置的一个偏移量(童鞋们可以按需求设置)。然后修改我们的state就ok了。
render() {
let self = this;
return (
<View style={styles.container}>
{/*顶部导航栏*/}
{self._renderNavigator()}
<ScrollView refreshControl={ <RefreshControl refreshing={this.state.isRefreshing} onRefresh={this._onRefresh.bind(this)} tintColor="#ff0000" title="加载中..." titleColor="#00ff00" colors={['#ff0000', '#00ff00', '#0000ff']} progressBackgroundColor="#ffffff" /> } onScroll={this._onScroll.bind(this)} scrollEventThrottle={50} >
{/*顶部菜单导航*/}
{self._renderTopMenus()}
{/*推荐商家menu1*/}
{self._recommendMerchant()}
{/*推荐商家menu1*/}
{self._recommendMerchant()}
{/*推荐商家menu1*/}
{self._recommendMerchant()}
{/*推荐商家menu1*/}
{self._recommendMerchant()}
{/*推荐商家menu1*/}
{self._recommendMerchant()}
{/*推荐商家menu1*/}
{self._recommendMerchant()}
{/*尾部上拉加载更多view*/}
{self._renderLoadMore()}
</ScrollView>
</View>
);
}
/** * 显示上啦加载view * @private */ _renderLoadMore() { if (this.state.baseDatas == null || this.state.baseDatas.recommondMerchant == null) { return; } return ( <LoadingMore isLoading={this.state.loadMore} onLoading={()=>{ alert('fdfdfd'); }} /> ); }
LoadingMore.js:
/** * @author YASIN * @version [React Native PABank V01,17/3/13] * @date 17/3/13 * @description LoadingMore */ import React,{Component,PropTypes}from 'react'; import { View, ActivityIndicator, Text, TouchableOpacity }from 'react-native'; import * as ScreenUtils from '../../Util/ScreenUtil'; import {AppBaseColor,AppBaseDimension}from '../../Constant/AppBase'; export default class LoadingMore extends Component { static propTypes = { isLoading: PropTypes.bool } static defaultProps = { isLoading: false } // 构造 constructor(props) { super(props); // 初始状态 this.state = { isLoading: props.isLoading }; } render() { if (this.state.isLoading) { return ( <View style={{flexDirection:'row',alignSelf:'center',alignItems:'center',padding:ScreenUtils.scaleSize(10) }}> <ActivityIndicator size={'small'} color={AppBaseColor.MAIN_COLOR} animating={true} style={{width:ScreenUtils.scaleSize(15),height:ScreenUtils.scaleSize(15)}} /> <Text style={{ color:AppBaseColor.DESC_COLOR, fontSize:AppBaseDimension.FontSize.DESC, marginLeft:ScreenUtils.scaleSize(15) }}> 正在加载... </Text> </View> ); } else if(this.props.onLoading){ return ( <TouchableOpacity onPress={()=>{ this.setState({ isLoading:true }); this.props.onLoading&&this.props.onLoading() }} > <Text style={{ color:AppBaseColor.DESC_COLOR, fontSize:AppBaseDimension.FontSize.DESC, alignSelf:'center', padding:ScreenUtils.scaleSize(10) }}> 点击加载更多... </Text> </TouchableOpacity> ); } } componentWillReceiveProps(nextProps) { this.setState({ isLoading: nextProps.isLoading }); } }
ScreenUtil.js:
/** * @author YASIN * @version [Android YASIN V01, ] * @blog http://blog.csdn.net/vv_bug * @description * 屏幕工具类 * ui设计基准,iphone 6 * width:750 * height:1334 */ import { PixelRatio, }from 'react-native'; import Dimensions from 'Dimensions'; export var screenW = Dimensions.get('window').width; export var screenH = Dimensions.get('window').height; var fontScale = PixelRatio.getFontScale(); export var pixelRatio =PixelRatio.get(); export const DEFAULT_DENSITY=2; const w2 = 750/DEFAULT_DENSITY; const h2 = 1334/DEFAULT_DENSITY; export function setSpText(size:Number) { var scaleWidth = screenW / w2; var scaleHeight = screenH / h2; var scale = Math.min(scaleWidth, scaleHeight); size = Math.round((size * scale + 0.5) * pixelRatio / fontScale); return size; } /** * 屏幕适配,缩放size * @param size * @returns {Number} * @constructor */ export function scaleSize(size:Number) { var scaleWidth = screenW / w2; var scaleHeight = screenH / h2; var scale = Math.min(scaleWidth, scaleHeight); size = Math.round((size * scale + 0.5)); return size/DEFAULT_DENSITY; }
好啦~~! 就到这里了哦~~~
相关文章推荐
- PullToRefresh实现简单的下拉刷新和上拉加载更多
- 44、gridview实现下拉刷新、上拉加载更多(最简单实现上下拉操作的开源工程!)
- better-scroll实现下拉刷新、上拉加载更多(巨简单...)
- 为Recycler添加下拉刷新,上拉加载更多功能(简单实现)
- android ListView的上部下拉刷新下部点击加载更多具体实现及拓展
- android ListView的上部下拉刷新下部点击加载更多具体实现及拓展
- android实现下拉刷新上拉加载更多理解
- ListView下拉刷新上拉加载更多实现
- Android实现下拉刷新,滑动加载更多的功能
- 简单代码实现 加载更多效果
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- pulltorefresh(一)使用介绍,实现下拉刷新上拉加载更多
- android下拉刷新上拉加载简单的实现方法;
- 06---数据的下拉刷新上拉加载更多实现
- 下拉刷新和上拉加载更多实现方法
- Android实现微博下拉刷新上拉加载更多功能
- jQuery+Asp.net 实现简单的下拉加载更多功能
- android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)