react native 文字轮播的实现示例


Posted in Javascript onJuly 27, 2018

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

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

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

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 (
      <View style={{ borderWidth: 1, margin: 10, padding: 5, borderColor: "#dddddd" }}>
        <TouchableOpacity activeOpacity={0.75} onPress={() => {console.log(list[index].address)}}>
          <View style={{ width: "80%" }}>
            <Text
              style={{
                opacity,
                fontSize: 14,
              }}
            >
              {nowText}
            </Text>
          </View>
        </TouchableOpacity>
      </View>
    )
  }
}

引用:

const tProps = {
      list: [
        { id: 1, title: "不是这件事很难,而是每件事都难", address: 1 },
        { id: 2, title: "稳食姐,犯法啊", address: 2 },
        { id: 3, title: "夜半诉心声,何须太高清", address: 3 },
        { id: 4, title: "失恋唱情歌,即是漏煤气关窗", address: 4 },
      ],
    }

...

<TextLantern {...tProps} />

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

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js压缩利器
Feb 20 Javascript
JavaScript随机排序(随即出牌)
Sep 17 Javascript
javascript插入样式实现代码
Feb 22 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
Jan 09 Javascript
轻松实现js图片预览功能
Jan 18 Javascript
jQuery文本框得到与失去焦点动态改变样式效果
Sep 08 Javascript
微信小程序  自定义创建详细介绍
Oct 27 Javascript
JS简单实现移动端日历功能示例
Dec 28 Javascript
vue 使用eventBus实现同级组件的通讯
Mar 02 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
Oct 11 Javascript
webpack file-loader和url-loader的区别
Jan 15 Javascript
React.js组件实现拖拽排序组件功能过程解析
Apr 27 Javascript
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
Jul 27 #Javascript
浅析Vue项目中使用keep-Alive步骤
Jul 27 #Javascript
在vue中使用Autoprefixed的方法
Jul 27 #Javascript
JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例
Jul 27 #Javascript
Vue+Mock.js模拟登录和表格的增删改查功能
Jul 26 #Javascript
Vue头像处理方案小结
Jul 26 #Javascript
解决vue this.$forceUpdate() 处理页面刷新问题(v-for循环值刷新等)
Jul 26 #Javascript
You might like
php微信公众号js-sdk开发应用
2016/11/28 PHP
php实现图片按比例截取的方法
2017/02/06 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
2017/08/18 PHP
PHP implode()函数用法讲解
2019/03/08 PHP
在javascript将NodeList作为Array数组处理的方法
2010/07/09 Javascript
使用JavaScript动态设置样式实现代码及演示动画
2013/01/25 Javascript
js图片延迟加载的实现方法及思路
2013/07/22 Javascript
jQuery模拟原生态App上拉刷新下拉加载更多页面及原理
2015/08/10 Javascript
基于jQuery实现左右图片轮播(原理通用)
2015/12/24 Javascript
轻松5句话解决JavaScript的作用域
2016/07/15 Javascript
vue :src 文件路径错误问题的解决方法
2018/05/15 Javascript
解决layer弹出层msg的文字不显示的问题
2019/09/11 Javascript
nestjs返回给前端数据格式的封装实现
2021/02/22 Javascript
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
[04:50]DOTA2亚洲邀请赛小组赛第四日 TOP10精彩集锦
2015/02/02 DOTA
[59:00]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第一场 3月7日
2021/03/11 DOTA
Python中Collection的使用小技巧
2014/08/18 Python
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
2016/07/02 Python
安装python时MySQLdb报错的问题描述及解决方法
2018/03/20 Python
详谈Pandas中iloc和loc以及ix的区别
2018/06/08 Python
python中使用psutil查看内存占用的情况
2018/06/11 Python
浅谈Python 多进程默认不能共享全局变量的问题
2019/01/11 Python
python实现机器人卡牌
2019/10/06 Python
keras自定义损失函数并且模型加载的写法介绍
2020/06/15 Python
纯CSS3+DIV实现小三角形边框效果的示例代码
2020/08/03 HTML / CSS
工商管理应届生求职信
2013/10/07 职场文书
关于感恩的演讲稿200字
2014/08/26 职场文书
大一新生期末自我评价
2014/09/12 职场文书
声乐专业大学生职业生涯规划书:理想的未来需要自己去打造
2014/09/20 职场文书
司法局群众路线教育实践活动开展情况总结
2014/10/25 职场文书
单位考核聘任报告
2015/03/02 职场文书
物业保安辞职信
2015/05/12 职场文书
阿里云Nginx配置https实现域名访问项目(图文教程)
2021/03/31 Servers
深入浅析python3 依赖倒置原则(示例代码)
2021/07/09 Python