国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

React Native 通告消息豎向輪播組件的封裝

2019-11-19 15:05:40
字體:
來源:轉載
供稿:網友

本文實例為大家分享了React Native通告消息豎向輪播組件的封裝代碼,供大家參考,具體內容如下

import React, {Component} from 'react'import {  Text,  View,  Animated,  Easing,  StyleSheet,} from 'react-native'export default class ScrollVertical extends Component {  static defaultProps = {    enableAnimation: true,  };  constructor(props) {    super(props)    let translateValue= new Animated.ValueXY({x: 0, y: 0})    translateValue.addListener(({x,y})=>{      // Log('value',x,y)    })    this.state = {      translateValue: translateValue,      // 滾屏高度      scrollHeight: this.props.scrollHeight || 32,      // 滾屏內容      kb_content: [],      // Animated.View 滾動到的 y軸坐標      kb_tempValue: 0,      // 最大偏移量      kb_contentOffsetY: 0,      // 每一次滾動切換之前延遲的時間      delay: this.props.delay || 500,      // 每一次滾動切換的持續時間      duration: this.props.duration || 500,      enableAnimation: true,    }  }  render() {    return (      <View style={[styles.kbContainer, {height: this.state.scrollHeight}, this.props.kbContainer]}>        {          this.state.kb_content.length !== 0 ?            <Animated.View              style={[                {flexDirection: 'column'},                {                  transform: [                    {translateY: this.state.translateValue.y}                  ]                }              ]}>              {this.state.kb_content.map(this._createKbItem.bind(this))}            </Animated.View> : null        }      </View>    )  }  componentWillReceiveProps(nextProps) {    Log('componentWillReceiveProps', nextProps)      this.setState({          enableAnimation: nextProps.enableAnimation?true:false        }, () => {          this.startAnimation();        }      )  }  componentDidMount() {    Log('componentDidMount')    let content = this.props.data || []    if (content.length !== 0) {      let h = (content.length + 1) * this.state.scrollHeight      this.setState({        kb_content: content.concat(content[0]),        kb_contentOffsetY: h      })      // 開始動畫      // this._startAnimation()      this.startAnimation();    }  }  _createKbItem(kbItem, index) {    return (      <View key={index}         style={[{justifyContent: 'center', height: this.state.scrollHeight}, this.props.scrollStyle]}>        <Text style={[styles.kb_text_c, this.props.textStyle]}>{kbItem.content}</Text>      </View>    )  }  startAnimation = () => {    if (this.state.enableAnimation) {      if(!this.animation){        this.animation = setTimeout(() => {          this.animation=null;          this._startAnimation();        }, this.state.delay);      }    }  }  componentWillUnmount() {    if (this.animation) {      clearTimeout(this.animation);    }    if(this.state.translateValue){      this.state.translateValue.removeAllListeners();    }  }  _startAnimation = () => {    this.state.kb_tempValue -= this.state.scrollHeight;    if (this.props.onChange) {      let index = Math.abs(this.state.kb_tempValue) / (this.state.scrollHeight);      this.props.onChange(index<this.state.kb_content.length-1?index:0);    }    Animated.sequence([      // Animated.delay(this.state.delay),      Animated.timing(        this.state.translateValue,        {          isInteraction: false,          toValue: {x: 0, y: this.state.kb_tempValue},          duration: this.state.duration, // 動畫持續的時間(單位是毫秒),默認為500          easing: Easing.linear        }      ),    ])      .start(() => {        // 無縫切換        // Log('end')        if (this.state.kb_tempValue - this.state.scrollHeight === -this.state.kb_contentOffsetY) {          // 快速拉回到初始狀態          this.state.translateValue.setValue({x: 0, y: 0});          this.state.kb_tempValue = 0;        }        this.startAnimation();      })  }}const styles = StyleSheet.create({  kbContainer: {    // 必須要有一個背景或者一個border,否則本身高度將不起作用    backgroundColor: 'transparent',    overflow: 'hidden'  },  kb_text_c: {    fontSize: 18,    color: '#181818',  }

使用

import React, {Component} from 'react';import {  StyleSheet,  View,  TouchableOpacity,  Alert,  ScrollView,  ART,  TouchableHighlight,  ListView,  Dimensions,  Text} from 'react-native';import ScrollVertical from '../../app-widget/scroll-vertical'const dataArray = [  {    title: '降價了',  },  {    title: '全場五折',  },  {    title: '打到骨折',  }]export default class extends React.Component {  render() {    let array = [{ content: '' }];    if (dataArray && dataArray.length > 0) {      array = [];      for (let item of dataArray) {        array.push({ content: item.title});      }    }    return (      <View style={{ padding: Constant.sizeMarginDefault, paddingBottom: 0, backgroundColor: '#FFFFFF' }}>        <TouchableOpacity onPress={() => {          if (dataArray && dataArray.length > 0) {            Log(dataArray[this.index].title)          }        }} style={{ flexDirection: 'row', backgroundColor: "#FFFFFF", alignItems: 'center', borderRadius: 8, paddingLeft: 5, paddingRight: 5 }}>          <Text style={{ fontSize: Constant.scaleFontSize(14) }} fontWeight={'bold'}>公告</Text>          <View style={{ marginLeft: 5, marginRight: 8, backgroundColor: '#b01638', borderRadius: 8, width: 22, alignItems: 'center', }}>            <Text style={{ color: 'white', fontSize: Constant.fontSizeSmall }}>新</Text>          </View>          <View style={{ flexDirection: 'row', flex: 1 }}>            <ScrollVertical              onChange={(index => {                this.index = index;              })}              enableAnimation={true}              data={array}              delay={2500}              duration={1000}              scrollHeight={34}              scrollStyle={{ alignItems: 'flex-start' }}              textStyle={{ color: Constant.colorTxtContent, fontSize: Constant.fontSizeSmall }} />          </View>          <View style={{ height: 14, width: 1, backgroundColor: Constant.colorTxtContent }} />          <Text style={{ color: Constant.colorTxtContent, paddingLeft: Constant.sizeMarginDefault, fontSize: Constant.fontSizeSmall }}>查看</Text>        </TouchableOpacity>      </View>    );  }};

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北票市| 拜泉县| 梁河县| 东丽区| 永宁县| 界首市| 当阳市| 双流县| 平乐县| 盐池县| 汨罗市| 祁门县| 漳平市| 马关县| 贡觉县| 南岸区| 郎溪县| 历史| 荔波县| 湖北省| 康马县| 农安县| 临沭县| 资兴市| 綦江县| 平果县| 远安县| 林州市| 长阳| 东山县| 常山县| 介休市| 凌云县| 任丘市| 建阳市| 得荣县| 屏边| 肃南| 武穴市| 铜梁县| 伊川县|