React Native使用PanResponder实现3个点的Slider

1. 前言

实现这个功能主要会使用RN原生API里的PanResponder。通过使用PanResponder,我们才能实现对整个拖动过程中的:拖动开始、拖动过程中、拖动结束,这3个关键点的重写。

2. 效果展示

image.png

3. 使用

import ThreeSlider from './threeSlider';

  /**
   * 开始移动时
   */
  onGrant() {
   
    this.setState({
    isShowSliderText: true });
  }

  /**
   *   拖动结束的回调
   * @param {*} ishow
   */
  onRelease() {
   
    //隐藏
    this.setState({
    isShowSliderText: false });
  }

  /**
   * A  移动时的回调
   */
  onStartMove(start) {
   
    console.log(start);
    this.setState({
    start, sliderText: start });
  }

  /**
   * A点正在移动时Slider不在区域内
   */
  onStartSliderMove(start, slideValue) {
   
    this.setState({
    start, slideValue, sliderText: start });
    this.player.seek(slideValue);
  }

  /**
   * B 移动时的回调
   */
  onEndMove(end) {
   
    this.setState({
    end, sliderText: end });
  }

  /**
   * B点正在移动时Slider不在区域内
   */
  onEndSliderMove(end, slideValue) {
   
    this.setState({
    end, slideValue, sliderText: end });

    this.player.seek(slideValue);
  }

  /**
   * 播放节点 移动时的回调
   */
  onSlideMove(slideValue) {
   
    this.setState({
    slideValue, sliderText: slideValue });
    this.player.seek(slideValue);
  }

  /**
   * threeSlider View
   * @returns
   */
  threeSliderView = () => {
   
    return (
      <View style={
   {
    flex: 1, height: 70 }}>
        <ThreeSlider
          range={
   this.state.duration}
          startA={
   this.state.start}
          endB={
   this.state.end}
          slideValue={
   this.state.slideValue}
          onGrant={
   this.onGrant.bind(this)} //开始移动的回调
          onRelease={
   this.onRelease.bind(this)} // 移动结束时的回调
          onStartMove={
   this.onStartMove.bind(this)} //A点正在移动时的回调
          onStartSliderMove={
   this.onStartSliderMove.bind(this)} //A点正在移动时Slider不在区域内
          onEndMove={
   this.onEndMove.bind(this)} //B点正在移动时的回调
          onEndSliderMove={
   this.onEndSliderMove.bind(this)} //B点正在移动时Slider不在区域内的回调
          onSlideMove={
   this.onSlideMove.bind(this)} //播放正在移动时的回调
        />
      </View>
    );
  };

3. 完整代码

//threeSlider.js

/**
 * 三个点的滑动进度条
 */

// Match参考 https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Math/ceil
import React, {
    Component } from 'react';
import {
    StyleSheet, View, PanResponder, Text, Dimensions } 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值