/
App.js
120 lines (101 loc) · 4.66 KB
/
App.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import React, { Component } from "react";
import Scrollchor from "react-scrollchor";
import logo from "./logo.svg";
import "./App.css";
class Sequentially extends Component {
constructor(props) {
super(props);
this._iterator = circularIterator(["one", "two", "three"]);
this.state = { to: this._iterator.next().value };
}
_afterAnimate = () => {
this.setState({ to: this._iterator.next().value });
setTimeout(() => this._back.simulateClick(), 1000);
};
render() {
const { children, top, target, ...props } = this.props; // eslint-disable-line no-unused-vars
return (
<div>
<Scrollchor ref={ref => (this._back = ref)} to="_back" target={target}/>
<Scrollchor
id="_back"
target={target}
{...props}
to={this.state.to}
afterAnimate={this._afterAnimate}
>
{children(this.state.to)}
</Scrollchor>
</div>
);
}
}
class App extends Component {
constructor(props) {
super(props);
this.state = {
withTarget: false
};
}
render() {
const { withTarget } = this.state;
const target = withTarget ? 'page-wrap' : undefined;
return (
<div className="App">
<div className="App-header">
<img src={logo} className="App-logo" alt="logo" />
</div>
<label id="target-checkbox"><input type="checkbox" checked={withTarget} onChange={() => this.setState({
withTarget: !withTarget
})}/>Within scrollable container</label>
<div id="page-wrap" style={withTarget ? {
height: 'calc(100vh - 245px)',
overflow: 'auto'
} : undefined}>
<h1 id="top">
Smooth Page Scrolling with <strong id="scroll-chor">Scrollchor</strong>
</h1>
<ul>
<li><Scrollchor to="#two" target={target}>Scroll to Section Two</Scrollchor></li>
<li><Scrollchor to="three" target={target}>Scroll to Section Three</Scrollchor></li>
<li>
<Sequentially target={target}>
{to =>
<span>
Scroll sequentially to Section{" "}
<strong style={{ color: "red" }}>{to}</strong> and comeback
</span>}
</Sequentially>
</li>
</ul>
<h1 id="one">Section One</h1>
<Lorem />
<h1 id="two">Section Two</h1>
<p><Scrollchor to="#top" target={target}>Top</Scrollchor></p>
<Lorem />
<h1 id="three">Section Three</h1>
<p><Scrollchor to="#top" target={target}>Top</Scrollchor></p>
<Lorem />
</div>
</div>
);
}
}
export default App;
const Lorem = () =>
<div>
<p>Sit nulla est ex deserunt exercitation anim occaecat. Nostrud ullamco deserunt aute id consequat veniam incididunt duis in sint irure nisi. Mollit officia cillum Lorem ullamco minim nostrud elit officia tempor esse quis.</p>
<p>Sunt ad dolore quis aute consequat. Magna exercitation reprehenderit magna aute tempor cupidatat consequat elit dolor adipisicing. Mollit dolor eiusmod sunt ex incididunt cillum quis. Velit duis sit officia eiusmod Lorem aliqua enim laboris do dolor eiusmod. Et mollit incididunt nisi consectetur esse laborum eiusmod pariatur proident Lorem eiusmod et. Culpa deserunt nostrud ad veniam.</p>
<p>Est velit labore esse esse cupidatat. Velit id elit consequat minim. Mollit enim excepteur ea laboris adipisicing aliqua proident occaecat do do adipisicing adipisicing ut fugiat. Consequat pariatur ullamco aute sunt esse. Irure excepteur eu non eiusmod. Commodo commodo et ad ipsum elit esse pariatur sit adipisicing sunt excepteur enim.</p>
<p>Incididunt duis commodo mollit esse veniam non exercitation dolore occaecat ea nostrud laboris. Adipisicing occaecat fugiat fugiat irure fugiat in magna non consectetur proident fugiat. Commodo magna et aliqua elit sint cupidatat. Sint aute ullamco enim cillum anim ex. Est eiusmod commodo occaecat consequat laboris est do duis. Enim incididunt non culpa velit quis aute in elit magna ullamco in consequat ex proident.</p>
<p>Dolore incididunt mollit fugiat pariatur cupidatat ipsum laborum cillum. Commodo consequat velit cupidatat duis ex nisi non aliquip ad ea pariatur do culpa. Eiusmod proident adipisicing tempor tempor qui pariatur voluptate dolor do ea commodo. Veniam voluptate cupidatat ex nisi do ullamco in quis elit.</p>
</div>
function *circularIterator(arr) {
let index = -1;
const elements = Array.isArray(arr) ? arr.slice() : [];
const length = elements.length;
while (length) {
index = (index + 1) % length;
yield elements[index];
}
}