2016-11-07 11 views
3

リアクションを使用してスワイプイベントを作成しようとしています。私は外部コンポーネントやjqueryを使用したくありません。私はスワイプイベントを認識することができますどのように反応のスワイプ効果

class Test extends React.Component { 
    constructor(props){ 
    super(props); 

    this.state = { 
     left: 0 
    } 
    } 

    handleSwipe(){ 
    this.setState({left: -350}) 
    } 

    render(){ 
    return(
     <div className="outter"> 
      <div className="inner" style={{left: this.state.left}} onSwipe={this.handleSwipe.bind(this)}> 
       <div className="child"><img src="http://placehold.it/350x150" /></div> 
       <div className="child"><img src="http://placehold.it/350x150" /></div> 
       <div className="child"><img src="http://placehold.it/350x150" /></div> 
       <div className="child"><img src="http://placehold.it/350x150" /></div> 
      </div> 
     </div> 
    ) 
    } 
} 

React.render(<Test />, document.getElementById('container')); 

:私のような何かをしようとしている反応成分が

.outter{ 
    position:relative; 
    width: 100%; 
    height: 150px; 
    background-color: blue; 
} 

.inner{ 
    position: absolute; 
    width: 1000%; 
    left: 50px; 
} 
.child{ 
    float: left; 
    margin-right: 15px; 
} 

CSSのようなものでしょうか?

私の例ではonSwipeの代わりにonClickを追加しますが、どうすればスワイプ効果が得られますか?

ここはjsfiddleです。

+0

、その後、あなたが耳を傾け、処理する必要がマウスダウン+のMouseMove + mouseupイベント。 – dfsq

答えて

6

あなたのコンポーネントを反応させるonTouchイベントハンドラを追加することができます。

onTouchStart={touchStartEvent => this.handleTouchStart(touchStartEvent)} 
onTouchMove={touchMoveEvent => this.handleTouchMove(touchMoveEvent)} 
onTouchEnd={() => this.handleTouchEnd()} 

ます。また、クロスプラットフォームの互換性のためのマウスイベントのイベントハンドラを追加することもできます。

onMouseDown={mouseDownEvent => this.handleMouseDown(mouseDownEvent)} 
onMouseMove={mouseMoveEvent => this.handleMouseMove(mouseMoveEvent)} 
onMouseUp={() => this.handleMouseUp()} 
onMouseLeave={() => this.handleMouseLeave()} 

あなたが権利を持っていますイベントハンドラの状態のleftプロパティを更新するアイデアですが、スワイプ機能を自然に感じたい場合は、leftを更新してポインタの位置を追跡する必要がありますイベントのclientXプロパティを使用します。

これを行うには、最初のタッチの位置を保存し、leftをタッチの位置の変化と同じに設定する必要があります。リアリズムを追加するには、タッチの速度を追跡し、タッチが終了した後もコンポーネントのアニメーションを続けることができます。ここで

は、私は、リストから項目を削除するためにスワイプするために作られた間に合わせのn-codepenです:あなたは本当にそれを自分で行いたい場合は

https://codepen.io/swingthing/pen/ZBGBJb/

+0

ちょっとメモ: 'onTouchStart = {touchStartEvent => this.handleTouchStart(touchStartEvent)}}は' onTouchStart = {this.handleTouchStart} 'と機能的には同等ですが、新しい匿名関数が毎回定義されるため、レンダリングする。 – chadoh

+0

偉大な答えとcodepen。不思議なことに、あなたをコピーすると、私はもっと遅れた経験で終わります。 – chadoh

+0

皆さんのように、すべての人が素早く汚れたコードを読むことを願っています。 –

関連する問題