forked from ulovliglogning/ulovliglogning.dk
remove broken scroll navscroll stuff
This commit is contained in:
parent
ec4603cd11
commit
86300b89da
|
@ -1,126 +1,2 @@
|
|||
document.documentElement.classList.remove("no-js");
|
||||
document.documentElement.classList.add("js");
|
||||
|
||||
var SETTINGS = {
|
||||
navTravelling: false,
|
||||
navTravelDirection: "",
|
||||
navTravelDistance: 150
|
||||
}
|
||||
|
||||
function determineOverflow(content, container) {
|
||||
var containerMetrics = container.getBoundingClientRect();
|
||||
var containerMetricsRight = Math.floor(containerMetrics.right);
|
||||
var containerMetricsLeft = Math.floor(containerMetrics.left);
|
||||
var contentMetrics = content.getBoundingClientRect();
|
||||
var contentMetricsRight = Math.floor(contentMetrics.right);
|
||||
var contentMetricsLeft = Math.floor(contentMetrics.left);
|
||||
if (containerMetricsLeft > contentMetricsLeft && containerMetricsRight < contentMetricsRight) {
|
||||
return "both";
|
||||
} else if (contentMetricsLeft < containerMetricsLeft) {
|
||||
return "left";
|
||||
} else if (contentMetricsRight > containerMetricsRight) {
|
||||
return "right";
|
||||
} else {
|
||||
return "none";
|
||||
}
|
||||
}
|
||||
|
||||
var nav = document.getElementById("navWrapper")
|
||||
var navElements = document.getElementById("navElements")
|
||||
var navAdvancerLeft = document.getElementById("navAdvancerLeft");
|
||||
var navAdvancerRight = document.getElementById("navAdvancerRight");
|
||||
var last_known_scroll_position = 0;
|
||||
var ticking = false;
|
||||
|
||||
setOverflowIndicator();
|
||||
|
||||
function setOverflowIndicator(scroll_pos) {
|
||||
nav.setAttribute("data-overflowing", determineOverflow(navElements, nav));
|
||||
}
|
||||
|
||||
nav.addEventListener("scroll", function() {
|
||||
last_known_scroll_position = window.scrollY;
|
||||
if (!ticking) {
|
||||
window.requestAnimationFrame(function() {
|
||||
setOverflowIndicator(last_known_scroll_position);
|
||||
ticking = false;
|
||||
});
|
||||
}
|
||||
ticking = true;
|
||||
});
|
||||
|
||||
navAdvancerLeft.addEventListener("click", function() {
|
||||
// If in the middle of a move return
|
||||
if (SETTINGS.navTravelling === true) {
|
||||
return;
|
||||
}
|
||||
// If we have content overflowing both sides or on the left
|
||||
if (determineOverflow(navElements, nav) === "left" || determineOverflow(navElements, nav) === "both") {
|
||||
// Find how far this panel has been scrolled
|
||||
var availableScrollLeft = nav.scrollLeft;
|
||||
// If the space available is less than two lots of our desired distance, just move the whole amount
|
||||
// otherwise, move by the amount in the settings
|
||||
if (availableScrollLeft < SETTINGS.navTravelDistance * 2) {
|
||||
navElements.style.transform = "translateX(" + availableScrollLeft + "px)";
|
||||
} else {
|
||||
navElements.style.transform = "translateX(" + SETTINGS.navTravelDistance + "px)";
|
||||
}
|
||||
// We do want a transition (this is set in CSS) when moving so remove the class that would prevent that
|
||||
navElements.classList.remove("pn-ProductNav_Contents-no-transition");
|
||||
// Update our settings
|
||||
SETTINGS.navTravelDirection = "left";
|
||||
SETTINGS.navTravelling = true;
|
||||
}
|
||||
// Now update the attribute in the DOM
|
||||
nav.setAttribute("data-overflowing", determineOverflow(navElements, nav));
|
||||
});
|
||||
|
||||
navAdvancerRight.addEventListener("click", function() {
|
||||
// If in the middle of a move return
|
||||
if (SETTINGS.navTravelling === true) {
|
||||
return;
|
||||
}
|
||||
// If we have content overflowing both sides or on the right
|
||||
if (determineOverflow(navElements, nav) === "right" || determineOverflow(navElements, nav) === "both") {
|
||||
// Get the right edge of the container and content
|
||||
var navBarRightEdge = navElements.getBoundingClientRect().right;
|
||||
var navBarScrollerRightEdge = nav.getBoundingClientRect().right;
|
||||
// Now we know how much space we have available to scroll
|
||||
var availableScrollRight = Math.floor(navBarRightEdge - navBarScrollerRightEdge);
|
||||
// If the space available is less than two lots of our desired distance, just move the whole amount
|
||||
// otherwise, move by the amount in the settings
|
||||
if (availableScrollRight < SETTINGS.navTravelDistance * 2) {
|
||||
navElements.style.transform = "translateX(-" + availableScrollRight + "px)";
|
||||
} else {
|
||||
navElements.style.transform = "translateX(-" + SETTINGS.navTravelDistance + "px)";
|
||||
}
|
||||
// We do want a transition (this is set in CSS) when moving so remove the class that would prevent that
|
||||
navElements.classList.remove("pn-ProductNav_Contents-no-transition");
|
||||
// Update our settings
|
||||
SETTINGS.navTravelDirection = "right";
|
||||
SETTINGS.navTravelling = true;
|
||||
}
|
||||
// Now update the attribute in the DOM
|
||||
nav.setAttribute("data-overflowing", determineOverflow(navElements, nav));
|
||||
});
|
||||
|
||||
navElements.addEventListener(
|
||||
"transitionend",
|
||||
function() {
|
||||
// get the value of the transform, apply that to the current scroll position (so get the scroll pos first) and then remove the transform
|
||||
var styleOfTransform = window.getComputedStyle(navElements, null);
|
||||
var tr = styleOfTransform.getPropertyValue("-webkit-transform") || styleOfTransform.getPropertyValue("transform");
|
||||
// If there is no transition we want to default to 0 and not null
|
||||
var amount = Math.abs(parseInt(tr.split(",")[4]) || 0);
|
||||
navElements.style.transform = "none";
|
||||
navElements.classList.add("pn-ProductNav_Contents-no-transition");
|
||||
// Now lets set the scroll position
|
||||
if (SETTINGS.navTravelDirection === "left") {
|
||||
nav.scrollLeft = nav.scrollLeft - amount;
|
||||
} else {
|
||||
nav.scrollLeft = nav.scrollLeft + amount;
|
||||
}
|
||||
SETTINGS.navTravelling = false;
|
||||
},
|
||||
false
|
||||
);
|
Loading…
Reference in a new issue