diff options
author | Jeffrey Tse <jeffreytse.mail@gmail.com> | 2019-09-24 14:10:57 +0800 |
---|---|---|
committer | Jeffrey Tse <jeffreytse.mail@gmail.com> | 2019-09-24 14:10:57 +0800 |
commit | cda49e03018d3dbbe8b9dc3927719471150c1608 (patch) | |
tree | a94523d13898c106c90e4d9285cf6136d45b7a33 /assets | |
parent | 92840887d2591d8ba9b92074e193ef1a922c118d (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.js | 57 |
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); + })(); + } +} |