summaryrefslogtreecommitdiff
path: root/assets
diff options
context:
space:
mode:
authorJeffrey Tse <jeffreytse.mail@gmail.com>2019-09-24 14:10:57 +0800
committerJeffrey Tse <jeffreytse.mail@gmail.com>2019-09-24 14:10:57 +0800
commitcda49e03018d3dbbe8b9dc3927719471150c1608 (patch)
treea94523d13898c106c90e4d9285cf6136d45b7a33 /assets
parent92840887d2591d8ba9b92074e193ef1a922c118d (diff)
update: perfect animation, compatibility issue
Diffstat (limited to 'assets')
-rw-r--r--assets/css/main.scss (renamed from assets/main.scss)0
-rw-r--r--assets/js/main.js57
2 files changed, 57 insertions, 0 deletions
diff --git a/assets/main.scss b/assets/css/main.scss
index 112a9ef..112a9ef 100644
--- a/assets/main.scss
+++ b/assets/css/main.scss
diff --git a/assets/js/main.js b/assets/js/main.js
new file mode 100644
index 0000000..231191b
--- /dev/null
+++ b/assets/js/main.js
@@ -0,0 +1,57 @@
+// Fix DOM matches function
+if (!Element.prototype.matches) {
+ Element.prototype.matches =
+ Element.prototype.matchesSelector ||
+ Element.prototype.mozMatchesSelector ||
+ Element.prototype.msMatchesSelector ||
+ Element.prototype.oMatchesSelector ||
+ Element.prototype.webkitMatchesSelector ||
+ function(s) {
+ var matches = (this.document || this.ownerDocument).querySelectorAll(s),
+ i = matches.length;
+ while (--i >= 0 && matches.item(i) !== this) {}
+ return i > -1;
+ };
+}
+
+// Get Scroll position
+function getScrollPos() {
+ var supportPageOffset = window.pageXOffset !== undefined;
+ var isCSS1Compat = ((document.compatMode || "") === "CSS1Compat");
+
+ var x = supportPageOffset ? window.pageXOffset : isCSS1Compat ? document.documentElement.scrollLeft : document.body.scrollLeft;
+ var y = supportPageOffset ? window.pageYOffset : isCSS1Compat ? document.documentElement.scrollTop : document.body.scrollTop;
+
+ return { x: x, y: y };
+}
+
+var _scrollTimer = [];
+
+// Smooth scroll
+function smoothScrollTo(y, time) {
+ time = time == undefined ? 500 : time;
+
+ var scrollPos = getScrollPos();
+ var count = 60;
+ var length = (y - scrollPos.y);
+
+ function easeInOut(k) {
+ return .5 * (Math.sin((k - .5) * Math.PI) + 1);
+ }
+
+ for (var i = _scrollTimer.length - 1; i >= 0; i--) {
+ clearTimeout(_scrollTimer[i]);
+ }
+
+ for (var i = 0; i <= count; i++) {
+ (function() {
+ var cur = i;
+ _scrollTimer[cur] = setTimeout(function() {
+ window.scrollTo(
+ scrollPos.x,
+ scrollPos.y + length * easeInOut(cur/count)
+ );
+ }, (time / count) * cur);
+ })();
+ }
+}