@@ -16,6 +16,7 @@ const values = ref([
16
16
' Orange' ,
17
17
])
18
18
const open = ref (false )
19
+ const activeItemAboveCenter = ref (false )
19
20
20
21
const ListContent = useTemplateRef <HTMLDivElement >(' ListContent' )
21
22
@@ -28,12 +29,29 @@ function handleClick() {
28
29
open .value = ! open .value
29
30
}
30
31
32
+ // setInterval(() => {
33
+ // open.value = !open.value
34
+ // }, 1000)
35
+
36
+ const transitionMax = 0.4
37
+ const transitionMin = transitionMax / 2
38
+ const transition = ref (transitionMax )
39
+
31
40
function handleItemClick(v : string , index : number , event : MouseEvent ) {
32
41
value .value = v
33
42
const itemClicked = event .currentTarget as HTMLDivElement
34
43
const itemClickedHeight = itemClicked .clientHeight
35
44
if (! ListContent .value ) return
36
45
46
+ const numberOfItems = values .value .length
47
+ const halfWay = numberOfItems / 2
48
+
49
+ if (index < halfWay ) {
50
+ activeItemAboveCenter .value = true
51
+ } else {
52
+ activeItemAboveCenter .value = false
53
+ }
54
+
37
55
const listContentHeight = ListContent .value .clientHeight
38
56
const amountOfItems = values .value .length
39
57
@@ -50,8 +68,9 @@ function handleItemClick(v: string, index: number, event: MouseEvent) {
50
68
<button
51
69
ref =" button"
52
70
class =" SelectRoot button buttonFocus buttonHover"
53
- :class =" { open: open }"
71
+ :class =" { open: open, aboveHalf: activeItemAboveCenter }"
54
72
@click =" handleClick"
73
+ anchor =" select"
55
74
>
56
75
<p class =" space-value" >{{ longestValue }}</p >
57
76
<div class =" SelectList" >
@@ -100,7 +119,6 @@ function handleItemClick(v: string, index: number, event: MouseEvent) {
100
119
left : 0 ;
101
120
z-index : 2 ;
102
121
103
- height : var (--option-height );
104
122
overflow : hidden ;
105
123
106
124
display : flex ;
@@ -110,25 +128,43 @@ function handleItemClick(v: string, index: number, event: MouseEvent) {
110
128
111
129
background : var (--base-10 );
112
130
box-shadow : 10px 10px 50px 50px red ;
113
- transition : 0.4 s ;
131
+ transition : 1 s ;
114
132
interpolate-size : allow-keywords;
115
133
}
116
134
117
135
.SelectRoot.open .SelectList {
118
136
bottom : calc (v-bind(itemOffsetBottom) * -1px );
119
137
top : calc (v-bind(itemOffsetTop) * -1px );
120
- height : auto ;
138
+ right : 0 ;
139
+ left : 0 ;
140
+ width : 100% ;
121
141
}
122
142
123
143
.SelectList-content {
124
- margin-top : calc (v-bind(itemOffsetTop) * -1px );
125
- transition : 0.4s linear ;
144
+ position : fixed ;
145
+
146
+ bottom : anchor(center );
147
+
148
+ width : 100% ;
149
+ transition : 1s linear ;
150
+ }
151
+ /*
152
+ .SelectRoot.aboveHalf .SelectList-content {
153
+ top: calc(v-bind(itemOffsetTop) * -1px);
154
+ }
155
+
156
+ .SelectRoot.aboveHalf.open .SelectList-content {
157
+ top: 0;
126
158
}
127
159
128
- .SelectRoot.open .SelectList .SelectList-content {
129
- margin-top : 0 ;
160
+ .SelectRoot:not(.aboveHalf) .SelectList-content {
161
+ bottom: calc(v-bind(itemOffsetBottom) * -1px) ;
130
162
}
131
163
164
+ .SelectRoot:not(.aboveHalf).open .SelectList-content {
165
+ bottom: 0;
166
+ } */
167
+
132
168
.SelectList .SelectOption {
133
169
display : flex ;
134
170
gap : var (--space-1 );
0 commit comments