35 |
36 | iOS 16 Slider demo
37 |
38 |
39 |
40 |
50 |
51 |
52 | {/* Slider */}
53 |
setPanning(true)}
56 | onPanEnd={() => setPanning(false)}
57 | onPointerEnter={() => setHovered(true)}
58 | onPointerLeave={() => setHovered(false)}
59 | onPan={(event, info) => {
60 | let deltaInPercent = info.delta.x / bounds.width;
61 | let newPercent = clamp(progress.get() + deltaInPercent, 0, 1);
62 | progress.set(newPercent);
63 | }}
64 | style={{ height: height + buffer }}
65 | className="flex items-center justify-center relative touch-none grow-0"
66 | variants={{
67 | idle: { width: "calc(95% - 48px)" },
68 | hovered: { width: "calc(100% - 48px)" },
69 | panning: { width: "calc(100% - 48px)" },
70 | }}
71 | initial={false}
72 | ref={ref}
73 | >
74 |
83 |
84 |
88 |
89 |
90 |
100 |
101 |
102 |
103 | {/* Label */}
104 |
112 | {progressState}
113 |
114 |
115 |