fix text animation
This commit is contained in:
		@@ -1,25 +1,27 @@
 | 
			
		||||
<div class="fade-in">
 | 
			
		||||
    <div class="relative isolate">
 | 
			
		||||
        <div class="mx-auto max-w-7xl px-6  lg:flex lg:items-center lg:gap-x-15 lg:px-8 py-12">
 | 
			
		||||
        <div class="mx-auto max-w-7xl px-6 lg:flex lg:items-center lg:gap-x-15 lg:px-8 py-12">
 | 
			
		||||
            <div class="mx-auto max-w-2xl lg:mx-0 lg:flex-auto">
 | 
			
		||||
                <!-- Typing Text -->
 | 
			
		||||
                <h1 class="fade-in mt-10 font-normal tracking-tight text-black lg:text-[6rem] text-[2.5rem]">What's Inside AIBox</h1>
 | 
			
		||||
                
 | 
			
		||||
                <h1 id="typing-text2" class="fade-in mt-10 font-normal tracking-tight text-black lg:text-[6rem] text-[2.5rem]">
 | 
			
		||||
                </h1>
 | 
			
		||||
 | 
			
		||||
                <!-- Specification List -->
 | 
			
		||||
                <dl class="mt-10 px-10 max-w-xl lg:space-y-6 space-y-3 text-gray-900 lg:max-w-xl">
 | 
			
		||||
                    <div class="relative pl-2"><dt class="fade-in-item font-light text-xl text-black">✓ ThreeFold Zero-OS</dt></div>
 | 
			
		||||
                    <div class="relative pl-2"><dt class="fade-in-item font-light text-xl text-black">✓ ThreeFold Mycelium Network</dt></div>
 | 
			
		||||
                    <div class="relative pl-2"><dt class="fade-in-item font-light text-xl text-black">✓ Powefull AMD CPU</dt></div>
 | 
			
		||||
                    <div class="relative pl-2"><dt class="fade-in-item font-light text-xl text-black">✓ 64-128 GB Memory</dt></div>
 | 
			
		||||
                    <div class="relative pl-2"><dt class="fade-in-item font-light text-xl text-black">✓ 2 x 2 TB SSD</dt></div>
 | 
			
		||||
                    <div class="relative pl-2"><dt class="fade-in-item font-light text-xl text-black">✓ 7800 XTX GPU</dt></div>
 | 
			
		||||
                    <div class="relative pl-2"><dt class="fade-in-item font-light text-xl text-black">✓ Watercooled GPU/CPU</dt></div>
 | 
			
		||||
                    <div class="relative pl-2"><dt class="fade-in-item font-light text-xl text-black">✓ High Quality motherboard & power supply</dt></div>
 | 
			
		||||
                    <div class="relative pl-2 fade-in-item"><dt class="font-light text-xl text-black">✓ ThreeFold Zero-OS</dt></div>
 | 
			
		||||
                    <div class="relative pl-2 fade-in-item"><dt class="font-light text-xl text-black">✓ ThreeFold Mycelium Network</dt></div>
 | 
			
		||||
                    <div class="relative pl-2 fade-in-item"><dt class="font-light text-xl text-black">✓ Powerful AMD CPU</dt></div>
 | 
			
		||||
                    <div class="relative pl-2 fade-in-item"><dt class="font-light text-xl text-black">✓ 64-128 GB Memory</dt></div>
 | 
			
		||||
                    <div class="relative pl-2 fade-in-item"><dt class="font-light text-xl text-black">✓ 2 x 2 TB SSD</dt></div>
 | 
			
		||||
                    <div class="relative pl-2 fade-in-item"><dt class="font-light text-xl text-black">✓ 7800 XTX GPU</dt></div>
 | 
			
		||||
                    <div class="relative pl-2 fade-in-item"><dt class="font-light text-xl text-black">✓ Watercooled GPU/CPU</dt></div>
 | 
			
		||||
                    <div class="relative pl-2 fade-in-item"><dt class="font-light text-xl text-black">✓ High Quality motherboard & power supply</dt></div>
 | 
			
		||||
                </dl>
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            <!-- Image Section -->
 | 
			
		||||
            <div class="fade-in-image mt-8 lg:mt-24 lg:flex lg:justify-center lg:w-1/2">
 | 
			
		||||
                <img class="w-full max-w-lg h-auto object-cover rounded-xl" src="/images/aibox_spec.jpg" alt="Mobile App Screenshot">
 | 
			
		||||
                <img class="w-full max-w-lg h-auto object-cover rounded-xl" src="/images/aibox_spec.jpg" alt="AIBox Specifications">
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
@@ -38,8 +40,6 @@
 | 
			
		||||
        opacity: 1;
 | 
			
		||||
        transform: translateY(0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</style>
 | 
			
		||||
 | 
			
		||||
<!-- Script -->
 | 
			
		||||
@@ -48,49 +48,33 @@
 | 
			
		||||
        /*** Typing Effect ***/
 | 
			
		||||
        const text = "What's Inside AIBox";
 | 
			
		||||
        const textElement = document.getElementById("typing-text2");
 | 
			
		||||
        let loopCount = 0;
 | 
			
		||||
        const maxLoops = 1;
 | 
			
		||||
        let index = 0;
 | 
			
		||||
 | 
			
		||||
        function typeText(i, callback) {
 | 
			
		||||
            if (i < text.length) {
 | 
			
		||||
                textElement.textContent += text.charAt(i);
 | 
			
		||||
                setTimeout(() => typeText(i + 1), 100);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function loopTyping() {
 | 
			
		||||
            if (loopCount < maxLoops) {
 | 
			
		||||
                typeText(0, () => {
 | 
			
		||||
                    deleteText(() => {
 | 
			
		||||
                        loopCount++;
 | 
			
		||||
                        loopTyping();
 | 
			
		||||
                    });
 | 
			
		||||
                });
 | 
			
		||||
            } else {
 | 
			
		||||
                typeText(0, () => {}); // Final typing with no delete
 | 
			
		||||
        function typeText() {
 | 
			
		||||
            if (index < text.length) {
 | 
			
		||||
                textElement.textContent += text.charAt(index);
 | 
			
		||||
                index++;
 | 
			
		||||
                setTimeout(typeText, 100);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /*** Fade-in Items One by One ***/
 | 
			
		||||
        const items = document.querySelectorAll(".fade-in-item");
 | 
			
		||||
        const image = document.querySelector(".fade-in-image");
 | 
			
		||||
        let index = 0;
 | 
			
		||||
        let itemIndex = 0;
 | 
			
		||||
 | 
			
		||||
        function showNextItem() {
 | 
			
		||||
            if (index < items.length) {
 | 
			
		||||
                items[index].classList.add("show");
 | 
			
		||||
                index++;
 | 
			
		||||
                setTimeout(showNextItem, 1000);
 | 
			
		||||
            if (itemIndex < items.length) {
 | 
			
		||||
                items[itemIndex].classList.add("show");
 | 
			
		||||
                itemIndex++;
 | 
			
		||||
                setTimeout(showNextItem, 300); // Faster fade-in
 | 
			
		||||
            } else {
 | 
			
		||||
                image.classList.add("show");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /*** Initialize Everything ***/
 | 
			
		||||
        loopTyping();
 | 
			
		||||
        showNextItem();
 | 
			
		||||
 | 
			
		||||
        // Fade-in Image after text animations
 | 
			
		||||
        setTimeout(() => image.classList.add("show"), 1000);
 | 
			
		||||
        typeText();
 | 
			
		||||
        setTimeout(showNextItem, 1500); // Delay to ensure text is typed first
 | 
			
		||||
    });
 | 
			
		||||
</script>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
<div class="bg-white">
 | 
			
		||||
  <div class="mx-auto max-w-4xl px-6 max-lg:text-center lg:max-w-7xl lg:px-8">
 | 
			
		||||
      <h2 id="typing-text2" class="fade-in text-balance font-normal tracking-tight text-black lg:text-[6rem] text-[2.5rem]">{{ section.extra.title | default(value="Pre-order Your AIBox") }}</h2>
 | 
			
		||||
      <h2 class="fade-in text-balance font-normal tracking-tight text-black lg:text-[6rem] text-[2.5rem]">{{ section.extra.title | default(value="Pre-order Your AIBox") }}</h2>
 | 
			
		||||
      <p class="mt-6 max-w-2xl text-lg font-light text-pretty text-black max-lg:mx-auto sm:text-xl/8">{{ section.extra.subtitle | default(value="Choose the box that's packed with the best features for your computing needs.") }}</p>
 | 
			
		||||
      <p class="mt-6 max-w-2xl text-lg font-light text-pretty text-black max-lg:mx-auto sm:text-xl/10">{{ section.extra.subtitle2}}</p>
 | 
			
		||||
  </div>
 | 
			
		||||
@@ -79,46 +79,3 @@
 | 
			
		||||
      }
 | 
			
		||||
  }
 | 
			
		||||
</style>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
  document.addEventListener("DOMContentLoaded", function () {
 | 
			
		||||
      const text = "";
 | 
			
		||||
      const textElement = document.getElementById("typing-text2");
 | 
			
		||||
      let loopCount = 0;
 | 
			
		||||
      const maxLoops = 5;
 | 
			
		||||
 | 
			
		||||
      function typeText(i, callback) {
 | 
			
		||||
          if (i < text.length) {
 | 
			
		||||
              textElement.textContent += text.charAt(i);
 | 
			
		||||
              setTimeout(() => typeText(i + 1, callback), 100);
 | 
			
		||||
          } else {
 | 
			
		||||
              setTimeout(callback, 1000);
 | 
			
		||||
          }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      function deleteText(callback) {
 | 
			
		||||
          let currentText = textElement.textContent;
 | 
			
		||||
          if (currentText.length > 0) {
 | 
			
		||||
              textElement.textContent = currentText.substring(0, currentText.length - 1);
 | 
			
		||||
              setTimeout(() => deleteText(callback), 50);
 | 
			
		||||
          } else {
 | 
			
		||||
              setTimeout(callback, 100);
 | 
			
		||||
          }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      function loopTyping() {
 | 
			
		||||
          if (loopCount < maxLoops) {
 | 
			
		||||
              typeText(0, () => {
 | 
			
		||||
                  deleteText(() => {
 | 
			
		||||
                      loopCount++;
 | 
			
		||||
                      loopTyping();
 | 
			
		||||
                  });
 | 
			
		||||
              });
 | 
			
		||||
          } else {
 | 
			
		||||
              typeText(0, () => {}); // Final typing with no delete
 | 
			
		||||
          }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      loopTyping();
 | 
			
		||||
  });
 | 
			
		||||
</script>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user