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 相关文章推荐
javascript之大字符串的连接的StringBuffer 类
May 08 Javascript
IE6下JS动态设置图片src地址问题
Jan 08 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
Oct 17 Javascript
js编写贪吃蛇的小游戏
Aug 24 Javascript
Node.js操作mysql数据库增删改查
Mar 30 Javascript
Bootstrap媒体对象的实现
May 01 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
Dec 04 Javascript
JavaScript基于DOM操作实现简单的数学运算功能示例
Jan 16 Javascript
js获取ip和地区
Mar 10 Javascript
JavaScript中call和apply方法的区别实例分析
Aug 03 Javascript
JavaScript实现的拼图算法分析
Feb 13 Javascript
Vue在chrome44偶现点击子元素事件无法冒泡的解决方法
Dec 15 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笔记之:有规律大文件的读取与写入的分析
2013/04/26 PHP
php实现的发送带附件邮件类实例
2014/09/22 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
在JavaScript中遭遇级联表达式陷阱
2007/03/08 Javascript
比较详细的关于javascript中void(0)的具体含义解释
2007/08/02 Javascript
ExtJS Window 最小化的一种方法
2009/11/18 Javascript
js遍历td tr等html元素
2012/12/13 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
2016/05/26 Javascript
详解微信小程序开发之下拉刷新 上拉加载
2016/11/24 Javascript
jquery二级目录选中当前页的css样式
2016/12/08 Javascript
JavaScript登录记住密码操作(超简单代码)
2017/03/22 Javascript
详解Vue2.0 事件派发与接收
2017/09/05 Javascript
利用QT写一个极简单的图形化Python闹钟程序
2015/04/07 Python
简单解决Python文件中文编码问题
2015/11/22 Python
Python实现判断一行代码是否为注释的方法
2018/05/23 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
2018/07/04 Python
PyQt5 QTable插入图片并动态更新的实例
2019/06/18 Python
react+django清除浏览器缓存的几种方法小结
2019/07/17 Python
学习Django知识点分享
2019/09/11 Python
TensorFlow的reshape操作 tf.reshape的实现
2020/04/19 Python
python高级特性简介
2020/08/13 Python
浅析Python中字符串的intern机制
2020/10/03 Python
Lentiamo比利时:便宜的隐形眼镜
2020/02/14 全球购物
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
出纳岗位职责模板
2013/11/27 职场文书
一年级学生期末评语
2014/04/21 职场文书
行政管理专业求职信
2014/07/06 职场文书
向国旗敬礼学生寄语大全
2014/09/30 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
研究生导师评语
2014/12/31 职场文书
爱牙日宣传活动总结
2015/02/05 职场文书
2015年新农村建设工作总结
2015/05/22 职场文书
Python访问Redis的详细操作
2021/06/26 Python
CSS 伪元素::marker详解
2021/06/26 HTML / CSS
Python Pygame实战之塔防游戏的实现
2022/03/17 Python