用scrollView实现轮播图效果

React Native常用组件之ScrollView
http://reactnative.cn/docs/0.25/scrollview.html#content

1.需要导入计时器类库
cd到项目根目录下执行:

 $  npm i react-timer-mixin --save    

用scrollView实现轮播图效果_第1张图片
在项目中需要引入并注册:
引入: var TimerMixin = require('react-timer-mixin');
注册:mixins: [TimerMixin],

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View,
  ScrollView,
  Image
} from 'react-native';

// 引入Dimensions类库
var Dimensions = require('Dimensions');
var ScreenW = Dimensions.get('window').width;

// 引入计时器类库
var TimerMixin = require('react-timer-mixin');

// 加载json数据
var ImageData = require('./ImageData.json');

var ScrollViewDemo = React.createClass({
  // 注册计时器
  mixins: [TimerMixin],

  // 设置可变和初始化值
  getInitialState(){
    return{
      // 当前页面
      currentPage:0,
    }
  },

  render() {
    return (
        
          true}
              pagingEnabled={true}
              showsHorizontalScrollIndicator={false}
              // 当一帧滚动结束
              onMomentumScrollEnd={this.onAnimationEnd}
          >
            {this.renderAllImage()}
          
          
            {this.renderPageCircle()}
          
        
    );
  },

  // 返回图片
  renderAllImage(){
    // 数组
    var allImage = [];
    // 拿到图片数据
    var imageArr = ImageData.data;
    // 遍历
    for(var i=0;i// 取出单个图片对象
      var imgItem = imageArr[i];
      // 创建组件装入数组
      allImage.push(
          150}} />
      );
    }

    // 返回
    return allImage;
  },

  // 返回分页指示器圆点
  renderPageCircle(){
    // 定义一个数组放置所有的圆点
    var indicatorArr = [];
    var imgArr = ImageData.data;

    // 特殊样式
    var style;

    for(var i=0;i// 判断style
      style = (i==this.state.currentPage) ? {color:'orange'} : {color:'#fff'};
      indicatorArr.push(
          40},style]}>•
      );
    }
    return indicatorArr;
  },

  // 当一帧滚动结束的时候调用
  onAnimationEnd(event){
    // 1.计算水平方向偏移量
    var offsetX = event.nativeEvent.contentOffset.x
    // 2.计算当前页码
    var page = Math.floor(offsetX / ScreenW);
    // 3.更新状态机,重新绘制UI
    this.setState({
      currentPage:page
    });
  },

});



const styles = StyleSheet.create({
  container:{
    marginTop:20,
  },
  // 分页指示器样式
  indicatorViewStyle:{
    width:ScreenW,
    height:25,
    backgroundColor:'rgba(0,0,0,0.4)',
    position:'absolute',
    bottom:0,
    // 设置主轴方向,让圆点水平排列
    flexDirection:'row',
  }
});

AppRegistry.registerComponent('ScrollViewDemo', () => ScrollViewDemo);

运行效果如下:
用scrollView实现轮播图效果_第2张图片

ImageData.json文件:

{
  "data": [
    {
      "img" : "img_01",
      "title" : "你那一笑倾国倾城"
    },
    {
      "img" : "img_02",
      "title" : "那里记录了最唯美的爱情故事"
    },
    {
      "img" : "img_03",
      "title" : "我怎么是一个剩女"
    },
    {
      "img" : "img_04",
      "title" : "生命中最后的四分钟"
    },
    {
      "img" : "img_05",
      "title" : "我们都需要治疗"
    }
  ]
}

你可能感兴趣的:(React,Native)