Shubham Sawant
commited on
Commit
·
edbe668
1
Parent(s):
4db42b4
Change bringInView() implementation to support unsupported browsers
Browse files- src/core/element.js +23 -12
src/core/element.js
CHANGED
|
@@ -71,6 +71,17 @@ export default class Element {
|
|
| 71 |
);
|
| 72 |
}
|
| 73 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 74 |
/**
|
| 75 |
* Brings the element to middle of the view port if not in view
|
| 76 |
*/
|
|
@@ -79,20 +90,20 @@ export default class Element {
|
|
| 79 |
return;
|
| 80 |
}
|
| 81 |
|
| 82 |
-
// If browser
|
| 83 |
-
if (this.node.scrollIntoView) {
|
| 84 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 85 |
behavior: 'smooth',
|
| 86 |
block: 'center',
|
| 87 |
-
};
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
const elementRect = this.node.getBoundingClientRect();
|
| 92 |
-
const absoluteElementTop = elementRect.top + this.window.pageYOffset;
|
| 93 |
-
const middle = absoluteElementTop - (this.window.innerHeight / 2);
|
| 94 |
-
|
| 95 |
-
this.window.scrollTo(0, middle);
|
| 96 |
}
|
| 97 |
}
|
| 98 |
|
|
|
|
| 71 |
);
|
| 72 |
}
|
| 73 |
|
| 74 |
+
/**
|
| 75 |
+
* Manually scrolls to the position of element if `scrollIntoView` fails
|
| 76 |
+
*/
|
| 77 |
+
scrollManually() {
|
| 78 |
+
const elementRect = this.node.getBoundingClientRect();
|
| 79 |
+
const absoluteElementTop = elementRect.top + this.window.pageYOffset;
|
| 80 |
+
const middle = absoluteElementTop - (this.window.innerHeight / 2);
|
| 81 |
+
|
| 82 |
+
this.window.scrollTo(0, middle);
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
/**
|
| 86 |
* Brings the element to middle of the view port if not in view
|
| 87 |
*/
|
|
|
|
| 90 |
return;
|
| 91 |
}
|
| 92 |
|
| 93 |
+
// If browser does not support scrollIntoView
|
| 94 |
+
if (!this.node.scrollIntoView) {
|
| 95 |
+
this.scrollManually();
|
| 96 |
+
return;
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
try {
|
| 100 |
+
this.node.scrollIntoView(this.options.scrollIntoViewOptions || {
|
| 101 |
behavior: 'smooth',
|
| 102 |
block: 'center',
|
| 103 |
+
});
|
| 104 |
+
} catch (e) {
|
| 105 |
+
// `block` option is not allowed in older versions of firefox, scroll manually
|
| 106 |
+
this.scrollManually();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 107 |
}
|
| 108 |
}
|
| 109 |
|