import * as React from "react"; import * as ReactDOM from "react-dom"; import {storiesOf} from "@storybook/react"; import {action} from '@storybook/addon-actions'; import Tilt from 'react-parallax-tilt'; import {IJoystickUpdateEvent, Joystick} from "./Joystick"; import {JoystickShape} from "./enums/shape.enum"; import {useState} from "react"; import './stories.css'; const joystickStories = storiesOf('Joystick Examples', module); joystickStories.add("Default joystick", () => ); joystickStories.add("Default joystick with small stick", () => ); joystickStories.add("Default joystick with 50% minDistance", () => ); joystickStories.add("Control plane override", () => ); joystickStories.add("Square joystick", () =>
); joystickStories.add("Yellow (custom colors) joystick", () => ); joystickStories.add("Position override", () => ); joystickStories.add("Position override with second joystick", () => { const [joystickPos, setJoystickPos] = useState({x:0, y:0}); const handleMove = (event) => { setJoystickPos({x: event.x, y: event.y}) }; return <> ;}); joystickStories.add("Y Axis only", () => ); joystickStories.add("X Axis only", () => ); joystickStories.add("50ms throttled joystick", () => ); joystickStories.add("100ms throttled joystick", () => ); joystickStories.add("200ms throttled joystick", () => ); joystickStories.add("500ms throttled joystick", () => ); joystickStories.add("Sticky joystick", () => ); joystickStories.add("Images", () => ); joystickStories.add("Follow Cursor", () => (
)); joystickStories.add("Many follow Cursor", () => (
)); joystickStories.add("HUGE joystick", () => ); joystickStories.add("Tiny joystick", () => ); joystickStories.add("Disabled joystick", () => ); joystickStories.add("Controlling a react-parallax-tilt ", () => { const [[manualTiltAngleX, manualTiltAngleY], setManualTiltAngle] = useState([0, 0] as Array); const onMove = (stick:IJoystickUpdateEvent) => { //@ts-ignore setManualTiltAngle([stick.y * 100, stick.x * 100]); }; const onStop = () => { setManualTiltAngle([0, 0]); }; return <>
Axis x: {manualTiltAngleX?.toFixed(0)}°
Axis y: {manualTiltAngleY?.toFixed(0)}°

Thanks to react-parallax-tilt

} ) interface IDirectionComponentState { direction: string; } class DirectionComponent extends React.Component { constructor(props: any) { super(props); this.state = { direction: "Stopped" }; } private _handleMove(data: any) { this.setState({ direction: data.direction }); } private _handleStop() { this.setState({ direction: "Stopped" }); } render() { return (

{this.state.direction}

); } } joystickStories.add("Default with direction text", () => ) const Modal =({ isOpen}: {isOpen:boolean})=> { if (!isOpen) return null return ReactDOM.createPortal( , document.body) } joystickStories.add("Default with portal", () => { const [isOpen, setIsOpen] = useState(false) as any; return <> })