中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

React Native之如何實現ScrollView輪播圖

發布時間:2020-10-26 09:13:38 來源:億速云 閱讀:501 作者:小新 欄目:web開發

這篇文章主要介紹了React Native之如何實現ScrollView輪播圖,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

1.index.Android.js

import React, { Component } from 'react';  
import {  
  AppRegistry,  
  StyleSheet,  
  TextInput,  
  TouchableOpacity,  
  ScrollView,  
  Text,  
  View  
} from 'react-native';  
  
import ScrollViewDemo from "./scrollViewDemo";  
import ScrollViewTop from "./scrollViewTop";  
import PositionDemo from "./positionDemo";  
  
export default class CQQLoginDemo extends Component {  
    
  render() {  
    return (  
    <ScrollViewTop/>  
    );  
  }  
  
}  
AppRegistry.registerComponent('CQQLoginDemo', () => CQQLoginDemo);

2.在項目的 index.android.js同一目錄下  創建json文件  這樣方便圖片的訪問,資源圖片放在項目名稱\android\app\src\main\res\drawable 下面

這里的BadgeData.json 如下:

{  
  "data":[  
    {  
      "icon" : "danjianbao",  
      "title" : "單肩包"  
    },  
    {  
      "icon" : "liantiaobao",  
      "title" : "鏈條包"  
    },  
    {  
      "icon" : "qianbao",  
      "title" : "錢包"  
    },  
    {  
      "icon" : "shoutibao",  
      "title" : "手提包"  
    },  
    {  
      "icon" : "shuangjianbao",  
      "title" : "雙肩包"  
    },  
    {  
      "icon" : "xiekuabao",  
      "title" : "斜挎包"  
    }  
  ]  
}

3.主要的文件 scrollViewTop.js 文件 如下  具體注釋中已寫  直接上代碼:

/** 
 * Sample React Native App 
 *  
 * @flow 
 */  
  
import React, { Component } from 'react';  
import {  
  AppRegistry,  
  StyleSheet,  
  ScrollView,  
  Image,  
  Text,  
  View  
} from 'react-native';  
  
let Dimensions = require('Dimensions');  
let ScreenWidth = Dimensions.get('window').width;  
let ScreenHeight = Dimensions.get('window').height;  
  
import ImageData from "./BadgeData.json";   
  
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  
          ref='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();  
  }  
  
  /**1.輪播圖片展示 */  
  _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;  
  }  
    
  /**2.手動滑動分頁實現 */  
  _onAnimationEnd(e) {  
    //求出偏移量      let offsetX = e.nativeEvent.contentOffset.x;  
    //求出當前頁數      let pageIndex = Math.floor(offsetX / ScreenWidth);  
    //更改狀態機      this.setState({ currentPage: pageIndex });  
  }  
  
    /**3.頁面指針實現 */  
    _renderAllIndicator() {  
    let indicatorArr = [];  
    let style;  
    let imgsArr = ImageData.data;  
    for (let i = 0; i < imgsArr.length; i++) {  
      //判斷        style = (i==this.state.currentPage)?{color:'orange'}:{color:'white'};  
      indicatorArr.push(  
        <Text key={i} style={[{fontSize:30},style]}>  
         ?  
        </Text>  
      );  
    }  
    return indicatorArr;  
  }  
  
  /**4.通過定時器實現自動播放輪播圖 */  
    _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: '#dddddd'  
  },  
  imageStyle:{  
    height:400,  
    width:ScreenWidth  
  },  
  pageViewStyle:{  
    height:25,  
    width:ScreenWidth,  
    backgroundColor:'rgba(0,0,0,0.4)',  
    position:'absolute',  
    bottom:0,  
  
    flexDirection:'row',  
    alignItems:'center',  
  }  
});

React Native之如何實現ScrollView輪播圖

感謝你能夠認真閱讀完這篇文章,希望小編分享React Native之如何實現ScrollView輪播圖內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

枞阳县| 余干县| 鄂尔多斯市| 浠水县| 长武县| 搜索| 柳河县| 罗城| 车致| 璧山县| 金堂县| 天门市| 梅河口市| 灌阳县| 西青区| 建瓯市| 潼南县| 越西县| 永宁县| 黄大仙区| 罗源县| 津市市| 邵武市| 泗水县| 湖北省| 镇江市| 海门市| 集安市| 南和县| 托里县| 越西县| 绥滨县| 固安县| 江口县| 襄汾县| 德钦县| 福州市| 会理县| 巴林右旗| 墨竹工卡县| 来宾市|