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 相关文章推荐
Jquery动态进行图片缩略的原理及实现
Aug 13 Javascript
js操作输入框提示信息且响应鼠标事件
Mar 25 Javascript
javascript针对cookie的基本操作实例详解
Nov 30 Javascript
给before和after伪元素设置js效果的方法
Dec 04 Javascript
js实现淡入淡出轮播切换功能
Jan 13 Javascript
浅谈箭头函数写法在ReactJs中的使用
Aug 22 Javascript
JavaScript使用FileReader实现图片上传预览效果
Mar 27 Javascript
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
Dec 26 Javascript
Vue数据监听方法watch的使用
Mar 28 Javascript
vue-cli项目中使用echarts图表实例
Oct 22 Javascript
webpack打包html里面img后src为“[object Module]”问题
Dec 22 Javascript
基于原生JS封装的Modal对话框插件的示例代码
Sep 09 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验证码类ValidateCode解析
2017/01/07 PHP
Laravel5中Cookie的使用详解
2017/05/03 PHP
如何用javascript去掉字符串里的所有空格
2007/02/08 Javascript
Jquery实战_读书笔记2 选择器
2010/01/22 Javascript
基于jQuery的左右滚动实现代码
2010/12/03 Javascript
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
js post提交调用方法
2014/02/12 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
JavaScript+html5 canvas实现图片破碎重组动画特效
2016/02/22 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
2016/12/14 Javascript
AngularJS Controller作用域
2017/01/09 Javascript
Node.js+jade抓取博客所有文章生成静态html文件的实例
2017/09/19 Javascript
AngularJs 禁止模板缓存的方法
2017/11/28 Javascript
webpack+vuex+axios 跨域请求数据的示例代码
2018/03/06 Javascript
Bootstarp在pycharm中的安装及简单的使用方法
2019/04/19 Javascript
JS实现商城秒杀倒计时功能(动态设置秒杀时间)
2019/12/12 Javascript
js实现随机抽奖
2020/03/19 Javascript
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
Python的语言类型(详解)
2017/06/24 Python
selenium python 实现基本自动化测试的示例代码
2019/02/25 Python
Pycharm 2020年最新激活码(亲测有效)
2020/09/18 Python
python opencv实现简易画图板
2020/08/27 Python
世界上最具创新性的增强型知名运动品牌:Proviz
2018/04/03 全球购物
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
硕士研究生个人求职信
2013/12/04 职场文书
秋季开学典礼主持词
2014/03/19 职场文书
百年校庆节目主持词
2014/03/27 职场文书
机关办公室岗位职责
2014/04/16 职场文书
派出所班子党的群众路线对照检查材料思想汇报
2014/10/01 职场文书
2014年有孩子的离婚协议书范本
2014/10/08 职场文书
2015年度员工自我评价范文
2015/03/11 职场文书
企业承诺书格式范文
2015/04/28 职场文书
主题班会开场白
2015/06/01 职场文书
毕业欢送晚会主持词
2019/06/25 职场文书
读《方与圆》有感:交友方圆有度
2020/01/14 职场文书
详解JavaScript中Arguments对象用途
2021/08/30 Javascript