javascript - 在 ReactNative 中使用 slider 滚动水平 ScrollView

标签 javascript react-native

我正在尝试在水平 ScrollView 中设置一个 slider ,以使我可以更快地滚动页面。我能够将页面的位置链接到 slider 的值,这样当我滚动页面时, slider 的拇指就会相应地移动。
我正在使用 React Native Slider和一个 ScrollView 。
这是我不幸的结果。
What I get
我对 RN 很陌生,所以我可能在这里遗漏了一些重要的东西。

class Comp extends Component {

  state = {
    width : 0, 
    value : 0, 
    cursor : 0
  }

  moveTheCursor = (val) => {
    this.scrollView.scrollTo({x: val, y: 0, animated: true})
  }

  scrollTheView = (event) => {
    this.setState({
      value : Math.floor(event.nativeEvent.contentOffset.x),
      cursor : Math.floor(event.nativeEvent.contentOffset.x)
    })
  }

  checkWidth = ({nativeEvent}) => {
    arrayWidth.push(nativeEvent.layout.width)
    let ww = (arrayWidth[0] * this.props.data.length) - Math.round(Dimensions.get('window').width);
    this.setState({
      width : ww,
    })
  }

  render() {
    return (
      <React.Fragment>
        <ScrollView 
          ref={ref => this.scrollView = ref}
          horizontal
          style={styles.car}
          scrollEventThrottle={1}
          onScroll={this.scrollTheView}
          showsHorizontalScrollIndicator={false}
          decelerationRate={0}
          //snapToInterval={200} //your element width
          snapToAlignment={"center"}
        >

        </ScrollView>
          
        <Slider
          style={styles.containerSlide}
          thumbImage={require("./../../assets/img/buttons/thumb.png")}
          trackImage={require("./../../assets/img/buttons/bar.png")}
          minimumValue={0}
          maximumValue={this.state.width}
          onValueChange={this.moveTheCursor}
          value={this.state.cursor}
        />
        

      </React.Fragment>
    );
  }
} 
问题是,当我使用 slider 的拇指滚动页面时,它会触发滚动,不可避免地会重置 slider 拇指的位置,因此它的行为不正确(闪烁但大多不准确)。
有没有办法解决这个循环?

最佳答案

您可以使用 Slider 的 onSlidingStart 实现所需的行为。和 onSlidingComplete + ScrollView 的 scrollEnabled
它看起来像

....
const [isSliding, setIsSliding] = useState(false);
....
<ScrollView scrollEnabled={!isSliding}>
   <Slider 
      onSlidingStart={() => setIsSliding(true)}
      onSlidingComplete={() => setIsSliding(false)}
   />
</ScrollView>

关于javascript - 在 ReactNative 中使用 slider 滚动水平 ScrollView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56715985/

相关文章:

ios - 单击堆栈导航器选项卡时渲染屏幕

javascript - JS/Node : A function that takes a number N and returns an array with the values [0, 1, ... N-1]

javascript - 如何在IE中处理倍数时间功能刷新的框背景颜色

android - 在 React-Native 中使用 base64 编码的字符串播放视频

ios - 如何使用 RCT_EXPORT_MODULE React Native

react-native - React Native Android 文本组件额外填充

javascript - 表达 js,mongodb : “ReferenceError: db is not defined” when calling a function

javascript - Angular 2 : Communication between sibling components

javascript - jQuery Load 和 Ajax 表单不能一起工作

ios - 设置 rootView.appProperties 不会重新渲染根组件