Skip to content

Instantly share code, notes, and snippets.

@hartzis
Last active November 29, 2023 16:38
Show Gist options
  • Save hartzis/b34a4beeb5ceb4bf1ed8659e477c4191 to your computer and use it in GitHub Desktop.
Save hartzis/b34a4beeb5ceb4bf1ed8659e477c4191 to your computer and use it in GitHub Desktop.
Touch Event Handling React Component
import React from 'react';
export default class EventComponent extends React.Component {
constructor(props) {
super(props);
this._onTouchStart = this._onTouchStart.bind(this);
this._onTouchMove = this._onTouchMove.bind(this);
this._onTouchEnd = this._onTouchEnd.bind(this);
this.state = { swiped: false };
this._swipe = {};
this.minDistance = 50;
}
_onTouchStart(e) {
const touch = e.touches[0];
this._swipe = { x: touch.clientX };
this.setState({ swiped: false });
}
_onTouchMove(e) {
if (e.changedTouches && e.changedTouches.length) {
const touch = e.changedTouches[0];
this._swipe.swiping = true;
}
}
_onTouchEnd(e) {
const touch = e.changedTouches[0];
const absX = Math.abs(touch.clientX - this._swipe.x);
if (this._swipe.swiping && absX > this.minDistance ) {
this.props.onSwiped && this.props.onSwiped();
this.setState({ swiped: true });
}
this._swipe = {};
}
render() {
return (
<div
onTouchStart={this._onTouchStart}
onTouchMove={this._onTouchMove}
onTouchEnd={this._onTouchEnd}>
{`Component-${this.state.swiped ? 'swiped' : ''}`}
</div>
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment