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 相关文章推荐
return false,对阻止事件默认动作的一些测试代码
Nov 17 Javascript
Jquery仿淘宝京东多条件筛选可自行结合ajax加载示例
Aug 28 Javascript
JavaScript字符串常用类使用方法汇总
Apr 14 Javascript
jQuery的css() 方法使用指南
May 03 Javascript
小巧强大的jquery layer弹窗弹层插件
Dec 06 Javascript
分享javascript、jquery实用代码段
Oct 20 Javascript
Nuxt配合Node在实际生产中的应用详解
Aug 07 Javascript
9102年webpack4搭建vue项目的方法步骤
Feb 20 Javascript
微信小程序配置服务器提示验证token失败的解决方法
Apr 03 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
Apr 20 Javascript
JavaScript React如何修改默认端口号方法详解
Jul 28 Javascript
React冒泡和阻止冒泡的应用详解
Aug 18 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学习笔记 面向对象的构造与析构方法
2011/06/13 PHP
php堆排序(heapsort)练习
2013/11/13 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
2014/06/23 PHP
Laravel 5框架学习之表单
2015/04/08 PHP
php web环境和命令行环境下查找php.ini的位置
2019/07/17 PHP
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
jQuery Ajax文件上传(php)
2009/06/16 Javascript
js 浏览器事件介绍
2012/03/30 Javascript
JS 添加网页桌面快捷方式的代码详细整理
2012/12/27 Javascript
javascript jq 弹出层实例
2013/08/25 Javascript
详解JavaScript中的forEach()方法的使用
2015/06/08 Javascript
JavaScript获取当前url根目录(路径)
2016/06/17 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
2016/09/14 Javascript
微信小程序 Windows2008 R2服务器配置TLS1.2方法
2016/12/05 Javascript
利用babel将es6语法转es5的简单示例
2017/12/01 Javascript
vue2.0 axios跨域并渲染的问题解决方法
2018/03/08 Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
2018/09/03 Javascript
nodejs分离html文件里面的js和css的方法
2019/04/09 NodeJs
基于Node.js搭建hexo博客过程详解
2019/06/25 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
2020/03/05 Javascript
Vue ElementUI实现:限制输入框只能输入正整数的问题
2020/07/31 Javascript
python输出当前目录下index.html文件路径的方法
2015/04/28 Python
基于python实现蓝牙通信代码实例
2019/11/19 Python
Python中if有多个条件处理方法
2020/02/26 Python
python中wx模块的具体使用方法
2020/05/15 Python
python代码中怎么换行
2020/06/17 Python
员工培训邀请函
2014/01/11 职场文书
军训学生自我鉴定
2014/02/12 职场文书
消防安全宣传标语
2014/06/07 职场文书
六查六看自检自查剖析材料
2014/10/14 职场文书
本科毕业论文答辩稿
2015/06/23 职场文书
六一儿童节园长致辞
2015/07/31 职场文书
导游词之珠海轮廓
2019/10/25 职场文书
python爬虫selenium模块详解
2021/03/30 Python
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python
vue项目打包后路由错误的解决方法
2022/04/13 Vue.js