美文网首页react-native
写一个简单的reactnative 弹幕

写一个简单的reactnative 弹幕

作者: 猪猪9527 | 来源:发表于2017-10-11 15:35 被阅读357次

先上图:

WechatIMG18.jpeg

Barrage.js

import React, {Component} from 'react';
import {
    Text,
    View,
    Easing,
    Animated,
    Dimensions
} from 'react-native';

const {width} = Dimensions.get('window')
const getRandomColor = () => {
    return '#' + Math.floor(Math.random() * 16777215).toString(16);
}

const getRandomNum = (Min, Max) => {
    var Range = Max - Min;
    var Rand = Math.random();
    return (Min + Math.round(Rand * Range));
}

class BarrageView extends Component {

    constructor(props) {
        super(props)
        this.state = {
            left: new Animated.Value(0)
        }
    }

    componentDidMount() {
        this.begin();
    }


    render() {
        let {text} = this.props;
        return <Animated.View
            removeClippedSubviews={true}
            style={{
                top: getRandomNum(0, 10),
                left: this.state.left.interpolate({
                    inputRange: [0, 1],
                    outputRange: [width, -width]
                })
            }}>
            <Text style={[{
                fontSize: getRandomNum(12, 40),
                color: getRandomColor(),
                backgroundColor: '#00000000'
            }, styles.text]}>{text}</Text>
        </Animated.View>
    }

    begin() {
        Animated.timing(this.state.left, {
            toValue: 1,
            duration: 2 * getRandomNum(5000, 9000),
            easing: Easing.linear
        }).start();
    }
}


export default class Barrage extends Component {

    render() {
        let views = this.props.list.map((text, index) => {
            return <BarrageView key={index} text={text}/>
        })
        return <View
            pointerEvents='none'
            removeClippedSubviews={true}
            style={{
                backgroundColor: '#00000000',
                justifyContent: 'space-around',
                overflow: 'hidden',
                position: 'absolute',
                top: 0,
                left: 0,
                right: 0,
                bottom: 0,
            }}>
            {views}
        </View>
    }
}

const styles = {
    text: {
        // borderWidth:StyleSheet.hairlineWidth,
        // borderColor:getRandomColor(),
        // backgroundColor:'red'

    }
}

用法:

import React, { Component } from 'react';
import { AppRegistry, Text } from 'react-native';

import ./Barrage.js

const list = ['喜腾官方旗舰店', '百万庄大街粮科大厦', '傻逼', '默认情况下', '王强', '13', '刘殿琪', '猪猪侠', '🐷', '么么哒', '琳琳', '振国', , '王强', '13', '刘殿琪', '猪猪侠', '🐷', '么么哒', '琳琳', '振国',];
class HelloWorldApp extends Component {
  render() {
    return (
      <Text>Hello world!</Text>
     <Barrage list={list}/>
    );
  }
}

// 注意,这里用引号括起来的'HelloWorldApp'必须和你init创建的项目名一致
AppRegistry.registerComponent('HelloWorldApp', () => HelloWorldApp);

相关文章

网友评论

    本文标题:写一个简单的reactnative 弹幕

    本文链接:https://www.haomeiwen.com/subject/ogewyxtx.html