资讯专栏INFORMATION COLUMN

react native 文字轮播

jayce / 2181人阅读

摘要:本着我为人人,人人为我的精神,敲过的代码就要分享出来项目需要做一个文字的轮播,开始想着是由下而上的滚动,但是还是写的不是很好,就先退而求其次,通过透明度来实现文字的滚动了也不能说是滚动了,是切换。有问题的可以在下留言面。

本着我为人人,人人为我的精神,敲过的代码就要分享出来!

项目需要做一个文字的轮播,开始想着是由下而上的滚动,但是还是写的不是很好,就先退而求其次,通过透明度来实现文字的滚动了(也不能说是滚动了,是切换)。

为了贴上来还是写了些注释的,也就不一一的解释了,很简单的代码,看注释就好了。(我就是懒)

import React, { Component } from "react"
import { View, Text, TouchableOpacity } from "react-native"

export default class TextLantern extends Component {
    constructor(props) {
        super(props)
        this.state = {
            nowText: "", // 显示的文本
            opacity: 1, // 透明度
            index: 0, // 下标
            list: [], // 滚动的列表
        }
    }

    componentWillMount() {
        const { list } = this.props
        this.setState({
            nowText: list[0].title, // 插入显示的文本
            list, // 滚动的列表
        })
        this.onStart() // 启动计时器 A
    }

    onStart = () => {
        const { Intervals = 5000 } = this.props // Intervals 可为参数非必传
        this.timer = setInterval(() => {
            this.onDisappear() // 间隔Intervals毫秒启动计时器B
        }, Intervals)
    };

    onDisappear = () => {
        this.timer1 = setInterval(() => {
            const { opacity, index, list } = this.state
            if (opacity === 0) {
                // 当透明度为0时候开始显示在一个文本
                if (index + 2 > list.length) {
                    // 当前显示的文本为最后一个时 重头再来
                    this.setState({
                        nowText: list[0].title,
                        index: 0,
                    })
                } else {
                    this.setState({
                        nowText: list[index + 1].title, // 下一个文本
                        index: index + 1,
                    })
                }
                this.onAppear() // 显示
                clearInterval(this.timer1)
                return
            }
            this.setState({
                opacity: parseFloat(Math.abs(opacity - 0.04).toFixed(2)),
            })
        }, 20)
    };

    onAppear = () => {
        this.timer2 = setInterval(() => {
            const { opacity } = this.state
            if (opacity === 1) {
                clearInterval(this.timer2)
                return
            }
            this.setState({
                opacity: parseFloat(Math.abs(opacity + 0.04).toFixed(2)),
            })
        }, 20)
    };

    render() {
        const { nowText, opacity, list, index } = this.state
        return (
            
                 {console.log(list[index].address)}}>
                    
                        
                            {nowText}
                        
                    
                
            
        )
    }
}
引用:
const tProps = {
            list: [
                { id: 1, title: "不是这件事很难,而是每件事都难", address: 1 },
                { id: 2, title: "稳食姐,犯法啊", address: 2 },
                { id: 3, title: "夜半诉心声,何须太高清", address: 3 },
                { id: 4, title: "失恋唱情歌,即是漏煤气关窗", address: 4 },
            ],
        }

...

点击跳转说一下我的做法:

通过当前的 index 来拿出对应的address进行跳转。

react要用的话改一下标签就好了。

好了好了。有问题的可以在下留言面。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/96289.html

相关文章

  • 移动开源项目周报1208

    摘要:由出品的移动开源项目周报第一期来啦。我们的移动开源周报集合了一周来新收录的优质的移动开发方面的开源项目,方便移动开发人员便捷的找到自己需要的项目工具等。 由OpenDigg 出品的移动开源项目周报第一期来啦。我们的移动开源周报集合了OpenDigg一周来新收录的优质的移动开发方面的开源项目,方便移动开发人员便捷的找到自己需要的项目工具等。 安卓开发 BigImageViewer 支持...

    Songlcy 评论0 收藏0
  • 小哥哥小姐姐看过来,这里有个组件库需要您签收一下

    摘要:如果你想减少包大小,你可以这样引入事实上,每个组件都是支持单独安装的,我们也推荐你使用这种方式引入组件。以下是运行示例后各界面的截图组件图标右上角的圆形徽标数字。 1. 前言 一直以来都想做个组件库,一方面是对工作中常遇问题的总结,另一方面也确实能够提升工作效率(谁又不想造一个属于自己的轮子呢~),于是乎就有了本文的主角儿rn-components-kit。 市面上web的UI组件库如...

    Alan 评论0 收藏0
  • ReactNative开发常用的三方模块

    摘要:写在前面一个好的缺不了好的三方支持,生活在这个活跃的开源社区,寻找合适的三方组件是一个开发者最基本的能力。下面分享几个我收集的三方模块,希望对大家有点帮助。 写在前面 一个好的App缺不了好的三方支持,生活在ReactNative这个活跃的开源社区,寻找合适的三方组件是一个开发者最基本的能力。不过不积跬步,无以至千里,不积小流,无以成江海。下面分享几个我收集的三方模块,希望对大家有点帮...

    frolc 评论0 收藏0

发表评论

0条评论

jayce

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<