HTML5技术

React Native 之ScrollView轮播图实现 - ganchuanpu

字号+ 作者:H5之家 来源:H5之家 2017-06-17 10:03 我要评论( )

1.index.Android.js importReact,{Component} ;import{AppRegistry,StyleSheet,TextInput,TouchableOpacity,ScrollView,Text,View} ;importScrollViewDemo ;importScrollViewTop ;importPositionDemo ;export default class CQQLoginDemoextendsComponent{re

1.index.Android.js  

import React, { Component } ;   import {     AppRegistry,     StyleSheet,     TextInput,     TouchableOpacity,     ScrollView,     Text,     View   } ;      import ScrollViewDemo ;   import ScrollViewTop ;   import PositionDemo ;      export default class CQQLoginDemo extends Component {          render() {       return (       <ScrollViewTop/>       );     }      }   AppRegistry.registerComponent(, () => CQQLoginDemo);  

2.在项目的 index.android.js同一目录下  创建json文件  这样方便图片的访问,资源图片放在项目名称\android\app\src\main\res\drawable 下面

这里的BadgeData.json 如下:

{     :[       {          : ,          :        },       {          : ,          :        },       {          : ,          :        },       {          : ,          :        },       {          : ,          :        },       {          : ,          :        }     ]   }  

3.主要的文件 scrollViewTop.js 文件 如下  具体注释中已写  直接上代码:

/**   * Sample React Native App   * https://github.com/facebook/react-native   * @flow   */      import React, { Component } ;   import {     AppRegistry,     StyleSheet,     ScrollView,     Image,     Text,     View   } ;      let Dimensions = require();   let ScreenWidth = Dimensions.).width;   let ScreenHeight = Dimensions.).height;      import ImageData ;       export  default class scrollViewTop extends Component {          constructor(props) {       super(props);       this.state = { currentPage: 0 };     }        static defaultProps = {       duration: 1000,     }        componentDidMount() {       this._startTimer();        }        componentWillUnmount() {       // 如果存在this.timer,则使用clearTimeout清空。       // 如果你使用多个timer,那么用多个变量,或者用个数组来保存引用,然后逐个clear       this.timer && clearTimeout(this.timer);     }        render() {       return (         <View style={styles.continer}>           <ScrollView                          //水平方向             horizontal={true}             //当值为true时显示滚动条             showsHorizontalScrollIndicator={false}             //当值为true时,滚动条会停在滚动视图的尺寸的整数倍位置。这个可以用在水平分页上             pagingEnabled={true}             //滑动完一贞             onMomentumScrollEnd={(e)=>{this._onAnimationEnd(e)}}             //开始拖拽             onScrollBeginDrag={()=>{this._onScrollBeginDrag()}}             //结束拖拽             onScrollEndDrag={()=>{this._onScrollEndDrag()}}             >             {this._renderAllImage()}           </ScrollView>           <View style={styles.pageViewStyle}>            {this._renderAllIndicator()}           </View>         </View>       );     }          _onScrollBeginDrag(){       console.log();       //两种清除方式 都是可以的没有区别       // this.timer && clearInterval(this.timer);       this.timer && clearTimeout(this.timer);     }          _onScrollEndDrag(){       console.log();       this.timer &&this._startTimer();     }             _renderAllImage() {       let allImage = [];       let imgsArr = ImageData.data;       for (let i = 0; i < imgsArr.length; i++) {         let imgsItem = imgsArr[i];        allImage.push(           <Image key={i} source={{uri:imgsItem.icon}} style={styles.imageStyle} />         );       }       return allImage;     }               _onAnimationEnd(e) {       //求出偏移量       let offsetX = e.nativeEvent.contentOffset.x;       //求出当前页数       let pageIndex = Math.floor(offsetX / ScreenWidth);       //更改状态机       this.setState({ currentPage: pageIndex });     }                 _renderAllIndicator() {       let indicatorArr = [];       let style;       let imgsArr = ImageData.data;       for (let i = 0; i < imgsArr.length; i++) {         //判断         style = (i==}:{color:};         indicatorArr.push(           <Text key={i} style={[{fontSize:30},style]}>                       </Text>         );       }       return indicatorArr;     }               _startTimer(){       let scrollView this.refs.scrollView;       this.timer = setInterval(         ()=>{console.log();           let imageCount = ImageData.data.length;          //4.1 设置圆点          let activePage = 0;          //4.2判断          if(this.state.currentPage>=imageCount+1){            activePage 0;          }else{            activePage this.state.currentPage+1;          }          //4.3 更新状态机          this.setState({currentPage:activePage});          //4.4 让scrollview 滚动起来          let offsetX = activePage * ScreenWidth;          scrollView.scrollResponderScrollTo({x:offsetX,y:0,animated:true});         },          this.props.duration        );       }   }      const styles = StyleSheet.create({     continer:{       backgroundColor:      },     imageStyle:{       height:400,       width:ScreenWidth     },     pageViewStyle:{       height:25,       width:ScreenWidth,       backgroundColor:,       position:,       bottom:0,          flexDirection:,       alignItems:,     }   });  

 

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 高性能迷你React框架anu在低版本IE的实践 - 司徒正美

    高性能迷你React框架anu在低版本IE的实践 - 司徒正美

    2017-06-14 09:01

  • 使用React改版网站后的一些感想 - 吴海瑞博客

    使用React改版网站后的一些感想 - 吴海瑞博客

    2017-06-08 15:07

  • 从性能角度看react组件拆分的重要性 - wonyun

    从性能角度看react组件拆分的重要性 - wonyun

    2017-05-06 14:01

  • Angular vs React 最全面深入对比 - 葡萄城控件技术团队

    Angular vs React 最全面深入对比 - 葡萄城控件技术团队

    2017-05-04 16:05

网友点评