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:以前写的xmlhttp池,代码
May 18 Javascript
JS 日期比较大小的简单实例
Jan 13 Javascript
jQuery实现锚点scoll效果实例分析
Mar 10 Javascript
js实现圆盘记速表
Aug 03 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
Mar 24 jQuery
微信小程序搜索组件wxSearch实例详解
Jun 08 Javascript
基于Vue生产环境部署详解
Sep 15 Javascript
vue计算属性和监听器实例解析
May 10 Javascript
微信小程序引用iconfont图标的方法
Oct 22 Javascript
javascript定时器的简单应用示例【控制方块移动】
Jun 17 Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
Mar 14 Javascript
react国际化化插件react-i18n-auto使用详解
Mar 31 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/23 PHP
php读取文件内容的三种可行方法示例介绍
2014/02/08 PHP
PHP开发中常用的十个代码样例
2016/02/02 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
图片格式的JavaScript和CSS速查手册
2007/08/20 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
js限制文本框只能输入数字方法小结
2014/06/16 Javascript
jQuery插件slides实现无缝轮播图特效
2015/04/17 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
2018/01/12 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
如何利用@angular/cli V6.0直接开发PWA应用详解
2018/05/06 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
微信小程序云函数添加数据到数据库的方法
2020/03/04 Javascript
微信小程序scroll-view点击项自动居中效果的实现
2020/03/25 Javascript
js实现带有动画的返回顶部
2020/08/09 Javascript
Vue自定义全局弹窗组件操作
2020/08/11 Javascript
解决vue prop传值default属性如何使用,为何不生效的问题
2020/09/21 Javascript
Python中的defaultdict模块和namedtuple模块的简单入门指南
2015/04/01 Python
python连接MySQL数据库实例分析
2015/05/12 Python
Python对切片命名的实现方法
2018/10/16 Python
对Python实现累加函数的方法详解
2019/01/23 Python
详解django2中关于时间处理策略
2019/03/06 Python
python中for循环变量作用域及用法详解
2019/11/05 Python
Python AutoCAD 系统设置的实现方法
2020/04/01 Python
Python填充任意颜色,不同算法时间差异分析说明
2020/05/16 Python
CSS3实现彩色进度条动画的示例
2020/10/29 HTML / CSS
意大利在线眼镜精品店:Ottica Lipari
2019/11/11 全球购物
幼儿园园长自我鉴定
2013/10/22 职场文书
个人职业生涯规划书1500字
2013/12/31 职场文书
学生会主席就职演讲稿
2014/01/14 职场文书
教师旷工检讨书
2014/01/18 职场文书
产品设计开发计划书
2014/05/07 职场文书
小学生志愿者活动方案
2014/08/23 职场文书
2014市府办领导班子“四风问题”对照检查材料思想汇报
2014/09/24 职场文书
党支部考察意见范文
2015/06/02 职场文书