首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何自动播放和从最后到第一- ScrollView

如何自动播放和从最后到第一- ScrollView
EN

Stack Overflow用户
提问于 2021-02-08 11:29:23
回答 1查看 321关注 0票数 0

我是react native的新手,我在react-native中找到了Animated,所以有一个带有图像的旋转木马。我可以只水平滑动它,但我希望它也可以默认自动滚动。当它变成最后一个滑块时,它应该从带有动画的第一个滑块开始。请帮我解决这个问题,谢谢!

Carousel.js (这里是共享代码- https://codeshare.io/G8EZOZ):

代码语言:javascript
运行
AI代码解释
复制
import React, { useCallback, useEffect, useRef, useState } from 'react'
import {
  SafeAreaView,
  ScrollView,
  StyleSheet,
  View,
  ImageBackground,
  Animated,
  useWindowDimensions,
  Alert,
  Pressable,
} from 'react-native'
import { useDispatch, useSelector } from 'react-redux'
import { useTranslation } from 'react-i18next'
import i18next from 'i18next'

import * as slidersAction from '../../store/actions/sliders'
import Loading from './Loading'

const Carousel = (props) => {
  const scrollX = useRef(new Animated.Value(0)).current
  const lang = i18next.language

  const { width: windowWidth } = useWindowDimensions()
  const { t, i18n } = useTranslation()
  const [error, setError] = useState()
  const [isLoading, setisLoading] = useState(false)
  const dispatch = useDispatch()
  const images = useSelector((state) => state.sliders.availableSliders)

  const loadSliders = useCallback(async () => {
    setisLoading(true)
    setError(null)

    try {
      await dispatch(slidersAction.fetchSliders(t('sliders.errorMessageFetch')))
    } catch (err) {
      setError(err)
    }
    setisLoading(false)
  })

  useEffect(() => {
    loadSliders()
  }, [])

  if (error) {
    Alert.alert(t('sliders.errorTitle'), t('sliders.errorMessageFetch'), [{ text: 'Ок' }])
    setError(null)
  }

  if (isLoading) {
    return <Loading />
  }

  return (
    <SafeAreaView style={styles.container}>
      <View style={styles.scrollContainer}>
        <ScrollView
          horizontal={true}
          style={styles.scrollViewStyle}
          pagingEnabled
          showsHorizontalScrollIndicator={false}
          onScroll={Animated.event(
            [
              {
                nativeEvent: {
                  contentOffset: {
                    x: scrollX,
                  },
                },
              },
            ],
            { useNativeDriver: false }
          )}
          scrollEventThrottle={1}
        >
          {images.map((image, imageIndex) => {
            return (
              <Pressable
                key={imageIndex}
                onPress={() =>
                  +image.enableLink
                    ? props.navigation.navigate('Home', {
                        categoryId: image.categoryId,
                        categoryTitle: image.title,
                        categoryTitleKg: image.titleKg,
                        lang: lang,
                      })
                    : {}
                }
              >
                <View style={{ width: windowWidth, height: 100, maxHeight: 160 }}>
                  <ImageBackground
                    source={{ uri: image.imageUrl }}
                    style={styles.card}
                    resizeMode='contain'
                  />
                </View>
              </Pressable>
            )
          })}
        </ScrollView>
        <View style={styles.indicatorContainer}>
          {images.map((image, imageIndex) => {
            const width = scrollX.interpolate({
              inputRange: [
                windowWidth * (imageIndex - 1),
                windowWidth * imageIndex,
                windowWidth * (imageIndex + 1),
              ],
              outputRange: [8, 16, 8],
              extrapolate: 'clamp',
            })
            return <Animated.View key={imageIndex} style={[styles.normalDot, { width }]} />
          })}
        </View>
      </View>
    </SafeAreaView>
  )
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    alignItems: 'center',
    justifyContent: 'center',
  },
  scrollContainer: {
    alignItems: 'center',
    justifyContent: 'center',
  },
  card: {
    flex: 1,
    overflow: 'hidden',
    alignItems: 'center',
    justifyContent: 'center',
  },
  normalDot: {
    height: 8,
    width: 8,
    borderRadius: 4,
    backgroundColor: 'silver',
    marginHorizontal: 4,
  },
  indicatorContainer: {
    flexDirection: 'row',
    alignItems: 'center',
    justifyContent: 'center',
    marginTop: 2,
    marginBottom: 1,
  },
})

export default Carousel
EN

回答 1

Stack Overflow用户

发布于 2021-02-17 22:20:38

虽然您提供的代码不足以创建一个可工作的示例来测试这一点,但您应该能够使用ScrollView's scrollTo component method实现这一点。

要自动滚动,可以在loadSliders函数中调用setTimeout:

