mirror of
				https://github.com/kevinveenbirkenbach/homepage.veen.world.git
				synced 2025-11-04 09:27:58 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			112 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
function adjustScrollContainerHeight() {
 | 
						|
  // Elemente ermitteln
 | 
						|
  const headerEl = document.querySelector('header');
 | 
						|
  const navEl = document.querySelector('nav');
 | 
						|
  const footerEl = document.querySelector('footer');
 | 
						|
  const mainEl = document.getElementById('main');
 | 
						|
  if (!mainEl) return;
 | 
						|
  const scrollContainer = mainEl.querySelector('.scroll-container');
 | 
						|
  if (!scrollContainer) return;
 | 
						|
  
 | 
						|
  let siblingsHeight = 0;
 | 
						|
  
 | 
						|
  if (headerEl) {
 | 
						|
    const headerRect = headerEl.getBoundingClientRect();
 | 
						|
    siblingsHeight += headerRect.height;
 | 
						|
  }
 | 
						|
  if (navEl) {
 | 
						|
    const navRect = navEl.getBoundingClientRect();
 | 
						|
    siblingsHeight += navRect.height*2;
 | 
						|
  }
 | 
						|
  if (footerEl) {
 | 
						|
    const footerRect = footerEl.getBoundingClientRect();
 | 
						|
    siblingsHeight += footerRect.height;
 | 
						|
  }
 | 
						|
  
 | 
						|
  // Verfügbare Höhe berechnen: Fensterhöhe minus Höhe der Geschwister
 | 
						|
  const availableHeight = window.innerHeight - siblingsHeight;
 | 
						|
  
 | 
						|
  // Setze die max-Höhe für den Scroll-Container
 | 
						|
  scrollContainer.style.maxHeight = availableHeight + 'px';
 | 
						|
  scrollContainer.style.overflowY = 'auto';
 | 
						|
  scrollContainer.style.overflowX = 'hidden';
 | 
						|
}
 | 
						|
 | 
						|
window.addEventListener('load', adjustScrollContainerHeight);
 | 
						|
window.addEventListener('resize', adjustScrollContainerHeight);
 | 
						|
 | 
						|
// 2. Aktualisiert den Thumb (Größe und Position) der benutzerdefinierten Scrollbar
 | 
						|
function updateCustomScrollbar() {
 | 
						|
  const scrollContainer = document.querySelector('.scroll-container');
 | 
						|
  const thumb = document.getElementById('scroll-thumb');
 | 
						|
  const customScrollbar = document.getElementById('custom-scrollbar');
 | 
						|
  if (!scrollContainer || !thumb || !customScrollbar) return;
 | 
						|
  
 | 
						|
  const contentHeight = scrollContainer.scrollHeight;
 | 
						|
  const containerHeight = scrollContainer.clientHeight;
 | 
						|
  const scrollTop = scrollContainer.scrollTop;
 | 
						|
  
 | 
						|
  // Berechne die Thumb-Höhe (mindestens 20px)
 | 
						|
  let thumbHeight = (containerHeight / contentHeight) * containerHeight;
 | 
						|
  thumbHeight = Math.max(thumbHeight, 20);
 | 
						|
  thumb.style.height = thumbHeight + 'px';
 | 
						|
  
 | 
						|
  // Berechne die Position des Thumbs
 | 
						|
  const maxScrollTop = contentHeight - containerHeight;
 | 
						|
  const maxThumbTop = containerHeight - thumbHeight;
 | 
						|
  const thumbTop = maxScrollTop ? (scrollTop / maxScrollTop) * maxThumbTop : 0;
 | 
						|
  thumb.style.top = thumbTop + 'px';
 | 
						|
  
 | 
						|
  // Zeige die Scrollbar, falls der Inhalt überläuft, sonst ggf. ausblenden
 | 
						|
  customScrollbar.style.opacity = contentHeight > containerHeight ? '1' : '0';
 | 
						|
}
 | 
						|
 | 
						|
// Aktualisiere den Thumb bei Scrollen des Containers
 | 
						|
const scrollContainer = document.querySelector('.scroll-container');
 | 
						|
if (scrollContainer) {
 | 
						|
  scrollContainer.addEventListener('scroll', updateCustomScrollbar);
 | 
						|
}
 | 
						|
window.addEventListener('resize', updateCustomScrollbar);
 | 
						|
window.addEventListener('load', updateCustomScrollbar);
 | 
						|
 | 
						|
// 3. Interaktivität: Ermögliche Drag & Drop des Scroll-Thumbs
 | 
						|
let isDragging = false;
 | 
						|
let dragStartY = 0;
 | 
						|
let scrollStartY = 0;
 | 
						|
 | 
						|
const thumb = document.getElementById('scroll-thumb');
 | 
						|
 | 
						|
if (thumb) {
 | 
						|
  thumb.addEventListener('mousedown', function(e) {
 | 
						|
    isDragging = true;
 | 
						|
    dragStartY = e.clientY;
 | 
						|
    scrollStartY = scrollContainer.scrollTop;
 | 
						|
    e.preventDefault();
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
document.addEventListener('mousemove', function(e) {
 | 
						|
  if (!isDragging) return;
 | 
						|
  const containerHeight = scrollContainer.clientHeight;
 | 
						|
  const contentHeight = scrollContainer.scrollHeight;
 | 
						|
  const thumbHeight = thumb.offsetHeight;
 | 
						|
  
 | 
						|
  const maxScrollTop = contentHeight - containerHeight;
 | 
						|
  const maxThumbTop = containerHeight - thumbHeight;
 | 
						|
  
 | 
						|
  const deltaY = e.clientY - dragStartY;
 | 
						|
  // Berechne neuen Thumb-Top-Wert
 | 
						|
  let newThumbTop = (scrollStartY / maxScrollTop) * maxThumbTop + deltaY;
 | 
						|
  newThumbTop = Math.max(0, Math.min(newThumbTop, maxThumbTop));
 | 
						|
  
 | 
						|
  // Berechne den neuen Scrollwert anhand der Thumb-Position
 | 
						|
  const newScrollTop = (newThumbTop / maxThumbTop) * maxScrollTop;
 | 
						|
  scrollContainer.scrollTop = newScrollTop;
 | 
						|
});
 | 
						|
 | 
						|
document.addEventListener('mouseup', function(e) {
 | 
						|
  if (isDragging) {
 | 
						|
    isDragging = false;
 | 
						|
  }
 | 
						|
});
 |