001-简单的秒表组件--react-native

001-简单的秒表组件--react-native

一:

简单的新手练手作品,尝试一下自己编写一个组件,正好前段时间一直有看大神们的计时器组件,打算着手写一个秒表的计时器。

二:

1-:支持自己决定组件运行时间;

2-:支持暂停计时和清除计时的操作;

三:Coding
1-:设计变量

    export default class TimesComponent extends Component {
    constructor(props) {
        super(props);
        this.state={
            changeState:false,
            timeNumber:0,       //跑的秒
            minuteNumber:0,     //跑的分
            minute:0,           //你所需要的分
            second:0            //你所需要的秒
        };
    }

2-:简单的布局

render() {
        const {timeNumber,minuteNumber}=this.state;
        //如果开始计时,则'开始计时'不能按
        var Main;
        Main=(this.state.changeState==false
            ?<TouchableOpacity
                onPress={()=>{
                    this.timing();
                }}
            >
                <Text>开始计时</Text>
            </TouchableOpacity>
            :<Text>开始计时</Text>);
        return (
        //用TextInput来输入秒表需要跑的时间
            <View style={styles.container}>
                <View style={{flexDirection:'row'}}>
                    <Text>你打算跑<TextInput
                        style={styles.textInput}
                        autoCapitalize="none"
                        autoCorrect={false}
                        maxLength={2}
                        selectTextOnFocus={true}
                        onChangeText={(Number)=>{
                            this.setState({
                                minute:Number,
                            })
                        }}
                    />分<TextInput
                        style={styles.textInput}
                        autoCapitalize="none"
                        autoCorrect={false}
                        maxLength={2}
                        selectTextOnFocus={true}
                        onChangeText={(Number)=>{
                            this.setState({
                                second:Number,
                            })
                        }}
                    />秒</Text>
                </View>
                <View style={{flexDirection:'row'}}>
                    <Text >{minuteNumber}分</Text>
                    <Text >{timeNumber}秒</Text>
                </View>
                {Main}
                <TouchableOpacity
                    onPress={()=>{
                        this.stop()
                    }}
                >
                    <Text>暂停</Text>
                </TouchableOpacity>
                <TouchableOpacity
                    onPress={()=>{
                        this.clear();
                    }}
                >
                    <Text>清除时间</Text>
                </TouchableOpacity>
            </View>
        );
    }

3-:开始计时的方法

timing=()=>{
        const times=this.state.timeNumber;
        const minutes=this.state.minuteNumber;

        //如果没有设计时间就弹出'你还没有设计时间'
        if(this.state.minute==0&&this.state.second==0){
            alert('你还没有设计时间');
            this.interval && clearInterval(this.interval);
            this.setState({
                changeState:false
            })
        }else if(this.state.second>=10) {
            alert('最大为9秒');
            //为了方便显示我设置了10s进1,所以秒钟上最大为9
            this.setState({
                changeState:false
            })
        }else {

            //开始计时
            this.setState({
                changeState:!this.state.changeState,
            },()=>{
                if(this.state.changeState) {
                    this.interval = setInterval(() => {
                        const timer = this.state.timeNumber + 1;
                        const minuter = this.state.minuteNumber;
                        //如果秒跑到了10,那么分钟加1,秒变回0
                        if (timer == 10) {
                            const minuter = this.state.minuteNumber + 1;
                            this.setState({
                                timeNumber: 0,
                                minuteNumber: minuter
                            })

                            //如过跑到了你输入的时间则停止,并且告诉你时间到了
                        } else if (minuter >= this.state.minute && timer >= this.state.second) {
                            this.interval && clearInterval(this.interval);
                            this.setState({
                                timeNumber:timer
                            });
                            alert('时间到了');
                            //显示跑了多久了
                        } else if (timer != 10) {
                            this.setState({
                                timeNumber: timer,
                                minuteNumber: minuter,
                            })
                        }
                    }, 1000);
                }
            })
        }
    };

4-:暂停计时器

 stop=()=>{
        this.interval && clearInterval(this.interval);
        this.setState({
            changeState:false
        })
    };

5-:清除计时器上的时间

 clear=()=>{
        this.interval && clearInterval(this.interval);
        this.setState({
            timeNumber:0,
            minuteNumber:0,
            changeState:false
        })
    };

运行效果

aaaa.gif

代码比较简单,只是练手用,如果对你有帮助那就更好了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,261评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,196评论 4 61
  • 一匹骏马 一壶清酒 携子之手 江湖忘忧
    古洛Hester阅读 975评论 0 1
  • 我祖籍山东,出生在哈尔滨小县城,父母当初都挨过饿,受过穷。父辈的父辈都是持家的好手,各拉扯三个孩子长大。 我的父母...
    压力很大的六爷阅读 5,420评论 16 13
  • 2017/5/16 (二十六) 感恩 —— 念诵佛经,回向给众生,愿众生离苦得乐。 感恩 —— 吃素第3天,谢谢自...
    慢慢花开阅读 1,235评论 0 0