zoukankan      html  css  js  c++  java
  • React Native 之ScrollView

    import React, { Component } from 'react'
    import { Text, StyleSheet, View, Button ,TouchableOpacity,Alert,ScrollView,Image} from 'react-native'
    import { createStackNavigator, createAppContainer } from 'react-navigation';
    
    
    let Dimensions = require('Dimensions');
    let {width, height} = Dimensions.get('window');
    
    export default class HomeScreen extends Component {
      static navigationOptions = {
        title: 'HomeScreen'
      }
    
      //defaultProps
      static defaultProps = {
          //每隔多少秒执行一次
          duration:2000
      }
    
      componentDidMount(){
        // 开启定时器
        this.startTime();
      }
    
      // 开启定时器
      startTime(){
            // 1.拿到scrollerView
            let scrollerView = this.refs.scrollerView;
            let imageCount = 4;
            // 2.添加定时器
            // 2.1 设置圆点
            let activePage = 0;
            this.timer = setInterval(() => {
                // 2.2 判断
                if((this.state.currentPage+1) >= imageCount){
                    activePage = 0;
                }else {
                    activePage = this.state.currentPage+1;
                }
                // 2.3 更新状态机
                this.setState({
                    // 当前页
                    currentPage: activePage
                })
                // 2.4 让scrollerVeiw滚动起来
                let offsetX = activePage * width;
                scrollerView.scrollTo({x: offsetX, y:0, animated:true});
            }, this.props.duration);
        }
    
      constructor(props){
        super(props);
        this.state = {
          currentPage:0
        }
        this.renderPageIndex = this.renderPageIndex.bind(this);
      }
    
      renderChildView(){
        var allChild = [];
        var imgNames = [require('./img/leading_01.png'),
                        require('./img/leading_02.png'),
                        require('./img/leading_03.png'),
                        require('./img/leading_04.png')];
        imgNames.forEach((item,index)=>{
    
          allChild.push(
            <Image
            style={{ 375,height: 375}}
            source={item}
            />
          )
        })
        return allChild;
      }
    
      // 返回页面指示器的圆点
      renderPageIndex(){
            // 数组
            let indicatorArr = [];
            //拿到图形数组
            //let imageArrs = ImageData.data;
            //样式
            var style;
            //遍历
            for (var i = 0; i < 4; i++){
                // 判断
                style = (i==this.state.currentPage) ? {color: 'orange'} : {color: '#E8E8E8'}
    
                //放入圆点
                indicatorArr.push(
                    // 多个样式使用[]数组来放
                    <Text key={i} style={[{fontSize:25}, style]}>•</Text>
                );
            }
            //返回
            return indicatorArr;
        }
    
      // 当一帧滚动结束的时候调用
      onAnimationEnd(e){
          // 1.求出水平方向的偏移量
          var offsetX = e.nativeEvent.contentOffset.x;
    
          // 2.求出当前的页数         floor函数 取整
          var currentPage = Math.floor(offsetX / width);
    
          // 3.更新状态机
          this.setState({
              // 当前页
              currentPage: currentPage
          })
    
      }
    
      // 开始拖拽时调用
      onScrollerBeginDrag(){
          // 停止定时器
          clearInterval(this.timer);
      }
      // 停止拖拽时调用
      onScrollEndDrag(){
          // 开启定时器
          this.startTime();
      }
    
      render(){
        return(
          <View style={styles.circulateViewStyle}>
            <ScrollView
            ref="scrollerView"
            horizontal={true}
            pagingEnabled={true}
            scrollEnabled={true}
            //滚动动画结束时调用此函数
            onMomentumScrollEnd={(e)=>this.onAnimationEnd(e)}
            //开始拖拽
            onScrollBeginDrag={(e)=>this.onScrollerBeginDrag(e)}
            //停止拖拽
            onScrollEndDrag={(e)=>this.onScrollEndDrag(e)}
            >
    
              {this.renderChildView()}
            </ScrollView>
            {/*底部页面指示器*/}
            <View style={styles.pageViewStyle}>
                {/*返回5个圆点*/}
                {this.renderPageIndex()}
            </View>
    
          </View>
    
        );
      }
    
    const styles = StyleSheet.create({
    
        circulateViewStyle: {
    
            marginTop:20,
            height:150,
            width,
        },
        scrollViewStyle:{
    
        },
    
        imageStyle: {
             width,
            height: 150
        },
        pageViewStyle: {
            width,
            height:25,
            backgroundColor:'rgba(0, 0, 0, 0.4)',
            position:'absolute',
            bottom:0,
            flexDirection:'row',
            alignItems:'center'
        }
    });
    此文仅为鄙人学习笔记之用,朋友你来了,如有不明白或者建议又或者想给我指点一二,请私信我。liuw_flexi@163.com/QQ群:582039935. 我的gitHub: (学习代码都在gitHub) https://github.com/nwgdegitHub/
  • 相关阅读:
    文件的上传
    扩展HTTP管道
    发布开源框架iOS矢量图形框架 TouchVG
    批量修改文件名的py脚本
    《矢量绘图基础》PPT
    开题了《面向移动设备的交互式图形平台设计与实现》
    计算几何(转)
    批量替换文件名和内容的Python脚本
    iOS上的二维绘图软件现状
    基本图形手绘图形算法包
  • 原文地址:https://www.cnblogs.com/liuw-flexi/p/11526004.html
Copyright © 2011-2022 走看看