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.
Files changed (2) hide show
  1. package/index.mjs +45 -7
  2. 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
- scrollingElement: {
13
- scrollLeft: viewportL,
14
- scrollTop: viewportT
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
- height: viewportH
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, viewportH)
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) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "center-center",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "description": "Position an element at the center center of a container",
5
5
  "main": "./index.mjs",
6
6
  "type": "module",