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 数据类型转换(parseInt,parseFloat)
Jul 20 Javascript
jquery插件之easing 动态菜单
Aug 21 Javascript
jQuery实现可拖动的浮动层完整代码
May 27 Javascript
js 动态为textbox添加下拉框数据源的方法
Apr 24 Javascript
JavaScript 里的类数组对象
Apr 08 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
Dec 02 Javascript
jQuery 中的 DOM 操作
Apr 26 Javascript
js实现五星评价功能
Mar 08 Javascript
Vue $emit $refs子父组件间方法的调用实例
Sep 12 Javascript
vue项目中使用Svg的方法
Oct 24 Javascript
React+EggJs实现断点续传的示例代码
Jul 07 Javascript
nuxt 页面路由配置,主页轮播组件开发操作
Nov 05 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中在数据库中保存Checkbox数据(1)
2006/10/09 PHP
PHP邮件发送类PHPMailer用法实例详解
2014/09/22 PHP
php使用pclzip类实现文件压缩的方法(附pclzip类下载地址)
2016/04/30 PHP
PHP实现导出带样式的Excel
2016/08/28 PHP
php中照片旋转 (orientation) 问题的正确处理
2017/02/16 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
2019/03/22 PHP
JsDom 编程小结
2011/08/09 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
2013/10/30 Javascript
JS实现仿中关村论坛评分后弹出提示效果的方法
2015/02/23 Javascript
javascript实现数独解法
2015/03/14 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
2015/08/21 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
2015/10/19 Javascript
原生javascript实现分享到朋友圈功能 支持ios和android
2016/05/11 Javascript
bootstrapValidator bootstrap-select验证不可用的解决办法
2017/01/11 Javascript
JS实现京东首页之页面顶部、Logo和搜索框功能
2017/01/12 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
JS SetInterval 代码实现页面轮询
2017/08/11 Javascript
AjaxUpLoad.js实现文件上传
2018/03/05 Javascript
Vue-CLI与Vuex使用方法实例分析
2020/01/06 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
2020/03/14 Javascript
《与孩子一起学编程》python自测题
2018/05/27 Python
对python生成业务报表的实例详解
2019/02/03 Python
Python正则表达式匹配和提取IP地址
2019/06/06 Python
python带参数打包exe及调用方式
2019/12/21 Python
django数据模型on_delete, db_constraint的使用详解
2019/12/24 Python
Python离线安装各种库及pip的方法
2020/11/28 Python
库存图片、照片、矢量图、视频和音乐:Shutterstock
2021/02/12 全球购物
Javascript如何发送一个Ajax请求
2015/01/26 面试题
毕业生实习鉴定
2013/12/11 职场文书
我的网上商城创业计划书
2013/12/26 职场文书
《记金华的双龙洞》教学反思
2014/04/19 职场文书
学习群众路线的心得体会
2014/11/05 职场文书
2014学生会工作总结报告
2014/12/02 职场文书
2016年校长新年寄语
2015/08/17 职场文书
Python&Matlab实现灰狼优化算法的示例代码
2022/03/21 Python