Initial commit
This commit is contained in:
8
.idea/.gitignore
generated
vendored
Normal file
8
.idea/.gitignore
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
||||
12
.idea/landing-page.iml
generated
Normal file
12
.idea/landing-page.iml
generated
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/temp" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/tmp" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/landing-page.iml" filepath="$PROJECT_DIR$/.idea/landing-page.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
18
html/assets/arrow.svg
Normal file
18
html/assets/arrow.svg
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
version="1.1"
|
||||
width="0.153333in" height="0.676667in"
|
||||
viewBox="0 0 46 203">
|
||||
<path id="Chemin #1"
|
||||
fill="none" stroke="black" stroke-width="1"
|
||||
d="M 3.00,180.00
|
||||
C 3.00,180.00 23.00,199.89 23.00,200.00
|
||||
23.00,200.11 3.00,180.00 3.00,180.00 Z
|
||||
M 43.00,180.00
|
||||
C 43.00,180.00 23.00,200.00 23.00,200.00
|
||||
23.00,200.00 43.00,180.00 43.00,180.00 Z
|
||||
M 23.00,0.00
|
||||
C 23.00,0.00 23.00,200.00 23.00,200.00
|
||||
23.00,200.00 23.00,0.00 23.00,0.00 Z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 699 B |
BIN
html/assets/letsmeet.png
Normal file
BIN
html/assets/letsmeet.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 48 KiB |
BIN
html/assets/unluckiest.png
Normal file
BIN
html/assets/unluckiest.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 598 KiB |
68
html/index.html
Normal file
68
html/index.html
Normal file
@@ -0,0 +1,68 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Fira+Code:wght@300..700&display=swap" rel="stylesheet">
|
||||
|
||||
<link rel="stylesheet" href="styles/style.css">
|
||||
<link rel="stylesheet" href="styles/introduction.css">
|
||||
<link rel="stylesheet" href="styles/projects.css">
|
||||
|
||||
<title>Naaturel</title>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
|
||||
<section id="introduction">
|
||||
<div class="content">
|
||||
<h1> Naaturel </h1>
|
||||
<hr/>
|
||||
<h2 class="typer"></h2>
|
||||
</div>
|
||||
<footer>
|
||||
<p>Scroll down to get started</p>
|
||||
<div><img src="/html/assets/arrow.svg" alt="arrow"></div>
|
||||
</footer>
|
||||
</section>
|
||||
|
||||
<section id="projects">
|
||||
<div class="content">
|
||||
<h1> My projects </h1>
|
||||
<hr/>
|
||||
<h2>Front</h2>
|
||||
<div class="project-list">
|
||||
<a href="https://unluckiest.naaturel.be"><img src="/html/assets/unluckiest.png" alt="unluckiest"></a>
|
||||
<a href="https://letsmeet.naaturel.be"><img src="/html/assets/letsmeet.png" alt="letsmeet"></a>
|
||||
</div>
|
||||
|
||||
<h2>Back</h2>
|
||||
<div class="project-list">
|
||||
<a href=""><img src="" alt=""></a>
|
||||
<a href=""><img src="" alt=""></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
|
||||
<section>Wow you've scrolled so far</section>
|
||||
</main>
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
<script type="module">
|
||||
import { Typer } from '/html/scripts/Typer.js';
|
||||
|
||||
const target = document.getElementsByClassName('typer')[0];
|
||||
const texts = ["Backend dev", "Frontend dev", "Fullstack software engineer"];
|
||||
const typer = new Typer({target: target, texts: texts, typingDelay: 150, deletionDelay: 50});
|
||||
typer.start();
|
||||
</script>
|
||||
|
||||
</html>
|
||||
62
html/scripts/Typer.js
Normal file
62
html/scripts/Typer.js
Normal file
@@ -0,0 +1,62 @@
|
||||
export class Typer {
|
||||
|
||||
target;
|
||||
texts;
|
||||
typingDelay;
|
||||
deletionDelay;
|
||||
pauseAfterWord = 2000;
|
||||
pauseBetweenWords = 500;
|
||||
|
||||
textIndex = 0;
|
||||
charIndex = 0;
|
||||
deleting = false;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param target
|
||||
* @param texts
|
||||
* @param typingDelay
|
||||
* @param deletionDelay
|
||||
*/
|
||||
constructor({ target : target, texts : texts, typingDelay : typingDelay, deletionDelay : deletionDelay }) {
|
||||
this.target = target;
|
||||
this.texts = texts;
|
||||
this.typingDelay = typingDelay;
|
||||
this.deletionDelay = deletionDelay;
|
||||
}
|
||||
|
||||
start(){
|
||||
if (!this.deleting) {
|
||||
this.addText();
|
||||
} else {
|
||||
this.removeText();
|
||||
}
|
||||
}
|
||||
|
||||
addText(){
|
||||
const currentText = this.texts[this.textIndex];
|
||||
this.charIndex++;
|
||||
this.target.innerText = currentText.slice(0, this.charIndex);
|
||||
|
||||
if (this.charIndex === currentText.length) {
|
||||
this.deleting = true;
|
||||
setTimeout(() => this.start(), this.pauseAfterWord);
|
||||
} else {
|
||||
setTimeout(() => this.start(), this.typingDelay);
|
||||
}
|
||||
}
|
||||
|
||||
removeText(){
|
||||
const currentText = this.texts[this.textIndex];
|
||||
this.charIndex--;
|
||||
this.target.innerText = currentText.slice(0, this.charIndex);
|
||||
|
||||
if (this.charIndex === 0) {
|
||||
this.deleting = false;
|
||||
this.textIndex = (this.textIndex + 1) % this.texts.length;
|
||||
setTimeout(() => this.start(), this.pauseBetweenWords);
|
||||
} else {
|
||||
setTimeout(() => this.start(), this.deletionDelay);
|
||||
}
|
||||
}
|
||||
}
|
||||
27
html/styles/introduction.css
Normal file
27
html/styles/introduction.css
Normal file
@@ -0,0 +1,27 @@
|
||||
#introduction .content {
|
||||
flex: 5;
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
#introduction footer {
|
||||
flex : 1;
|
||||
transition: transform 0.5s ease-in-out;
|
||||
}
|
||||
|
||||
footer:hover{
|
||||
transform: translateY(-20px);
|
||||
}
|
||||
|
||||
hr {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.typer::after {
|
||||
content: '|';
|
||||
animation: blink 800ms infinite;
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
from { opacity: 0; }
|
||||
to { opacity: 1; }
|
||||
}
|
||||
22
html/styles/projects.css
Normal file
22
html/styles/projects.css
Normal file
@@ -0,0 +1,22 @@
|
||||
#projects .content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.project-list {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
gap : 1rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.project-list img {
|
||||
width: 215px;
|
||||
border : solid 1px black;
|
||||
border-radius: 15px;
|
||||
transition: transform 0.2s ease-in-out;
|
||||
}
|
||||
|
||||
.project-list img:hover {
|
||||
transform: scale(1.1);
|
||||
}
|
||||
44
html/styles/style.css
Normal file
44
html/styles/style.css
Normal file
@@ -0,0 +1,44 @@
|
||||
:root {
|
||||
|
||||
}
|
||||
|
||||
::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
* {
|
||||
font-family: 'Fira Code', 'PT sans', sans-serif;
|
||||
|
||||
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
html, body {
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
}
|
||||
|
||||
html, body, main, section, section div, footer {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
main {
|
||||
justify-content: start;
|
||||
|
||||
width: 95%;
|
||||
height: 95%;
|
||||
|
||||
overflow: auto;
|
||||
scroll-snap-type: y mandatory;
|
||||
margin : 5px;
|
||||
}
|
||||
|
||||
section {
|
||||
height: 100%;
|
||||
min-height: 100%;
|
||||
width: 100%;
|
||||
scroll-snap-align: start;
|
||||
}
|
||||
10
package.json
Normal file
10
package.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"name": "landing-page",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "html/index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
Reference in New Issue
Block a user