uatcomponent
Version:
101 lines (91 loc) • 2.8 kB
JavaScript
//@flow
/**
* 页面:轮播 created by Mark
*/
import React, { Component } from 'react';
import { View,
Text,
TouchableOpacity,
Image,
ViewStyle,
NativeSyntheticEvent,
ImageLoadEventData,
StyleSheet,
Dimensions,
} from 'react-native';
import Swiper from "react-native-swiper";
import { ComponentProps,BannerModel,ScrollDataType} from "../../model";
import { BannerItem } from './view/bannerItem';
import { autoBaseUrl } from 'uatcomponent/src/util';
import { BannerShowType } from 'uatcomponent/src/container/banner/banner.model';
type Props = {
style:ViewStyle
} & ComponentProps<BannerModel,ScrollDataType[]>;
type State = {
bundleHeight:Number
};
const BUNDLE_HEIGHT : Number = 50;
export class Banner extends Component <Props,State>{
/**初始化state*/
state:State = {
bundleHeight:BUNDLE_HEIGHT,
}
/**图片重置尺寸 */
resizeFrame = (e:NativeSyntheticEvent<ImageLoadEventData>)=>{
//图片的实际尺寸
let realHeight:Number = e.nativeEvent.source.height;
let realWidth :Number = e.nativeEvent.source.width;
//图片显示的宽度
let displayWidth:Number= Dimensions.get('window').width;
let displayHeight:Number=(realHeight/realWidth)*displayWidth;
const {data} = this.props;
this.setState({
bundleHeight : displayHeight
})
}
/**渲染函数*/
render(){
const {data,baseUrl,} = this.props
if(!data||!data.content)return <View />
const {bundleHeight} = this.state;
const {showType} = data.content;
if(showType == BannerShowType.Scroll){
return (
<Swiper
autoplay={true}
autoplayTimeout={3}
style={{height:bundleHeight}}
>
{
data.content.dataset.map((item,index)=>{
return <BannerItem key={`${index}_${item.title}_banner`}
data={{...item,pic:autoBaseUrl(baseUrl,item.pic)}}
onclick={(d)=>{
this.props.onClick && this.props.onClick(data,d)
}}
onImgLoad={this.resizeFrame}/>
})
}
</Swiper>
)
}else{
return (
<View style={{flex:1}}>
{
data.content.dataset.map((item,index)=>{
return <BannerItem key={`${index}_${item.title}_banner`}
data={{...item,pic:autoBaseUrl(baseUrl,item.pic)}}
onclick={(d)=>{
this.props.onClick && this.props.onClick(data,d)
}}
onImgLoad={this.resizeFrame}/>
})
}
</View>
)
}
}
}
//样式
const styles = StyleSheet.create({
})