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 图片上传预览-兼容标准
Jun 01 Javascript
基于jquery的loading效果实现代码
Nov 05 Javascript
jquery快捷动态绑定键盘事件的操作函数代码
Oct 17 Javascript
一个可以增加和删除行的table并可编辑表格中内容
Jun 16 Javascript
Javascript中数组方法汇总(推荐)
Apr 01 Javascript
JavaScript位移运算符(无符号) &gt;&gt;&gt; 三个大于号 的使用方法详解
Mar 31 Javascript
JavaScript中的对象和原型(一)
Aug 12 Javascript
Vue实现购物车功能
Apr 27 Javascript
jQuery手风琴的简单制作
May 12 jQuery
基于JS脚本语言的基础语法详解
Jul 22 Javascript
Node.Js中实现端口重用原理详解
May 03 Javascript
原生js实现贪食蛇小游戏的思路详解
Nov 26 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 XMLWriter类的简单示例代码(RSS输出)
2011/09/30 PHP
php页码形式分页函数支持静态化地址及ajax分页
2014/03/28 PHP
php递归删除目录下的文件但保留的实例分享
2014/05/10 PHP
PHP 生成N个不重复的随机数
2015/01/21 PHP
PHP实现获取文件mime类型多种方法解析
2020/05/28 PHP
PHP Trait功能与用法实例分析
2020/06/03 PHP
JavaScript 存在陷阱 删除某一区域所有节点
2010/05/10 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
Bootstrap每天必学之滚动监听
2016/03/16 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
jquery属性,遍历,HTML操作方法详解
2016/09/17 Javascript
基于vue 实现表单中password输入的显示与隐藏功能
2019/07/19 Javascript
JavaScript 实现同时选取多个时间段的方法
2019/10/17 Javascript
ES6学习笔记之let与const用法实例分析
2020/01/22 Javascript
uni-app使用微信小程序云函数的步骤示例
2020/05/22 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
2020/11/17 Vue.js
Python中max函数用法实例分析
2015/07/17 Python
Python爬取商家联系电话以及各种数据的方法
2018/11/10 Python
Python实现打砖块小游戏代码实例
2019/05/18 Python
python添加菜单图文讲解
2019/06/04 Python
python使用tkinter库实现五子棋游戏
2019/06/18 Python
Python寻找路径和查找文件路径的示例
2019/07/10 Python
对python中的装包与解包实例详解
2019/08/24 Python
selenium中get_cookies()和add_cookie()的用法详解
2020/01/06 Python
解决pytorch DataLoader num_workers出现的问题
2020/01/14 Python
Django模板标签{% for %}循环,获取制定条数据实例
2020/05/14 Python
HTML5 创建canvas元素示例代码
2014/06/04 HTML / CSS
HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
2018/04/23 HTML / CSS
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
聚美优品励志广告词
2014/03/14 职场文书
应用数学专业求职信
2014/03/14 职场文书
2014年档案管理员工作总结
2014/12/01 职场文书
八达岭长城导游词
2015/01/30 职场文书
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
2022/03/03 Python
Spring Boot 使用 Spring-Retry 进行重试框架
2022/04/24 Java/Android
Java处理延时任务的常用几种解决方案
2022/06/01 Java/Android