ReactNative 轮播图组件Banner的创建

本文介绍如何在ReactNative中创建一个轮播图组件Banner,使用ES5语法编写,依赖react-timer-mixin库实现定时切换。示例中展示了从本地json文件获取图片数据,如果使用网络图片则需要进行API请求。组件可直接导入并使用。
部署运行你感兴趣的模型镜像

==================================================================

//这里是单独的一个js文件,到时直接导入就可以用  这里用的ES5的格式

//这里用的定时器导入计时器类库 react-timer-mixin 不过创建项目的时候就已经有了,可以在你项目的node_modules这个文件夹里面找一下有没有react-timer-mixin,如果没有就要自己导入  导入方法导入计时器方法

==================================================================

我这里用的轮播图图片时本地图片var datas= require('../data/banner.json')

如果你用的网络图片就要网络请求然后获得json对象

可以创建一个banner,js文件然后把代码考进去

然后用的时候直接导入这里用的ES5的格式写的所以导入方式./component/banner为你banner,js文件的路径

var BannerDemo= require('./component/banner')
然后直接使用
 

轮播图效果


===================================================================



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

var datas= require('../data/banner.json')
var Dimensions=require('Dimensions')
var windowwidth=Dimensions.get('window').width
var TimerMixin=require('react-timer-mixin')


var banner = React.createClass({

    getInitialState(){
        return{
            var:currcount=0,
            var:title=datas[currcount].title,
        }
    },

    
    render(){
        return (
            <View style={styles.container}>
                <ScrollView
                    ref="scrollView"
                    horizontal={true}
                    showsHorizontalScrollIndicator={false}
                    pagingEnabled={true}
                    onMomentumScrollEnd={ (e)=>this.onPageEnd(e)  }>
                    {this.creatitems()}
                </ScrollView>
                <View style={styles.viewstyle}>
                    {this.creatdot()}
                    <Text style={[{textAlign:'right',flex:1,marginRight:10,color:'red'}]}>{title}</Text>
                </View>
            </View>

        )
    },

    //定时器
    mixins:[TimerMixin],
    //生命周期  耗时操作  开启一个定时器
    componentDidMount(){
        //拿到对象
        var scrollView=this.refs.scrollView;

            this.setInterval(
               function () {
                   //alert("0000")
                   currcount+=1
                   if(currcount>=datas.length){
                       currcount=0
                   }
                   //计算位移的距离
                   var l=currcount*windowwidth
                   //设置滑动距离
                   scrollView.scrollResponderScrollTo({x:l,y:0, animated:true})
                   this.setState({
                       currcount:currcount,
                       title:datas[currcount].title,
                   })
               },2000)
    },
    //contentOffSet 滑动的x轴的距离
    //page当前的页数
    onPageEnd(e){
        var contentOffSet = e.nativeEvent.contentOffset.x
        var page = contentOffSet / windowwidth

        this.setState({
            var: currcount = page,
            var: title = datas[currcount].title,
            var: dotbg='red'
        })

    },


    creatitems(){
        var items=[]
        for(var i=0;i<datas.length;i++){
            var itemdata=datas[i];
            items.push(
                <Image key={i} style={styles.imagestyle} source={{uri:itemdata.icon}}></Image>
            )
        }
        return items

    },

    creatdot(){
        var dots=[]
        for(var i=0;i<datas.length;i++){
            var dotbg=currcount==i ? 'white' : 'red'
            dots.push(
                <Text key={i} style={[styles.textstyle,{backgroundColor:dotbg}]}></Text>
        )
        }
        return dots
    }
})


const styles = StyleSheet.create({
    container: {
        width:windowwidth,
        height:120,
    },
    imagestyle:{
        width:windowwidth,
        height:120
    },

    viewstyle:{
        width:windowwidth,
        height:25,
        backgroundColor:'rgba(255,255,255,0.5)',
        flexDirection:'row',
        alignItems:'center',
        position:'absolute',
        bottom:0,
        left:0
    },

    textstyle:{
        width:5,
        height:5,
        borderRadius:5,
        marginLeft:8
    }


});


module.exports = banner





您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值