Fix Console
This commit is contained in:
parent
b46a73ebe7
commit
4b664f9186
3 changed files with 65 additions and 53 deletions
67
app/page.tsx
67
app/page.tsx
|
@ -1,61 +1,36 @@
|
|||
'use client';
|
||||
|
||||
import AppLink from '@/ui/AppLink';
|
||||
|
||||
import { useEffect } from 'react';
|
||||
|
||||
import Console from '@/ui/Console';
|
||||
|
||||
export default function Home() {
|
||||
let start: boolean = true;
|
||||
useEffect(() => {
|
||||
if (start) {
|
||||
start = false;
|
||||
let visible: boolean = true;
|
||||
let animation: boolean = true; //TODO ajouter un bouton pour arreter l'animation
|
||||
let con: HTMLElement | null = document.getElementById('console');
|
||||
window.setInterval(function () {
|
||||
if (con !== null && visible === true && animation === true) {
|
||||
con.className = 'console invisible';
|
||||
visible = false;
|
||||
} else if (con !== null && animation === true) {
|
||||
con.className = 'console';
|
||||
visible = true;
|
||||
}
|
||||
}, 400);
|
||||
let word: HTMLElement | null = document.getElementById('text')
|
||||
let text: string = "Peer-at-Code";
|
||||
for (let i: number = 0; i < text.length; i++) {
|
||||
setTimeout(function () {
|
||||
if (word !== null)
|
||||
word.innerHTML += text.charAt(i);
|
||||
}, 410 * i)
|
||||
}
|
||||
}
|
||||
}, []);
|
||||
return (
|
||||
<div>
|
||||
<div className="flex h-screen w-full">
|
||||
<div className="m-auto flex flex-col">
|
||||
<h1 className="text-center text-6xl font-bold">
|
||||
Bienvenu sur
|
||||
</h1>
|
||||
<h1 className='flex text-4xl' >
|
||||
<span id="text"></span>
|
||||
<div className='console' id="console">_</div>
|
||||
</h1>
|
||||
<br></br>
|
||||
<div className="m-auto flex flex-col space-y-2">
|
||||
<h1 className="text-center text-6xl font-bold">Bienvenu sur</h1>
|
||||
<span>
|
||||
<Console text="Peer-at Code" />
|
||||
</span>
|
||||
<AppLink href="/dashboard">Dashboard</AppLink>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex h-screen w-full">
|
||||
<div className="text-center m-auto flex flex-col space-x-0 md:flex-row md:space-x-6 md:space-y-0">
|
||||
<img className='md:w-2/6 ml-[11%] sm:w-0 w-0 ' src='https://media.discordapp.net/attachments/1070815084718334032/1074104191921959003/glazk0_a_minimalistic_logo_that_is_a_pirate_logo_white_and_blac_9b4eb1dd-5979-45dd-a70a-f880ee3b49ca.png?width=586&height=586'></img>
|
||||
<p className='self-center md:w-2/6 sm:w-3/6 w-4/6 text-justify'>
|
||||
Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500, quand un imprimeur anonyme assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n'a pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu n'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker.
|
||||
</p>
|
||||
<div className="m-auto flex flex-col space-x-0 text-center md:flex-row md:space-x-6 md:space-y-0">
|
||||
<img
|
||||
className="ml-[11%] w-0 sm:w-0 md:w-2/6 "
|
||||
src="https://media.discordapp.net/attachments/1070815084718334032/1074104191921959003/glazk0_a_minimalistic_logo_that_is_a_pirate_logo_white_and_blac_9b4eb1dd-5979-45dd-a70a-f880ee3b49ca.png?width=586&height=586"
|
||||
></img>
|
||||
<p className="w-4/6 self-center text-justify sm:w-3/6 md:w-2/6">
|
||||
Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en
|
||||
page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis
|
||||
les années 1500, quand un imprimeur anonyme assembla ensemble des morceaux de texte pour
|
||||
réaliser un livre spécimen de polices de texte. Il n'a pas fait que survivre cinq
|
||||
siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu
|
||||
n'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles
|
||||
Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion
|
||||
dans des applications de mise en page de texte, comme Aldus PageMaker.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -2,10 +2,9 @@
|
|||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
.console{
|
||||
display:inline-block;
|
||||
position:relative;
|
||||
top:-0.14em;
|
||||
left:5px;
|
||||
height: 1rem;
|
||||
}
|
||||
@layer components {
|
||||
.console {
|
||||
@apply relative top-0.5 inline-block;
|
||||
/* make it hidden then visible every seconde */
|
||||
}
|
||||
}
|
||||
|
|
38
ui/Console.tsx
Normal file
38
ui/Console.tsx
Normal file
|
@ -0,0 +1,38 @@
|
|||
'use client';
|
||||
|
||||
import { cn } from '@/lib/utils';
|
||||
import { useEffect, useState } from 'react';
|
||||
|
||||
export default function Console({ text, className }: { text: string; className?: string }) {
|
||||
const [message, setMessage] = useState('');
|
||||
const [typingIndex, setTypingIndex] = useState(0);
|
||||
|
||||
const typingDelay = 400; // The delay between each character being typed, in milliseconds
|
||||
|
||||
useEffect(() => {
|
||||
const intervalId = setInterval(() => {
|
||||
setTypingIndex((prevIndex) => prevIndex + 1);
|
||||
}, typingDelay);
|
||||
|
||||
return () => clearInterval(intervalId);
|
||||
}, [text]);
|
||||
|
||||
useEffect(() => {
|
||||
if (typingIndex <= text.length) {
|
||||
setMessage(text.slice(0, typingIndex));
|
||||
}
|
||||
}, [typingIndex, text]);
|
||||
|
||||
return (
|
||||
<div className="inline-block h-4">
|
||||
<span className={cn('text-4xl', className)}>{message}</span>
|
||||
<div
|
||||
className={cn('relative top-0.5 inline-block', {
|
||||
hidden: typingIndex % 2 === 0
|
||||
})}
|
||||
>
|
||||
_
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
Loading…
Add table
Reference in a new issue