-
Notifications
You must be signed in to change notification settings - Fork 26
/
Copy pathTarget.tsx
72 lines (65 loc) · 2.15 KB
/
Target.tsx
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
import React, { useRef, useLayoutEffect } from 'react';
import { PushIn } from '../dist/esm/pushin';
type PushInArgs = {
target: string;
scrollTarget?: string;
};
export const Target = ({ scrollTarget }) => {
const pushInContainer = useRef();
useLayoutEffect(() => {
const args: PushInArgs = { target: '#target' };
if (scrollTarget) {
args.scrollTarget = scrollTarget;
}
const pushIn = new PushIn(pushInContainer.current, args);
pushIn.start();
return () => pushIn.destroy();
});
return (
<div>
<h2>Target</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Natus esse
ducimus libero tempora officiis, temporibus totam magnam laboriosam
facilis quod dignissimos deleniti unde dolor sunt earum accusantium qui
voluptate mollitia?
</p>
<div
id="target"
style={{
position: 'relative',
width: '70%',
margin: '1rem auto',
height: scrollTarget === 'window' ? 'auto' : '300px',
backgroundColor: 'lightgray',
borderRadius: '8px',
}}
>
<div className="pushin" ref={pushInContainer}>
<div className="pushin-scene">
<div key="layer1" className="pushin-layer">
<p>Lorem ipsum dolor sit amet consectetur.</p>
</div>
<div key="layer2" className="pushin-layer">
<p>
Adipisicing elit. Numquam nulla maiores suscipit, odio ad dolor.
</p>
</div>
<div key="layer3" className="pushin-layer">
<p>
In recusandae culpa error beatae itaque et obcaecati sequi
dolorem voluptates minima. Iure, sit non.
</p>
</div>
</div>
</div>
</div>
<h2>Lorem ipsum, dolor sit amet consectetur adipisicing elit</h2>
<p>
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Aspernatur ex
nihil minus odit magnam neque fuga dicta debitis quidem qui hic, autem
eligendi repellendus. Rerum placeat deleniti tempora commodi odio.
</p>
</div>
);
};