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 相关文章推荐
10个新的最有前途的JavaScript框架
Mar 12 Javascript
JQuery this 和 $(this) 的区别
Aug 23 Javascript
js post方式传递提交的实现代码
May 31 Javascript
JS按位非(~)运算符与~~运算符的理解分析
Jul 31 Javascript
js计算精度问题小结
Apr 22 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
Jan 06 Javascript
node.js使用nodemailer发送邮件实例
Mar 10 Javascript
jquery实现人性化的有选择性禁用鼠标右键
Jun 30 Javascript
Bootstrap框架的学习教程详解(二)
Oct 18 Javascript
js实现下拉菜单效果
Mar 01 Javascript
jquery 插件重新绑定的处理方法分析
Nov 23 jQuery
vue使用swiper实现中间大两边小的轮播图效果
Nov 24 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水印技术
2007/02/14 PHP
利用Memcached在php下实现session机制 替换PHP的原生session支持
2010/08/21 PHP
PHP编译安装中遇到的两个错误和解决方法
2014/08/20 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
tp5框架使用composer实现日志记录功能示例
2019/01/10 PHP
学习YUI.Ext基础第一天
2007/03/10 Javascript
使用jQuery轻松实现Ajax的实例代码
2010/08/16 Javascript
用JS提交参数创建form表单在FireFox中遇到的问题
2013/01/16 Javascript
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
2016/10/13 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
深入理解javascript中concat方法
2016/12/12 Javascript
AngularJS 防止页面闪烁的方法
2017/03/09 Javascript
vue axios 二次封装的示例代码
2017/12/08 Javascript
JavaScript寄生组合式继承实例详解
2018/01/06 Javascript
浅谈Vue2.0中v-for迭代语法的变化(key、index)
2018/03/06 Javascript
iview实现select tree树形下拉框的示例代码
2018/12/21 Javascript
Javascript数组方法reduce的妙用之处分享
2019/06/10 Javascript
Vue.js仿Select下拉框效果
2020/02/18 Javascript
vue组件入门知识全梳理
2020/09/21 Javascript
Python备份Mysql脚本
2008/08/11 Python
在ironpython中利用装饰器执行SQL操作的例子
2015/05/02 Python
python常见排序算法基础教程
2017/04/13 Python
python正则表达式去除两个特殊字符间的内容方法
2018/12/24 Python
解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题
2019/01/15 Python
Python Pillow Image Invert
2019/01/22 Python
python爬虫实现中英翻译词典
2019/06/25 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
python保存log日志,实现用log日志画图
2019/12/24 Python
tensorflow 动态获取 BatchSzie 的大小实例
2020/06/30 Python
影视制作岗位职责
2013/12/04 职场文书
思想品德自我评价
2014/02/04 职场文书
伦敦奥运会口号
2014/06/13 职场文书
英语自我介绍演讲稿
2014/09/01 职场文书
Win11 Build 25179预览版发布(附更新内容+ISO官方镜像下载)
2022/08/14 数码科技