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 相关文章推荐
对textarea框的代码调试,而且功能上使用非常方便,酷
Jun 30 Javascript
转一个日期输入控件,支持FF
Apr 27 Javascript
又一个小巧的图片预加载类
May 05 Javascript
javascript new一个对象的实质
Jan 07 Javascript
Jquery之Bind方法参数传递与接收的三种方法
Jun 24 Javascript
jQuery 实现自动填充邮箱功能(带下拉提示)
Oct 14 Javascript
javascript实现切换td中的值
Dec 05 Javascript
分享9点个人认为比较重要的javascript 编程技巧
Apr 27 Javascript
JavaScript函数节流和函数去抖知识点学习
Jul 31 Javascript
VUE引入第三方js包及调用方法讲解
Mar 01 Javascript
Javascript读取上传文件内容/类型/字节数
Apr 30 Javascript
Vue实现附件上传功能
May 28 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页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
2013/06/03 PHP
一个PHP实现的轻量级简单爬虫
2015/07/08 PHP
一步一步教你写一个jQuery的插件教程(Plugin)
2009/09/03 Javascript
document.createElement()用法
2013/03/13 Javascript
jQuery固定元素插件scrolltofixed使用指南
2015/04/21 Javascript
javascript实时获取鼠标坐标值并显示的方法
2015/04/30 Javascript
详解JavaScript中shift()方法的使用
2015/06/09 Javascript
Bootstrap实现提示框和弹出框效果
2017/01/11 Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
2017/03/14 Javascript
JavaScript数据结构中串的表示与应用实例
2017/04/12 Javascript
利用Mongoose让JSON数据直接插入或更新到MongoDB
2017/05/03 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
2018/05/21 Javascript
关于Vue组件库开发详析
2018/07/01 Javascript
webpack手动配置React开发环境的步骤
2018/07/02 Javascript
关于JavaScript中高阶函数的魅力详解
2018/09/07 Javascript
bootstrap table插件动态加载表头
2019/07/19 Javascript
python发送邮件的实例代码(支持html、图片、附件)
2013/03/04 Python
使用python PIL库实现简单验证码的去噪方法步骤
2019/05/10 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
使用OpenCV实现仿射变换—平移功能
2019/08/29 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
Python HTTP下载文件并显示下载进度条功能的实现
2020/04/02 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
2020/05/25 Python
高考考python编程是真的吗
2020/07/20 Python
一款利用html5和css3动画排列人物头像的实例演示
2014/12/05 HTML / CSS
德国2018年度最佳在线药房:Bodfeld Apotheke
2019/11/04 全球购物
SIDESTEP荷兰:在线购买鞋子
2019/11/18 全球购物
美国宠物护理专家:Revival Animal Health
2020/01/05 全球购物
物业管理求职自荐信
2013/09/25 职场文书
编辑硕士自荐信范文
2013/11/27 职场文书
工艺员岗位职责
2014/02/11 职场文书
学习十八大演讲稿
2014/09/15 职场文书
2016春节放假通知范文
2015/08/18 职场文书
如何使用Python实现一个简易的ORM模型
2021/05/12 Python
使用canvas仿Echarts实现金字塔图的实例代码
2021/11/11 HTML / CSS
Python正则表达式中flags参数的实例详解
2022/04/01 Python