From e5382126391d6aaedc03d917a0a96134056fbf57 Mon Sep 17 00:00:00 2001
From: HouTeng Chan <ht-chen21@mails.tsinghua.edu.cn>
Date: Fri, 13 Sep 2024 05:41:33 +0000
Subject: [PATCH] Update file home.html

---
 wiki/pages/home.html | 173 ++++++++++++++++++++++++++-----------------
 1 file changed, 106 insertions(+), 67 deletions(-)

diff --git a/wiki/pages/home.html b/wiki/pages/home.html
index 53def31c..b1729ee6 100644
--- a/wiki/pages/home.html
+++ b/wiki/pages/home.html
@@ -12,8 +12,20 @@
       font-family: 'Times New Roman', Times, serif;
       scroll-behavior: smooth;
     }
+    #menu {
+      position: fixed;
+      top: 0;
+      left: 0;
+      right: 0;
+      background-color: rgba(255, 255, 255, 0.9);
+      transition: transform 0.3s ease-in-out;
+      z-index: 1000;
+    }
+    .content-wrapper {
+      padding-top: 60px; /* Adjust based on your menu height */
+    }
     .content-block {
-      height: 100vh;
+      min-height: 100vh;
       display: flex;
       align-items: center;
       justify-content: center;
@@ -39,64 +51,68 @@
   </style>
 </head>
 <body>
-  {% include 'menu.html' %}
+  <div id="menu">
+    {% include 'menu.html' %}
+  </div>
 
-  <div class="content-block" id="block1">
-    <div class="content">
-      <div class="image">
-        <img src="https://static.igem.wiki/teams/5187/art/logo.png" alt="Logo">
-      </div>
-      <div class="text">
-        <h2>Welcome to Tsinghua - IGEM 2024</h2>
-        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in dui mauris. Vivamus hendrerit arcu sed erat molestie vehicula. Sed auctor neque eu tellus rhoncus ut eleifend nibh porttitor.</p>
+  <div class="content-wrapper">
+    <div class="content-block" id="block1">
+      <div class="content">
+        <div class="image">
+          <img src="https://static.igem.wiki/teams/5187/art/logo.png" alt="Logo">
+        </div>
+        <div class="text">
+          <h2>Welcome to Tsinghua - IGEM 2024</h2>
+          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in dui mauris. Vivamus hendrerit arcu sed erat molestie vehicula. Sed auctor neque eu tellus rhoncus ut eleifend nibh porttitor.</p>
+        </div>
       </div>
     </div>
-  </div>
 
-  <div class="content-block" id="block2">
-    <div class="content">
-      <div class="image">
-        <img src="https://static.igem.wiki/teams/5187/art/logo.png" alt="Logo">
-      </div>
-      <div class="text">
-        <h2>Our Mission</h2>
-        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in dui mauris. Vivamus hendrerit arcu sed erat molestie vehicula. Sed auctor neque eu tellus rhoncus ut eleifend nibh porttitor.</p>
+    <div class="content-block" id="block2">
+      <div class="content">
+        <div class="image">
+          <img src="https://static.igem.wiki/teams/5187/art/logo.png" alt="Logo">
+        </div>
+        <div class="text">
+          <h2>Our Mission</h2>
+          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in dui mauris. Vivamus hendrerit arcu sed erat molestie vehicula. Sed auctor neque eu tellus rhoncus ut eleifend nibh porttitor.</p>
+        </div>
       </div>
     </div>
-  </div>
 
-  <div class="content-block" id="block3">
-    <div class="content">
-      <div class="image">
-        <img src="https://static.igem.wiki/teams/5187/art/logo.png" alt="Logo">
-      </div>
-      <div class="text">
-        <h2>Our Team</h2>
-        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in dui mauris. Vivamus hendrerit arcu sed erat molestie vehicula. Sed auctor neque eu tellus rhoncus ut eleifend nibh porttitor.</p>
+    <div class="content-block" id="block3">
+      <div class="content">
+        <div class="image">
+          <img src="https://static.igem.wiki/teams/5187/art/logo.png" alt="Logo">
+        </div>
+        <div class="text">
+          <h2>Our Team</h2>
+          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in dui mauris. Vivamus hendrerit arcu sed erat molestie vehicula. Sed auctor neque eu tellus rhoncus ut eleifend nibh porttitor.</p>
+        </div>
       </div>
     </div>
-  </div>
 
-  <div class="content-block" id="block4">
-    <div class="content">
-      <div class="image">
-        <img src="https://static.igem.wiki/teams/5187/art/logo.png" alt="Logo">
-      </div>
-      <div class="text">
-        <h2>Our Projects</h2>
-        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in dui mauris. Vivamus hendrerit arcu sed erat molestie vehicula. Sed auctor neque eu tellus rhoncus ut eleifend nibh porttitor.</p>
+    <div class="content-block" id="block4">
+      <div class="content">
+        <div class="image">
+          <img src="https://static.igem.wiki/teams/5187/art/logo.png" alt="Logo">
+        </div>
+        <div class="text">
+          <h2>Our Projects</h2>
+          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in dui mauris. Vivamus hendrerit arcu sed erat molestie vehicula. Sed auctor neque eu tellus rhoncus ut eleifend nibh porttitor.</p>
+        </div>
       </div>
     </div>
-  </div>
 
-  <div class="content-block" id="block5">
-    <div class="content">
-      <div class="image">
-        <img src="https://static.igem.wiki/teams/5187/art/logo.png" alt="Logo">
-      </div>
-      <div class="text">
-        <h2>Contact Us</h2>
-        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in dui mauris. Vivamus hendrerit arcu sed erat molestie vehicula. Sed auctor neque eu tellus rhoncus ut eleifend nibh porttitor.</p>
+    <div class="content-block" id="block5">
+      <div class="content">
+        <div class="image">
+          <img src="https://static.igem.wiki/teams/5187/art/logo.png" alt="Logo">
+        </div>
+        <div class="text">
+          <h2>Contact Us</h2>
+          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in dui mauris. Vivamus hendrerit arcu sed erat molestie vehicula. Sed auctor neque eu tellus rhoncus ut eleifend nibh porttitor.</p>
+        </div>
       </div>
     </div>
   </div>
@@ -105,7 +121,24 @@
 
   <script>
     const blocks = document.querySelectorAll('.content-block');
+    const menu = document.getElementById('menu');
     const colors = ['#FFFFFF', '#FF5151'];
+    let lastScrollTop = 0;
+
+    function interpolateColor(color1, color2, factor) {
+      const r1 = parseInt(color1.slice(1, 3), 16);
+      const g1 = parseInt(color1.slice(3, 5), 16);
+      const b1 = parseInt(color1.slice(5, 7), 16);
+      const r2 = parseInt(color2.slice(1, 3), 16);
+      const g2 = parseInt(color2.slice(3, 5), 16);
+      const b2 = parseInt(color2.slice(5, 7), 16);
+
+      const r = Math.round(r1 + factor * (r2 - r1));
+      const g = Math.round(g1 + factor * (g2 - g1));
+      const b = Math.round(b1 + factor * (b2 - b1));
+
+      return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;
+    }
 
     function updateColors() {
       const scrollPosition = window.scrollY;
@@ -114,29 +147,35 @@
       blocks.forEach((block, index) => {
         const blockTop = block.offsetTop;
         const blockHeight = block.offsetHeight;
-        const blockCenter = blockTop + blockHeight / 2;
-        
-        if (scrollPosition + windowHeight / 2 > blockCenter) {
-          // Odd blocks (1, 3, 5) are white background with pink text
-          // Even blocks (2, 4) are pink background with white text
-          if (index % 2 === 0) {
-            block.style.backgroundColor = colors[0];
-            block.style.color = colors[1];
-          } else {
-            block.style.backgroundColor = colors[1];
-            block.style.color = colors[0];
-          }
-        } else {
-          // Reset to initial state when block is not in view
-          if (index === 0) {
-            block.style.backgroundColor = colors[0];
-            block.style.color = colors[1];
-          } else {
-            block.style.backgroundColor = '';
-            block.style.color = '';
-          }
+        const blockProgress = (scrollPosition + windowHeight / 2 - blockTop) / blockHeight;
+
+        if (blockProgress >= 0 && blockProgress <= 1) {
+          const startColor = index % 2 === 0 ? colors[0] : colors[1];
+          const endColor = index % 2 === 0 ? colors[1] : colors[0];
+
+          const backgroundColor = interpolateColor(startColor, endColor, blockProgress);
+          const textColor = interpolateColor(endColor, startColor, blockProgress);
+
+          block.style.backgroundColor = backgroundColor;
+          block.style.color = textColor;
         }
       });
+
+      // Menu fade effect
+      const menuHeight = menu.offsetHeight;
+      const fadeStart = 0;
+      const fadeEnd = menuHeight;
+      const opacity = 1 - Math.min(Math.max((scrollPosition - fadeStart) / (fadeEnd - fadeStart), 0), 1);
+      menu.style.opacity = opacity;
+
+      // Hide menu when scrolling down, show when scrolling up
+      const currentScrollTop = window.pageYOffset || document.documentElement.scrollTop;
+      if (currentScrollTop > lastScrollTop) {
+        menu.style.transform = `translateY(-${menuHeight}px)`;
+      } else {
+        menu.style.transform = 'translateY(0)';
+      }
+      lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop;
     }
 
     window.addEventListener('scroll', updateColors);
-- 
GitLab