如何将移动手势(例如触摸和滑动)添加到 React Bootstrap 轮播组件?

Posted

技术标签:

【中文标题】如何将移动手势(例如触摸和滑动)添加到 React Bootstrap 轮播组件?【英文标题】:How to add mobile gestures (eg. touch & swipe) to a React Bootstrap carousel component? 【发布时间】:2019-05-05 10:54:33 【问题描述】:

这个类似的问题有几十个 JQuery 版本的答案,但这里我使用的是 react-bootstrap 轮播组件,我想为其添加移动手势功能。我该怎么做?

在 JQuery 中,直接的答案是使用 Hammer.js 添加针对轮播的事件处理程序,然后使用 $(target_your_carousel).carousel('next/prev') 旁边的东西滑动下一个/上一个。

然而,在 React 中,我们有 ref 来定位轮播,但我们如何激活下一个/上一个?

另一种方法可能是通过一个名为 react-swipeable 的流行反应库(截至 2019 年 5 月)。但是钩到轮播之后,同样的问题出现了,我们如何激活next/prev呢?

更新:我意识到“触摸”数据属性被引入上游 vanilla Bootstrap 4.2,如 in react-bootstrap's Github issue 所述。也许我们可以使用最新版本的 Bootstrap 和 react-bootstrap?

【问题讨论】:

【参考方案1】:

最后我用了这个workaround。

使用 react-swipeable,我们可以用 Swipeable 包裹 Carousel。使用 ref 定位子 Carousel 并激活子方法。

import React,  Component  from 'react'; 
import  Swipeable  from 'react-swipeable';

class FooClass extends Components 
    constructor()  ...
        this.carouselRef = React.createRef(); 

    render() 
    onSwipedLeft: () =>  this.carouselRef.current.next(); 

    return 
        <Carousel ref=this.carouselRef> ...

这个答案可能很快就会过时,因为由于上游 Bootstrap 4.2 中引入了“触摸”数据属性,下游的 react-bootstrap 将来应该会支持它。以后只需在 Carousel 组件中添加“touch”属性即可。

<Carousel touch=true>

【讨论】:

以上是关于如何将移动手势(例如触摸和滑动)添加到 React Bootstrap 轮播组件?的主要内容,如果未能解决你的问题,请参考以下文章

[深入剖析React Native]手势响应讲解

Flutter了解之手势

如何获得滑动/拖动触摸的增量

如何在 iOS 设备上的滑动手势期间“捕捉”子视图?

iOS结合长按和滑动手势

Android webview:防止将触摸手势传递给父viewpager