Cross-browser Testing Platform and Open Source <3 Provided by Sauce Labs.
React wrapper around Tether from Hub Spot.
npm install react-tether --save
bower install react-tether --save
import TetherComponent from 'react-tether';
class SimpleDemo extends React.Component {
constructor(props) {
super(props);
this.state = {
isOpen: false,
};
}
render() {
const { isOpen } = this.state;
return (
<TetherComponent
attachment="top center"
constraints={[
{
to: 'scrollParent',
attachment: 'together',
},
]}
>
{/* First child: This is what the item will be tethered to */}
<button
onClick={() => {
this.setState({ isOpen: !isOpen });
}}
>
Toggle Tethered Content
</button>
{/* Second child: If present, this item will be tethered to the the first child */}
{isOpen && (
<div>
<h2>Tethered Content</h2>
<p>A paragraph to accompany the title.</p>
</div>
)}
</TetherComponent>
);
}
}
The first child is used as the Tether's target
and the second child (which is optional) is used as Tether's element
that will be moved.
The tag that is used to render the Tether element, defaults to div
.
Where in the DOM the Tether element is appended. Passes in any valid selector to document.querySelector
. Defaults to document.body
.
Tether requires this element to be position: static;
, otherwise it will default to document.body
. See this example for more information.
Any valid Tether options.
The following methods are exposed on the component instance:
getTetherInstance(): Tether
disable(): void
enable(): void
on(event: string, handler: function, ctx: any): void
once(event: string, handler: function, ctx: any): void
off(event: string, handler: function): void
position(): void
<TetherComponent ref={tether => this.tether = tether}>
<Target/>
<Element onResize={() => this.tether && this.tether.position()}
</TetherComponent>
clone repo
git clone [email protected]:danreeves/react-tether.git
move into folder
cd ~/react-tether
install dependencies
npm install
run dev mode
npm run demo
open your browser and visit: http://localhost:1234/