• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >html5 > React Native 之ScrollView轮播图实现方法实例

React Native 之ScrollView轮播图实现方法实例

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-03

本文主要包含ScrollView,Native,React,ie,实现等相关知识,匿名希望在学习及工作中可以帮助到您
1.index.Android.js

import React, { Component } from 'react'; import { AppRegistry, StyleSheet, TextInput, TouchableOpacity, ScrollView, Text, View } from 'react-native'; import ScrollViewDemo from "./scrollViewDemo"; import ScrollViewTop from "./scrollViewTop"; import PositionDemo from "./positionDemo"; export default class CQQLoginDemo extends Component { render() { return ( <ScrollViewTop/> ); } } AppRegistry.registerComponent('CQQLoginDemo', () => CQQLoginDemo);

2.在项目的 index.android.js同一目录下 创建json文件 这样方便图片的访问,资源图片放在项目名称\android\app\src\main\res\drawable 下面

这里的BadgeData.json 如下:

{ "data":[ { "icon" : "danjianbao", "title" : "单肩包" }, { "icon" : "liantiaobao", "title" : "链条包" }, { "icon" : "qianbao", "title" : "钱包" }, { "icon" : "shoutibao", "title" : "手提包" }, { "icon" : "shuangjianbao", "title" : "双肩包" }, { "icon" : "xiekuabao", "title" : "斜挎包" } ] }

3.主要的文件 scrollViewTop.js 文件 如下 具体注释中已写 直接上代码:

/** * Sample React Native App * * @flow */ import React, { Component } from 'react'; import { AppRegistry, StyleSheet, ScrollView, Image, Text, View } from 'react-native'; let Dimensions = require('Dimensions'); let ScreenWidth = Dimensions.get('window').width; let ScreenHeight = Dimensions.get('window').height; import ImageData from "./BadgeData.json"; export default class scrollViewTop extends Component { constructor(props) { super(props); this.state = { currentPage: 0 }; } static defaultProps = { duration: 1000, } componentDidMount() { this._startTimer(); } componentWillUnmount() { // 如果存在this.timer,则使用clearTimeout清空。 // 如果你使用多个timer,那么用多个变量,或者用个数组来保存引用,然后逐个clear this.timer && clearTimeout(this.timer); } render() { return ( <View style={styles.continer}> <ScrollView ref='scrollView' //水平方向 horizontal={true} //当值为true时显示滚动条 showsHorizontalScrollIndicator={false} //当值为true时,滚动条会停在滚动视图的尺寸的整数倍位置。这个可以用在水平分页上 pagingEnabled={true} //滑动完一贞 onMomentumScrollEnd={(e)=>{this._onAnimationEnd(e)}} //开始拖拽 onScrollBeginDrag={()=>{this._onScrollBeginDrag()}} //结束拖拽 onScrollEndDrag={()=>{this._onScrollEndDrag()}} > {this._renderAllImage()} </ScrollView> <View style={styles.pageViewStyle}> {this._renderAllIndicator()} </View> </View> ); } /**开始拖拽 */ _onScrollBeginDrag(){ console.log("开始拖拽"); //两种清除方式 都是可以的没有区别 // this.timer && clearInterval(this.timer); this.timer && clearTimeout(this.timer); } /**停止拖拽 */ _onScrollEndDrag(){ console.log("停止拖拽"); this.timer &&this._startTimer(); } /**1.轮播图片展示 */ _renderAllImage() { let allImage = []; let imgsArr = ImageData.data; for (let i = 0; i < imgsArr.length; i++) { let imgsItem = imgsArr[i]; allImage.push( <Image key={i} source={{uri:imgsItem.icon}} style={styles.imageStyle} /> ); } return allImage; } /**2.手动滑动分页实现 */ _onAnimationEnd(e) { //求出偏移量 let offsetX = e.nativeEvent.contentOffset.x; //求出当前页数 let pageIndex = Math.floor(offsetX / ScreenWidth); //更改状态机 this.setState({ currentPage: pageIndex }); } /**3.页面指针实现 */ _renderAllIndicator() { let indicatorArr = []; let style; let imgsArr = ImageData.data; for (let i = 0; i < imgsArr.length; i++) { //判断 style = (i==this.state.currentPage)?{color:'orange'}:{color:'white'}; indicatorArr.push( <Text key={i} style={[{fontSize:30},style]}> ? </Text> ); } return indicatorArr; } /**4.通过定时器实现自动播放轮播图 */ _startTimer(){ let scrollView = this.refs.scrollView; this.timer = setInterval( ()=>{console.log('开启定时器'); let imageCount = ImageData.data.length; //4.1 设置圆点 let activePage = 0; //4.2判断 if(this.state.currentPage>=imageCount+1){ activePage = 0; }else{ activePage = this.state.currentPage+1; } //4.3 更新状态机 this.setState({currentPage:activePage}); //4.4 让scrollview 滚动起来 let offsetX = activePage * ScreenWidth; scrollView.scrollResponderScrollTo({x:offsetX,y:0,animated:true}); }, this.props.duration ); } } const styles = StyleSheet.create({ continer:{ backgroundColor: '#dddddd' }, imageStyle:{ height:400, width:ScreenWidth }, pageViewStyle:{ height:25, width:ScreenWidth, backgroundColor:'rgba(0,0,0,0.4)', position:'absolute', bottom:0, flexDirection:'row', alignItems:'center', } });

以上就是React Native 之ScrollView轮播图实现方法实例的详细内容,更多请关注微课江湖其它相关文章!

您可能想查找下面的文章:

  • React Native 之ScrollView轮播图实现方法实例

相关文章

  • 2018-12-03html5 canvas图像处理的实现代码分享
  • 2018-12-03HTML5 有哪些让你惊艳的 demo?
  • 2017-08-06利用html5 canvas破解简单验证码及getImageData接口应用
  • 2018-12-03网页中如何让某两行文字精确的对齐(两侧对齐)?
  • 2018-12-03使用HTML5 Notication API实现一个定时提醒工具
  • 2018-12-03canvas游戏开发学习之七:变形
  • 2018-12-03如何在一个月之内从零基础成为初级CSS前端开发工程师?
  • 2018-12-03避免常见的六种HTML5错误用法 (2)
  • 2018-12-03HTML5梦幻之旅——炫丽的流星雨效果实现过程_html5教程技巧
  • 2017-08-06HTML5组件Canvas实现图像灰度化(步骤+实例效果)

文章分类

  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure

最近更新的内容

    • 用仿ActionScript的语法来编写html5——第五篇,Graphics绘图
    • Web前端页面跳转并取到值
    • HTML5 新标签全部总汇(推荐)
    • html5中文本框输入去除内容提示
    • 浅谈图形扭曲的实例教程
    • HTML5 对各个标签的定义与规定:body
    • 如何评价天凤最近开始测试的 Web 版?
    • HTML5之SVG 2D入门6—视窗坐标系与用户坐标系及变换概述
    • 使用vue-devtools开发Vue
    • App Store 或者 Google Play Store 中有哪些不错的 HTML5 app?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有