diff --git a/common/app/routes/Hikes/components/Hikes.jsx b/common/app/routes/Hikes/components/Hikes.jsx index ca891a9f99..f56e57f298 100644 --- a/common/app/routes/Hikes/components/Hikes.jsx +++ b/common/app/routes/Hikes/components/Hikes.jsx @@ -43,9 +43,10 @@ export default contain( render() { const { hikes, children, currentHike } = this.props; + const preventOverflow = { overflow: 'hidden' }; return (
- + { this.renderChild(children, hikes, currentHike) || this.renderMap(hikes) } diff --git a/common/app/routes/Hikes/components/Question.jsx b/common/app/routes/Hikes/components/Question.jsx index 64e1ae5ccc..f2645a302f 100644 --- a/common/app/routes/Hikes/components/Question.jsx +++ b/common/app/routes/Hikes/components/Question.jsx @@ -1,4 +1,5 @@ import React, { PropTypes } from 'react'; +import { Spring } from 'react-motion'; import { Navigation, TransitionHook } from 'react-router'; import debugFactory from 'debug'; import { @@ -12,11 +13,8 @@ import { const debug = debugFactory('freecc:hikes'); export default React.createClass({ - getInitialState: () => ({ - showInfo: false, - shake: false - }), displayName: 'Question', + mixins: [ Navigation, TransitionHook @@ -29,6 +27,50 @@ export default React.createClass({ params: PropTypes.object }, + getInitialState: () => ({ + mouse: [0, 0], + delta: [0, 0], + isPressed: false, + showInfo: false, + shake: false + }), + + getTweenValues() { + const { mouse: [x, y] } = this.state; + return { + val: { x, y }, + config: [120, 17] + }; + }, + + handleMouseDown({ pageX, pageY }) { + const { mouse: [pressX, pressY] } = this.state; + const dx = pageX - pressX; + const dy = pageY - pressY; + this.setState({ + isPressed: true, + delta: [dx, dy], + mouse: [pageX - dx, pageY - dy] + }); + }, + + handleMouseUp() { + this.setState({ + isPressed: false, + mouse: [0, 0], + delta: [0, 0] + }); + }, + + handleMouseMove({ pageX, pageY }) { + const { isPressed, delta: [dx, dy] } = this.state; + if (isPressed) { + this.setState({ + mouse: [pageX - dx, pageY - dy] + }); + } + }, + hideInfo() { this.setState({ showInfo: false }); }, @@ -120,6 +162,25 @@ export default React.createClass({ ); }, + renderQuestion(question, shake) { + return ({ val: { x } }) => { + const style = { + WebkitTransform: `translate3d(${ x }px, 0, 0)`, + transform: `translate3d(${ x }px, 0, 0)` + }; + return ( + +

{ question }

+
+ ); + }; + }, + render() { const { showInfo, shake } = this.state; const { currentHike: { tests = [] } } = this.props; @@ -129,12 +190,13 @@ export default React.createClass({ return ( - -

{ question }

-
+ + { this.renderQuestion(question, shake) } + { this.renderInfo(showInfo, info) }