From 22896a9ef5650ed6b54be23e54ab32e2b0f854c6 Mon Sep 17 00:00:00 2001 From: HouTeng Chan <ht-chen21@mails.tsinghua.edu.cn> Date: Mon, 30 Sep 2024 04:52:12 +0000 Subject: [PATCH] Update file home.html --- wiki/pages/home.html | 150 +++++++++++++++++++++++-------------------- 1 file changed, 80 insertions(+), 70 deletions(-) diff --git a/wiki/pages/home.html b/wiki/pages/home.html index e4cadfc6..e36859e6 100644 --- a/wiki/pages/home.html +++ b/wiki/pages/home.html @@ -303,7 +303,6 @@ </div> </div> - <!-- Add the sine wave container and sachet image container --> <div id="sine-wave-container"> <svg id="sine-wave-animation" xmlns="http://www.w3.org/2000/svg"></svg> @@ -312,7 +311,6 @@ <img src="https://static.igem.wiki/teams/5187/art/icon.png" alt="Sachet" id="sachet-image"> </div> - <footer class="footer"> <div class="footer-content"> <div class="social-icons"> @@ -369,83 +367,95 @@ }); // Added JavaScript for sine wave animation - window.addEventListener('DOMContentLoaded', function() { + window.addEventListener('load', function() { const svg = document.getElementById('sine-wave-animation'); const sachetImage = document.getElementById('sachet-image'); - // Get the sachet image height - const sachetHeight = sachetImage.offsetHeight || 0; - - const width = 100; // Width of the SVG - const height = window.innerHeight - sachetHeight; // Height from top to sachet - - svg.setAttribute('width', width); - svg.setAttribute('height', height); - - // Parameters for sine waves - const amplitudes = [20, 15, 10]; // Amplitude of each sine wave - const frequencies = [5, 7, 9]; // Number of cycles for each sine wave - const offsets = [30, 50, 70]; // Horizontal positions - const colors = ['pink', 'pink', 'pink']; // Color of the sine waves - - const paths = []; - - for (let i = 0; i < 3; i++) { - const pathData = createVerticalSineWavePath( - amplitudes[i], - frequencies[i], - 0, - offsets[i], - width, - height, - 500 - ); - const path = document.createElementNS('http://www.w3.org/2000/svg', 'path'); - path.setAttribute('d', pathData); - path.setAttribute('stroke', colors[i]); - path.setAttribute('fill', 'none'); - path.setAttribute('stroke-width', 2); - path.setAttribute('id', 'sinewave' + i); - - svg.appendChild(path); - - // Get the length of the path - const length = path.getTotalLength(); - - // Set up the stroke-dasharray and stroke-dashoffset - path.style.strokeDasharray = length; - path.style.strokeDashoffset = length; - - paths.push({path: path, length: length}); - } - - function createVerticalSineWavePath(amplitude, frequency, phase, horizontalOffset, width, height, points) { - let path = ""; - for (let i = 0; i <= points; i++) { - let y = (i / points) * height; - let x = amplitude * Math.sin(frequency * (y / height) * 2 * Math.PI + phase) + horizontalOffset; - if (i === 0) { - path += "M " + x + " " + y + " "; - } else { - path += "L " + x + " " + y + " "; + // Ensure the sachet image has loaded + sachetImage.onload = function() { + initializeSineWave(); + }; + + // If the image is cached and already loaded + if (sachetImage.complete) { + initializeSineWave(); + } + + function initializeSineWave() { + // Get the sachet image height + const sachetHeight = sachetImage.offsetHeight || 0; + + const width = 100; // Width of the SVG + const height = window.innerHeight - sachetHeight - 50; // Height from top to sachet + + svg.setAttribute('width', width); + svg.setAttribute('height', height); + + // Parameters for sine waves + const amplitudes = [20, 15, 10]; // Amplitude of each sine wave + const frequencies = [5, 7, 9]; // Number of cycles for each sine wave + const offsets = [50, 50, 50]; // Horizontal positions + const colors = ['pink', 'pink', 'pink']; // Color of the sine waves + + const paths = []; + + for (let i = 0; i < 3; i++) { + const pathData = createVerticalSineWavePath( + amplitudes[i], + frequencies[i], + 0, + offsets[i], + width, + height, + 500 + ); + const path = document.createElementNS('http://www.w3.org/2000/svg', 'path'); + path.setAttribute('d', pathData); + path.setAttribute('stroke', colors[i]); + path.setAttribute('fill', 'none'); + path.setAttribute('stroke-width', 2); + path.setAttribute('id', 'sinewave' + i); + + svg.appendChild(path); + + // Get the length of the path + const length = path.getTotalLength(); + + // Set up the stroke-dasharray and stroke-dashoffset + path.style.strokeDasharray = length; + path.style.strokeDashoffset = length; + + paths.push({path: path, length: length}); + } + + function createVerticalSineWavePath(amplitude, frequency, phase, horizontalOffset, width, height, points) { + let path = ""; + for (let i = 0; i <= points; i++) { + let y = (i / points) * height; + let x = amplitude * Math.sin(frequency * (y / height) * 2 * Math.PI + phase) + horizontalOffset; + if (i === 0) { + path += "M " + x + " " + y + " "; + } else { + path += "L " + x + " " + y + " "; + } } + return path; } - return path; - } - window.addEventListener('scroll', function() { - const scrollTop = window.scrollY || window.pageYOffset; - const scrollHeight = document.body.scrollHeight - window.innerHeight; + window.addEventListener('scroll', function() { + const scrollTop = window.scrollY || window.pageYOffset; + const scrollHeight = document.body.scrollHeight - window.innerHeight; - // Calculate the scroll percentage - const scrollPercent = scrollTop / scrollHeight; + // Calculate the scroll percentage + const scrollPercent = scrollTop / scrollHeight; - // For each path, adjust the stroke-dashoffset - paths.forEach(function(item) { - const drawLength = item.length * scrollPercent; - item.path.style.strokeDashoffset = item.length - drawLength; + // For each path, adjust the stroke-dashoffset + paths.forEach(function(item) { + const drawLength = item.length * scrollPercent; + item.path.style.strokeDashoffset = item.length - drawLength; + }); }); - }); + } }); </script> </html> \ No newline at end of file -- GitLab