center-center 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.mjs +45 -7
- package/package.json +1 -1
package/index.mjs
CHANGED
|
@@ -2,6 +2,18 @@ import debug from 'debug'
|
|
|
2
2
|
|
|
3
3
|
const log = debug('center-center')
|
|
4
4
|
|
|
5
|
+
export function getScrollingElement (document) {
|
|
6
|
+
if (Reflect.has(document, 'scrollingElement')) {
|
|
7
|
+
const scrollingElement = Reflect.get(document, 'scrollingElement')
|
|
8
|
+
if (scrollingElement) return scrollingElement
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
return {
|
|
12
|
+
scrollLeft: 0,
|
|
13
|
+
scrollTop: 0
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
5
17
|
export function getViewportRect () {
|
|
6
18
|
const {
|
|
7
19
|
innerWidth: viewportW,
|
|
@@ -9,11 +21,9 @@ export function getViewportRect () {
|
|
|
9
21
|
} = window
|
|
10
22
|
|
|
11
23
|
const {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
} = document
|
|
24
|
+
scrollLeft: viewportL,
|
|
25
|
+
scrollTop: viewportT
|
|
26
|
+
} = getScrollingElement(document)
|
|
17
27
|
|
|
18
28
|
const viewportR = (viewportL + viewportW)
|
|
19
29
|
const viewportB = (viewportT + viewportH)
|
|
@@ -83,7 +93,7 @@ export function calculateLeft ({
|
|
|
83
93
|
viewport: {
|
|
84
94
|
left: viewportL,
|
|
85
95
|
right: viewportR,
|
|
86
|
-
|
|
96
|
+
width: viewportW
|
|
87
97
|
},
|
|
88
98
|
container: {
|
|
89
99
|
left: containerL,
|
|
@@ -94,6 +104,20 @@ export function calculateLeft ({
|
|
|
94
104
|
width: targetW
|
|
95
105
|
}
|
|
96
106
|
}) {
|
|
107
|
+
if (viewportL === containerL) {
|
|
108
|
+
if (viewportW === containerW) {
|
|
109
|
+
const availableW = Math.max(targetW, containerW)
|
|
110
|
+
|
|
111
|
+
return ((availableW / 2) - (targetW / 2))
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (viewportW > containerW) {
|
|
115
|
+
const availableW = Math.max(targetW, (containerL + containerW))
|
|
116
|
+
|
|
117
|
+
return ((availableW / 2) - (targetW / 2))
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
97
121
|
if (viewportL > containerL) {
|
|
98
122
|
if (containerR > viewportL) {
|
|
99
123
|
if (viewportR > containerR) {
|
|
@@ -107,7 +131,7 @@ export function calculateLeft ({
|
|
|
107
131
|
if (containerR > viewportR) {
|
|
108
132
|
log('calculate viewportL to viewportR')
|
|
109
133
|
|
|
110
|
-
const availableW = Math.max(targetW,
|
|
134
|
+
const availableW = Math.max(targetW, viewportW)
|
|
111
135
|
|
|
112
136
|
return (viewportL - containerL) + ((availableW / 2) - (targetW / 2))
|
|
113
137
|
}
|
|
@@ -162,6 +186,20 @@ export function calculateTop ({
|
|
|
162
186
|
height: targetH
|
|
163
187
|
}
|
|
164
188
|
}) {
|
|
189
|
+
if (viewportT === containerT) {
|
|
190
|
+
if (viewportH === containerH) {
|
|
191
|
+
const availableH = Math.max(targetH, containerH)
|
|
192
|
+
|
|
193
|
+
return ((availableH / 2) - (targetH / 2))
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
if (viewportB > containerB) {
|
|
197
|
+
const availableH = Math.max(targetH, (containerT + containerB))
|
|
198
|
+
|
|
199
|
+
return ((availableH / 2) - (targetH / 2))
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
165
203
|
if (viewportT > containerT) {
|
|
166
204
|
if (containerB > viewportT) {
|
|
167
205
|
if (viewportB > containerB) {
|