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 相关文章推荐
lyhucSelect基于Jquery的Select数据联动插件
Mar 29 Javascript
treepanel动态加载数据实现代码
Dec 15 Javascript
影响jQuery使用的14个方面
Sep 01 Javascript
javascript实现playfair和hill密码算法
Dec 07 Javascript
Javascript中的方法链(Method Chaining)介绍
Mar 15 Javascript
Javascript中document.referrer隐藏来源的方法
Jan 16 Javascript
详解Vue使用命令行搭建单页面应用
May 24 Javascript
js微信应用场景之微信音乐相册案例分享
Aug 11 Javascript
微信小程序实现image组件图片自适应宽度比例显示的方法
Jan 16 Javascript
实时监控input框,实现输入框与下拉框联动的实例
Jan 23 Javascript
iview实现select tree树形下拉框的示例代码
Dec 21 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
Oct 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中foreach循环中使用引用要注意的地方
2011/01/02 PHP
PHP获取文件绝对路径的代码(上一级目录)
2011/05/29 PHP
PHP的变量类型和作用域详解
2014/03/12 PHP
php 自定义错误日志实例详解
2016/11/12 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
2017/02/05 PHP
浅谈PHP中的Trait使用方法
2019/03/22 PHP
数理公式,也可以这么唯美
2021/03/10 无线电
popdiv
2006/07/14 Javascript
文字垂直滚动之javascript代码
2015/07/29 Javascript
使用angularjs创建简单表格
2016/01/21 Javascript
jQuery图片旋转插件jQueryRotate.js用法实例(附demo下载)
2016/01/21 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
2016/05/12 Javascript
js仿淘宝和百度文库的评分功能
2016/05/15 Javascript
JavaScript中的操作符类型转换示例总结
2016/05/30 Javascript
更靠谱的H5横竖屏检测方法(js代码)
2016/09/13 Javascript
vue双向绑定的简单实现
2016/12/22 Javascript
Node.js的特点详解
2017/02/03 Javascript
jQuery实现jQuery-form.js实现异步上传文件
2017/04/28 jQuery
jquery网页加载进度条的实现
2017/06/01 jQuery
get  post jsonp三种数据交互形式实例详解
2017/08/25 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
2019/01/19 Javascript
vue路由守卫及路由守卫无限循环问题详析
2019/09/05 Javascript
jQuery实现手风琴效果(蒙版)
2020/01/11 jQuery
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
2020/04/17 Javascript
在vue中配置不同的代理同时访问不同的后台操作
2020/09/11 Javascript
Python递归及尾递归优化操作实例分析
2020/02/01 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
2021/01/29 Python
CSS3实现红包抖动效果
2020/12/23 HTML / CSS
泰国综合购物网站:Lazada泰国
2018/04/09 全球购物
党员反对四风问题思想汇报
2014/09/12 职场文书
小兵张嘎观后感
2015/06/03 职场文书
校运会宣传稿大全
2015/07/23 职场文书
朋友离别感言
2015/08/04 职场文书
化工生产实习心得体会
2016/01/22 职场文书
适合后台管理系统开发的12个前端框架(小结)
2021/06/29 Javascript