代码语言:javascript
运行
AI代码解释
复制
const loadSliders = useCallback(async () => {
  setisLoading(true)
  setError(null)

  try {
    await dispatch(slidersAction.fetchSliders(t('sliders.errorMessageFetch')))
  } catch (err) {
    setError(err)
  }
  setisLoading(false)
  
  // new code
  let stopAutoScroll = null // consider making this a state variable
  const autoScrollOneStep = () => {
    YOUR_SCROLLVIEW_REF_HERE.scrollTo({ x: YOUR_CURRENT_PAGE_X + X_OFFSET, animated: true })
    stopAutoScroll = setTimeout(autoScrollOneStep, 2000)
  }
  stopAutoScroll = setTimeout(autoScrollOneStep, 2000)
})

您可以随时使用clearTimeout(stopAutoScroll)停止自动滚动(可能是在onScroll方法中,这样一旦用户滚动,自动滚动就会停止

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66100764

复制
相关文章
od 转储 二进制文件常用命令
 查看 .shstrtab , 使用 --skip-bytes 和 --read-bytes 定位:
西湖醋鱼
2020/12/30
6620
堆转储文件泄露
一开始通过浏览器访问目标站点,发现网站Icon是一个小绿叶,初步猜测网站使用了Spring Boot框架。然后进行执行器端点路径的枚举,得到以下相关路径:
Naraku
2021/07/29
1.1K0
堆转储文件泄露
js 数组转json,json转数组[js 数组与json 互相转换]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151825.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/24
12.3K0
js json字符串转json数组_string转json数组
查了很久,也实践了很多,都没有成功。网上说得最多的就是用 net.sf.json.JSONArray和net.sf.json.JSONObject 两个jar 包里面的
全栈程序员站长
2022/11/08
13.6K0
日志文件转储压缩实现
日志的转储和压缩是非常关键的,它不仅可以减少硬盘空间占用,主要还可以在发生故障时根据日志定位出故障原因。下面来看看golang和java的文件转储实现。
我的小碗汤
2018/08/22
8890
日志文件转储压缩实现
java json数组转json对象_json对象数组
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/09/30
10.3K0
java json数组转json对象_json对象数组
objectmapper json转对象_json数组转map
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
5.5K0
PHP csv文件内容转成数组/Json
$lines = array_map('str_getcsv', file($filePath));; $result = array(); $headers = null; if (count($lines) > 0) { $headers = $lines[0]; } for($i=1; $i<count($lines); $i++) { $obj = $lines[$i]; $result[] = array_combine($headers, $obj);//转成数组
悟空聊架构
2018/05/18
1.9K0
PHP csv文件内容转成数组/Json
$lines = array_map('str_getcsv', file($filePath));; $result = array(); $headers = null; if (count($lines) > 0) { $headers = $lines[0]; } for($i=1; $i<count($lines); $i++) { $obj = $lines[$i]; $result[] = array_combine($headers, $obj);//转成数组
悟空聊架构
2018/06/26
1.6K0
php 数组转json对象 和json 数组
php中数组转json的规则是:当没有指定索引(0~n)时会转换为json数组,而指定了索引会转换为json对象。
全栈程序员站长
2022/06/24
6.6K0
js 数组转json和json转数组
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151869.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/24
8.2K0
json字符串数组转json数组
当需要把一串字符串转成一个json 数组 ,并遍历其中的内容时。 首先要导入 net.sf.json.JSONArray和net.sf.json.JSONObject 两个jar 包
全栈程序员站长
2022/06/24
5.7K0
vue遍历数组中的数组_vue数组转json
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/03
4K0
java中数组转成list_java数组转json
1. 使用Arrays.asList生成的list是定长的,无法增加或删除元素,调用add或remove方法会抛出UnsupportedOperationException异常
全栈程序员站长
2022/09/25
1.4K0
Java转golang_json数组转json对象
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/02
4K0
如何获取JVM堆转储文件
堆转储是诊断与内存相关的问题(例如内存泄漏缓慢,垃圾回收问题和 java.lang.OutOfMemoryError。它们也是优化内存消耗的重要工具。
FunTester
2019/12/04
1.2K0
如何获取JVM堆转储文件
将文件内容复制到另外文件
在示例类Demo.FileDemo中,ProcessFile()方法接受输入文件和输出文件,并调用SetUpInputFile()和SetUpOutputFile()打开文件,一个用于读取,另一个用于写入。然后,它逐行读取输入文件,并调用ProcessLine()对每行的内容执行一个或多个替换,将每行的新内容写入输出文件。
用户7741497
2022/07/06
1.1K0
javascript定义数组,将数组中数组内容求和_数组求和JAVA
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/11
3.1K0
Js 数组转JSON格式
要点2:在js里写数组的时候是var data = new Array() 但是你如果是要转json显示的时候就要写成 var data = {},不然转出来的json全是空的。
全栈程序员站长
2022/06/24
12.2K0
Js 数组转JSON格式
Java数组转Json数组「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151823.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/24
2.3K0

相似问题

将sqlalchemy json数组结果转储到json文件中

18

将AppleScript字典内容转储到JSON

10

将多维数组的内容转储到新的JSON变量中。

14

将中文数据转储到json文件中

10

将Python字典转储到JSON文件

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档