├── README.md
└── js project
├── animated search bar
├── index.html
├── script.js
└── style.css
├── blur background popup
├── bg.jpg
├── index.html
├── script.js
└── style.css
├── character counter
├── index.html
├── script.js
└── style.css
├── color generator
├── index.html
├── script.js
└── style.css
├── dark mode toggle
├── index.html
├── script.js
└── style.css
├── digital clock
├── bg2.jpg
├── bg3.jpg
├── index.html
├── script.js
└── style.css
├── emoji
├── index.html
├── script.js
└── style.css
├── heart trail animation
├── index.html
├── script.js
└── style.css
├── image scroll effect
├── index.html
├── script.js
└── style.css
├── landing page
├── apple.jpg
├── index.html
├── samsung.jpg
├── script.js
└── style.css
├── month calender
├── index.html
├── script.js
└── style.css
├── multiplication app
├── bg2.jpg
├── index.html
├── script.js
└── style.css
├── profile statistcs
├── index.html
├── script.js
└── style.css
├── random password generator
├── index.html
├── script.js
└── style.css
├── random photos
├── index.html
├── script.js
└── style.css
├── repple effect
├── index.html
├── script.js
└── style.css
├── slider
├── index.html
├── script.js
└── style.css
├── social media selector menu
├── index.html
├── script.js
└── style.css
├── stcky navbar
├── bg.jpg
├── index.html
├── logo.svg
├── script.js
└── style.css
├── step prgress bar
├── index.html
├── script.js
└── style.css
├── tab section
├── index.html
├── script.js
└── style.css
├── text effect
├── index.html
├── script.js
└── style.css
├── timer
├── bg.jpg
├── bg2.jpg
├── index.html
├── script.js
└── style.css
├── todolist
├── index.html
├── script.js
└── style.css
└── video trailer popup
├── img1.jpg
├── index.html
├── script.js
├── style.css
└── video.mp4
/README.md:
--------------------------------------------------------------------------------
1 | # basic-javascript-project
2 |
3 | Contains 25 basic javascript project.
4 |
--------------------------------------------------------------------------------
/js project/animated search bar/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Search Bar
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/js project/animated search bar/script.js:
--------------------------------------------------------------------------------
1 | const searchBarContainerEl= document.querySelector(".seacrh-bar-container");
2 | const magnifierEl= document.querySelector(".magnifier");
3 |
4 | magnifierEl.addEventListener("click", ()=> {
5 | searchBarContainerEl.classList.toggle("active");
6 | })
--------------------------------------------------------------------------------
/js project/animated search bar/style.css:
--------------------------------------------------------------------------------
1 | body{
2 | margin:0;
3 | display: flex;
4 | justify-content: center;
5 | align-items: center;
6 | height: 100vh;
7 | background-color: aliceblue;
8 |
9 | }
10 | .seacrh-bar-container{
11 | display: flex;
12 | align-items: center;
13 | background-color: aliceblue;
14 | padding: 5px;
15 | width: 300px;
16 | height: 50px;
17 | border-radius: 50px;
18 | box-shadow: 6px 6px 10px rgba(0,0,0,.2), -6px -6px 10px rgba(255,255,255,.7);
19 | margin: 10px;
20 | position: relative;
21 | transition: width 1.5s ;
22 |
23 | }
24 |
25 | .magnifier{
26 | width: 25px;
27 | cursor: pointer;
28 | position: absolute;
29 | left: 20px;
30 |
31 | }
32 | .mic-icon{
33 | width: 30px;
34 | cursor: pointer;
35 | position: absolute;
36 | right: 10px;
37 | transition: width .5s;
38 | transition-delay: .7s;
39 | }
40 | .input{
41 | background-color: transparent;
42 | border: none;
43 | outline: none;
44 | margin:10px 50px;
45 | width: 100%;
46 | color: rgb(100,100,100);
47 | font-size: 18px;
48 | transition: width .5s;
49 | transition-delay: .5s;
50 | }
51 | .seacrh-bar-container.active{
52 | width: 50px;
53 | }
54 | .active input{
55 | width: 0;
56 | }
57 | .active .mic-icon{
58 | width: 0;
59 | }
--------------------------------------------------------------------------------
/js project/blur background popup/bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ipekulfetkaylan/basic-javascript-project/2d1a12a310a409ab77f9251cbd775eba73fbdf46/js project/blur background popup/bg.jpg
--------------------------------------------------------------------------------
/js project/blur background popup/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Blur Popup
8 |
9 |
10 |
11 |
12 |
13 |
Welcome To Our Website
14 | Click to join
15 |
16 |
17 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/js project/blur background popup/script.js:
--------------------------------------------------------------------------------
1 | const containerEl= document.querySelector(".container");
2 | const btnEl= document.querySelector(".btn");
3 | const popupContainerEl= document.querySelector(".popup-container");
4 | const closeIconEl= document.querySelector(".close-icon");
5 |
6 | btnEl.addEventListener("click", ()=>{
7 | containerEl.classList.add("active");
8 | popupContainerEl.classList.remove("active");
9 | });
10 |
11 | closeIconEl.addEventListener("click", ()=>{
12 | popupContainerEl.classList.add("active");
13 | containerEl.classList.remove("active");
14 | })
--------------------------------------------------------------------------------
/js project/blur background popup/style.css:
--------------------------------------------------------------------------------
1 | body{
2 | margin:0;
3 | font-family:'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif
4 | }
5 | .container{
6 | display: flex;
7 | flex-direction: column;
8 | align-items: center;
9 | justify-content: center;
10 | height: 100vh;
11 | background-image: url(bg.jpg);
12 | background-size: cover;
13 | text-align: center;
14 | }
15 |
16 | h1{
17 | color: whitesmoke;
18 | font-size: 60px;
19 | letter-spacing: 4px;
20 | text-shadow: 2px 4px 4px rgba(0,0,0,.4);
21 | }
22 |
23 | .btn{
24 | border: none;
25 | border-radius: 5px;
26 | padding: 10px 20px;
27 | width: 200px;
28 | font-size: 18px;
29 | cursor: pointer;
30 | transition: .4s;
31 | }
32 | .btn:hover{
33 | filter: brightness(.8);
34 | }
35 | .active.container{
36 |
37 | filter: blur(5px) brightness(.7);
38 | }
39 | .popup-container{
40 | position: fixed;
41 | transform: translate(-50%);
42 | left: 50%;
43 | width: 400px;
44 | height: 200px;
45 | top: 30%;
46 | background-color: white;
47 | display: flex;
48 | flex-direction: column;
49 | padding: 20px;
50 | border-radius: 5px;
51 | box-shadow: 0 4px 8px rgba(0,0,0,.4);
52 | transition: all.7s;
53 | opacity: 1;
54 | }
55 |
56 | h4{
57 | font-size: 30px;
58 | margin: 10px 0;
59 | color: darkred;
60 | margin-bottom: 40px;
61 | text-align: center;
62 | }
63 |
64 | .popup-btn{
65 | background-color: orange;
66 | padding: 5px;
67 | border: none;
68 | font-size: 20px;
69 | margin-top: 10px;
70 | border-radius: 5px;
71 | cursor: pointer;
72 | }
73 | .input{
74 | outline: none;
75 | border: none;
76 | border-bottom: 2px solid orange;
77 | font-size: 20px;
78 | text-align: center;
79 | }
80 | .close-icon{
81 | position: absolute;
82 | right: 20px;
83 | cursor: pointer;
84 | }
85 | .active.popup-container{
86 | visibility: hidden;
87 | opacity: 0;
88 | top: 10%;
89 | }
90 |
91 | /* popup ın yukardan aşağı açılmasını sağlamak için hem opacity değişti hem de top: 10% verdik popupcontainer top: 30% du. */
--------------------------------------------------------------------------------
/js project/character counter/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Character Counter
8 |
9 |
10 |
11 |
12 |
Real-time Character Counter
13 |
14 |
15 |
Total characters:
16 |
Remaining:
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/js project/character counter/script.js:
--------------------------------------------------------------------------------
1 | const textareaEl= document.getElementById("textarea");
2 | const totalCounterEl= document.getElementById("total-counter");
3 | const remainingCounterEl= document.getElementById("remaining-counter");
4 |
5 | textareaEl.addEventListener("keyup", ()=>{
6 | updateCounter();
7 |
8 | })
9 |
10 | updateCounter();
11 |
12 | function updateCounter(){
13 | totalCounterEl.innerText = textareaEl.value.length;
14 | remainingCounterEl.innerText = textareaEl.getAttribute("maxlength") - textareaEl.value.length;
15 | }
--------------------------------------------------------------------------------
/js project/character counter/style.css:
--------------------------------------------------------------------------------
1 | body{
2 | margin:0;
3 | display: flex;
4 | justify-content: center;
5 | align-items: center;
6 | height: 100vh;
7 | font-family: sans-serif;
8 | background-color: orange;
9 | }
10 | .container{
11 | background-color: lavenderblush;
12 | width: 400px;
13 | padding: 25px;
14 | margin: 10px;
15 | border-radius: 5px;
16 | box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px;
17 | }
18 | .textarea{
19 | resize: none;
20 | width: 100%;
21 | height: 100%;
22 | font-size: 18px;
23 | font-family: sans-serif;
24 | padding: 10px;
25 | box-sizing: border-box;
26 | border: solid 2px darkgray;
27 | outline: none;
28 | }
29 |
30 | .counter-container{
31 | display: flex;
32 | justify-content: space-between;
33 | padding: 0 5px;
34 | }
35 | .counter-container p{
36 | font-size: 18px;
37 | color: gray;
38 | }
39 | .total-counter{
40 | color:royalblue;
41 | }
42 | .remaining-counter{
43 | color: orangered;
44 | }
--------------------------------------------------------------------------------
/js project/color generator/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Color Generator
8 |
9 |
10 |
11 | Random Color Generator
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/js project/color generator/script.js:
--------------------------------------------------------------------------------
1 | const containerEl= document.querySelector(".container");
2 |
3 | for (let index = 0; index < 30; index++){
4 | const colorContainerEl = document.createElement ("div");
5 |
6 | colorContainerEl.classList.add("color-container");
7 | containerEl.appendChild(colorContainerEl);
8 | }
9 | const colorContainerEls = document.querySelectorAll (".color-container");
10 |
11 |
12 | generateColors();
13 | function generateColors(){
14 | colorContainerEls.forEach((colorContainerEl)=> {
15 | const newColorCode= randomColor();
16 | colorContainerEl.style.backgroundColor = "#" + newColorCode;
17 | colorContainerEl.innerText = "#" + newColorCode;
18 | })
19 | }
20 |
21 |
22 | function randomColor(){
23 | const chars = "0123456789abscef"; //renk yaratan karakterler
24 | const colorCodeLenght = 6;
25 | let colorCode = "";
26 |
27 | for (let index = 0; index < colorCodeLenght; index++){
28 | const randomNum = Math.floor (Math.random() * chars.length);
29 | colorCode += chars.substring(randomNum, randomNum + 1);
30 | }
31 | return colorCode;
32 | }
--------------------------------------------------------------------------------
/js project/color generator/style.css:
--------------------------------------------------------------------------------
1 | body{
2 | margin:0;
3 | font-family: cursive;
4 | }
5 | h1{
6 | text-align: center;
7 | }
8 | .container{
9 | display: flex;
10 | flex-wrap: wrap;
11 | justify-content: center;
12 | }
13 | .color-container{
14 | background-color: rebeccapurple;
15 | width: 300px;
16 | height: 150px;
17 | color: white;
18 | margin: 5px;
19 | display: flex;
20 | justify-content: center;
21 | align-items: center ;
22 | font-size: 25px;
23 | text-shadow: 2px 2px 4px rgba(0,0,0,.5);
24 | border: solid black 2px ;
25 | border-radius: 10px;
26 | }
--------------------------------------------------------------------------------
/js project/dark mode toggle/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Dark Mode
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/js project/dark mode toggle/script.js:
--------------------------------------------------------------------------------
1 | const inputEl= document.querySelector(".input");
2 | const bodyEl= document.querySelector("body");
3 |
4 |
5 |
6 | inputEl.checked = JSON.parse(localStorage.getItem("mode"));
7 |
8 |
9 | updateBody();
10 | function updateBody(){
11 | if(inputEl.checked){
12 | bodyEl.style.background= "black";
13 |
14 | }else{
15 | bodyEl.style.background= "white";
16 | }
17 | }
18 |
19 | inputEl.addEventListener("input", ()=>{
20 | updateBody();
21 | updaLocalStorage();
22 | })
23 |
24 | function updaLocalStorage(){
25 | localStorage.setItem("mode", JSON.stringify(inputEl.checked));
26 | }
--------------------------------------------------------------------------------
/js project/dark mode toggle/style.css:
--------------------------------------------------------------------------------
1 | body{
2 | margin:0;
3 | display: flex;
4 | align-items: center;
5 | justify-content: center;
6 | height: 100vh;
7 | transition: .4s;
8 | }
9 |
10 | .input{
11 | visibility: hidden;
12 | }
13 |
14 | .label{
15 | position: absolute;
16 | width: 80px;
17 | height: 40px;
18 | background-color: lightgray;
19 | border-radius: 20px;
20 | cursor: pointer;
21 |
22 |
23 | }
24 |
25 | .circle{
26 | width: 34px;
27 | background-color: whitesmoke;
28 | height: 34px;
29 | border-radius: 50%;
30 | top: 3px;
31 | position: absolute;
32 | left:3px;
33 | animation: toggleOff .4s linear forwards
34 | }
35 |
36 | .input:checked + .label{
37 | background-color: white;
38 | }
39 | .input:checked + .label .circle{
40 | animation: toggleOn .4s linear forwards ;
41 | background-color: black;
42 | }
43 | @keyframes toggleOn {
44 | 0%{
45 | transform: translateX(0);
46 | }
47 | 100%{
48 | transform: translateX(40px);
49 | }
50 | }
--------------------------------------------------------------------------------
/js project/digital clock/bg2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ipekulfetkaylan/basic-javascript-project/2d1a12a310a409ab77f9251cbd775eba73fbdf46/js project/digital clock/bg2.jpg
--------------------------------------------------------------------------------
/js project/digital clock/bg3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ipekulfetkaylan/basic-javascript-project/2d1a12a310a409ab77f9251cbd775eba73fbdf46/js project/digital clock/bg3.jpg
--------------------------------------------------------------------------------
/js project/digital clock/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Clock
8 |
9 |
10 |
11 |
12 | Digital Clock
13 |
14 |
15 | 00
16 | Hours
17 |
18 |
19 | 00
20 | Minute
21 |
22 |
23 | 00
24 | Second
25 |
26 |
27 | AM
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/js project/digital clock/script.js:
--------------------------------------------------------------------------------
1 | const hourEl= document.getElementById("hour");
2 | const mınuteEl= document.getElementById("minute");
3 | const secondEl= document.getElementById("second");
4 | const ampmEl= document.getElementById("ampm");
5 | const bodyEl= document.getElementById("body");
6 |
7 | function updateClock(){
8 | let h= new Date().getHours();
9 | let m= new Date().getMinutes();
10 | let s= new Date().getSeconds();
11 | let ampm= "AM"
12 |
13 | if(h > 12){
14 | h= h-12
15 | ampm= "PM"
16 | bodyEl.style.backgroundImage = "url(bg3.jpg)";
17 | }
18 |
19 | h= h< 10 ? "0" + h: h; //digital saate 0 ekliyor
20 | m= m< 10 ? "0" + m: m;
21 | s= s< 10 ? "0" + s: s;
22 |
23 |
24 | hourEl.innerText= h;
25 | mınuteEl.innerText= m;
26 | secondEl.innerText= s;
27 | ampmEl.innerText= ampm;
28 |
29 | setTimeout(()=>{
30 |
31 | updateClock()
32 | },1000)
33 | }
34 |
35 | updateClock();
--------------------------------------------------------------------------------
/js project/digital clock/style.css:
--------------------------------------------------------------------------------
1 | body{
2 | margin:0;
3 | display: flex;
4 | align-items: center;
5 | justify-content: center;
6 | flex-direction: column;
7 | height: 100vh;
8 | background-image: url(bg.jpg);
9 | background-size: cover;
10 | font-family: sans-serif;
11 | overflow: hidden;
12 | }
13 | h2{
14 | text-transform: uppercase;
15 | letter-spacing: 4px;
16 | font-size: 14px;
17 | text-align: center;
18 | color: white;
19 | }
20 | .clock{
21 | display: flex;
22 | }
23 | .clock div{
24 | margin: 5px;
25 | position: relative;
26 | }
27 | .clock span{
28 | width: 100px;
29 | height: 80px;
30 |
31 | backdrop-filter: brightness(.7);
32 | color: white;
33 | display: flex;
34 | justify-content: center;
35 | align-items: center;
36 | font-size: 50px;
37 | text-shadow: 2px 2px 4px rgba(0,0,0,.4);
38 | }
39 | .clock .text{
40 | height: 30px;
41 | font-size: 10px;
42 | text-transform: uppercase;
43 | letter-spacing: 2px;
44 | background-color: darkblue;
45 | opacity: .6;
46 | }
47 | .clock #ampm{
48 | bottom:0;
49 | position: absolute;
50 | width: 60px;
51 | height: 30px;
52 | font-size: 20px;
53 | background: darkred;
54 | }
55 |
--------------------------------------------------------------------------------
/js project/emoji/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Emoji Rates
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/js project/emoji/script.js:
--------------------------------------------------------------------------------
1 | const starEl= document.querySelectorAll(".fa-star");
2 | const emojiEl= document.querySelectorAll(".fa-regular");
3 | const colorsArray= ["red", "orange", "lightblue", "lightgreen", "green"];
4 |
5 | updateRating(0);
6 |
7 |
8 | starEl.forEach((starEl, index)=>{
9 | starEl.addEventListener("click", ()=>{
10 | updateRating(index)
11 | });
12 | })
13 |
14 | function updateRating(index){
15 | starEl.forEach((starEl, idx)=>{
16 | if(idx < index +1){
17 | starEl.classList.add("active");
18 | }else{
19 | starEl.classList.remove("active");
20 | }
21 | });
22 |
23 | emojiEl.forEach(emojiEl=>{
24 | emojiEl.style.transform= `translateX(-${index* 50}px)`;
25 | emojiEl.style.color= colorsArray[index];
26 | })
27 | }
28 |
--------------------------------------------------------------------------------
/js project/emoji/style.css:
--------------------------------------------------------------------------------
1 | body{
2 | margin:0;
3 | display: flex;
4 | justify-content: center;
5 | height: 100vh;
6 | align-items: center;
7 | background-color: orangered;
8 |
9 | }
10 | .feedback-container{
11 | background-color: whitesmoke;
12 | width: 400px;
13 | height: 200px;
14 | box-shadow: 0 4px 8px rgba(0,0,0,.5);
15 | border-radius: 10px;
16 | position: relative;
17 | }
18 | .emoji-container{
19 | position: absolute;
20 | left:50%;
21 | top:20%;
22 | transform: translate(-50%);
23 | width: 50px;
24 | height: 50px;
25 | border-radius: 50%;
26 | display: flex;
27 | overflow: hidden;
28 | }
29 | .fa-regular{
30 | margin:1px;
31 | transform: translateX(0);
32 | transition: transform 0.2s;
33 | }
34 | .rating-container{
35 | position: absolute;
36 | left:50%;
37 | transform: translateX(-50%);
38 | bottom: 20%;
39 | }
40 | .fa-star{
41 | color:lightgray;
42 | cursor: pointer;
43 |
44 | }
45 | .fa-star.active{
46 | color: gold;
47 | }
--------------------------------------------------------------------------------
/js project/heart trail animation/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Heart Animation
8 |
9 |
10 |
11 |
12 | please move mouse
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/js project/heart trail animation/script.js:
--------------------------------------------------------------------------------
1 | const bodyEl= document.querySelector("body");
2 |
3 | bodyEl.addEventListener("mousemove", (event)=>{
4 | const xPos = event.offsetX
5 | const yPos = event.offsetY
6 | const spanEl= document.createElement("span");
7 | spanEl.style.left = xPos + "px";
8 | spanEl.style.top = yPos + "px";
9 | const size= Math.random() * 100;
10 | spanEl.style.width= size + "px";
11 | spanEl.style.height= size + "px";
12 | bodyEl.appendChild(spanEl);
13 |
14 | setTimeout(()=>{
15 | spanEl.remove()
16 | },3000)
17 | })
18 |
19 |
--------------------------------------------------------------------------------
/js project/heart trail animation/style.css:
--------------------------------------------------------------------------------
1 | body{
2 | margin:0;
3 | height: 100vh;
4 | background-color: black;
5 | overflow: hidden;
6 | }
7 |
8 | h1{
9 | color:whitesmoke;
10 | font-family: cursive;
11 | text-transform: capitalize;
12 | text-align: center;
13 | padding-top: 100px;
14 | letter-spacing: 3px;
15 | font-size: 50px;
16 | }
17 | span{
18 | background: url("https://cdn4.iconfinder.com/data/icons/essentials-74/24/028_-_Heart-256.png") ;
19 | width: 100px;
20 | height: 100px;
21 | position: absolute;
22 | background-size: cover;
23 | left: 50%;
24 | top: 50%;
25 | transform: translate(-50%, -50%);
26 | pointer-events: none;
27 | animation: animate 6s linear;
28 | }
29 |
30 | @keyframes animate{
31 | 0%{
32 | transform: translate(-50%, -50%);
33 | opacity: 1;
34 | filter: hue-rotate(0);
35 | }
36 | 100%{
37 | transform: translate(-50%, -5000%);
38 | opacity: 0;
39 | filter: hue-rotate(655deg);
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/js project/image scroll effect/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | İmage Scroll Effect
8 |
9 |
10 |
11 |
12 |
13 |
Welcome To Our Website
14 |
15 |
Lorem ipsum dolor sit amet consectetur adipisicing elit. At nihil est quasi laudantium aspernatur vitae quo, sed ducimus dolore error ad vel ipsa dignissimos architecto laborum, illo temporibus necessitatibus eum et explicabo. Eveniet, voluptates consequuntur accusantium dolorum obcaecati repellendus et dicta sed inventore, odio, architecto itaque! Velit, doloremque? Harum magni deserunt incidunt molestias minus error ipsam vel ab omnis iste non quibusdam quia maxime neque reprehenderit praesentium eligendi, suscipit officiis! Voluptates ut provident cum! Reprehenderit iste, necessitatibus laborum alias deserunt aspernatur! Magni corrupti iusto eligendi id recusandae, veritatis maiores dolore rerum minus, inventore consequatur quaerat voluptate repudiandae. Vitae, porro nostrum!
16 |
Lorem ipsum dolor sit amet consectetur adipisicing elit. At nihil est quasi laudantium aspernatur vitae quo, sed ducimus dolore error ad vel ipsa dignissimos architecto laborum, illo temporibus necessitatibus eum et explicabo. Eveniet, voluptates consequuntur accusantium dolorum obcaecati repellendus et dicta sed inventore, odio, architecto itaque! Velit, doloremque? Harum magni deserunt incidunt molestias minus error ipsam vel ab omnis iste non quibusdam quia maxime neque reprehenderit praesentium eligendi, suscipit officiis! Voluptates ut provident cum! Reprehenderit iste, necessitatibus laborum alias deserunt aspernatur! Magni corrupti iusto eligendi id recusandae, veritatis maiores dolore rerum minus, inventore consequatur quaerat voluptate repudiandae. Vitae, porro nostrum!
17 |
Lorem ipsum dolor sit amet consectetur adipisicing elit. At nihil est quasi laudantium aspernatur vitae quo, sed ducimus dolore error ad vel ipsa dignissimos architecto laborum, illo temporibus necessitatibus eum et explicabo. Eveniet, voluptates consequuntur accusantium dolorum obcaecati repellendus et dicta sed inventore, odio, architecto itaque! Velit, doloremque? Harum magni deserunt incidunt molestias minus error ipsam vel ab omnis iste non quibusdam quia maxime neque reprehenderit praesentium eligendi, suscipit officiis! Voluptates ut provident cum! Reprehenderit iste, necessitatibus laborum alias deserunt aspernatur! Magni corrupti iusto eligendi id recusandae, veritatis maiores dolore rerum minus, inventore consequatur quaerat voluptate repudiandae. Vitae, porro nostrum!
18 |
Lorem ipsum dolor sit amet consectetur adipisicing elit. At nihil est quasi laudantium aspernatur vitae quo, sed ducimus dolore error ad vel ipsa dignissimos architecto laborum, illo temporibus necessitatibus eum et explicabo. Eveniet, voluptates consequuntur accusantium dolorum obcaecati repellendus et dicta sed inventore, odio, architecto itaque! Velit, doloremque? Harum magni deserunt incidunt molestias minus error ipsam vel ab omnis iste non quibusdam quia maxime neque reprehenderit praesentium eligendi, suscipit officiis! Voluptates ut provident cum! Reprehenderit iste, necessitatibus laborum alias deserunt aspernatur! Magni corrupti iusto eligendi id recusandae, veritatis maiores dolore rerum minus, inventore consequatur quaerat voluptate repudiandae. Vitae, porro nostrum!
19 |
Lorem ipsum dolor sit amet consectetur adipisicing elit. At nihil est quasi laudantium aspernatur vitae quo, sed ducimus dolore error ad vel ipsa dignissimos architecto laborum, illo temporibus necessitatibus eum et explicabo. Eveniet, voluptates consequuntur accusantium dolorum obcaecati repellendus et dicta sed inventore, odio, architecto itaque! Velit, doloremque? Harum magni deserunt incidunt molestias minus error ipsam vel ab omnis iste non quibusdam quia maxime neque reprehenderit praesentium eligendi, suscipit officiis! Voluptates ut provident cum! Reprehenderit iste, necessitatibus laborum alias deserunt aspernatur! Magni corrupti iusto eligendi id recusandae, veritatis maiores dolore rerum minus, inventore consequatur quaerat voluptate repudiandae. Vitae, porro nostrum!
20 |
Lorem ipsum dolor sit amet consectetur adipisicing elit. At nihil est quasi laudantium aspernatur vitae quo, sed ducimus dolore error ad vel ipsa dignissimos architecto laborum, illo temporibus necessitatibus eum et explicabo. Eveniet, voluptates consequuntur accusantium dolorum obcaecati repellendus et dicta sed inventore, odio, architecto itaque! Velit, doloremque? Harum magni deserunt incidunt molestias minus error ipsam vel ab omnis iste non quibusdam quia maxime neque reprehenderit praesentium eligendi, suscipit officiis! Voluptates ut provident cum! Reprehenderit iste, necessitatibus laborum alias deserunt aspernatur! Magni corrupti iusto eligendi id recusandae, veritatis maiores dolore rerum minus, inventore consequatur quaerat voluptate repudiandae. Vitae, porro nostrum!
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/js project/image scroll effect/script.js:
--------------------------------------------------------------------------------
1 | const bgImageEl= document.getElementById("bg-image");
2 |
3 | window.addEventListener("scroll", ()=>{
4 | updateImage();
5 | });
6 |
7 | function updateImage(){
8 | bgImageEl.style.opacity = 1- window.pageYOffset / 1000;
9 | bgImageEl.style.backgroundSize= 160 - window.pageYOffset / 12 + "%" ;
10 | }
--------------------------------------------------------------------------------
/js project/image scroll effect/style.css:
--------------------------------------------------------------------------------
1 | body{
2 | margin:0;
3 | font-family: sans-serif;
4 | }
5 | .bg-image{
6 | height: 100vh;
7 | width: 100%;
8 | background: url("https://images.pexels.com/photos/3225517/pexels-photo-3225517.jpeg?auto=compress&cs=tinysrgb&w=600");
9 | background-size: 160%;
10 | background-repeat: no-repeat;
11 | background-attachment: fixed;
12 | background-position: center;
13 |
14 | }
15 | .container{
16 | padding: 50px;
17 | }
18 | h1{
19 | font-size: 50px;
20 |
21 | }
22 | p{
23 | color: gray;
24 | }
25 | @media (max-width: 500px) {
26 | .container{
27 | padding: 10px;
28 | }
29 | }
--------------------------------------------------------------------------------
/js project/landing page/apple.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ipekulfetkaylan/basic-javascript-project/2d1a12a310a409ab77f9251cbd775eba73fbdf46/js project/landing page/apple.jpg
--------------------------------------------------------------------------------
/js project/landing page/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Landing Page
8 |
9 |
10 |
11 |
12 |
13 |
Apple
14 | Buy Now
15 |
16 |
17 |
Samsung
18 | Buy Now
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/js project/landing page/samsung.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ipekulfetkaylan/basic-javascript-project/2d1a12a310a409ab77f9251cbd775eba73fbdf46/js project/landing page/samsung.jpg
--------------------------------------------------------------------------------
/js project/landing page/script.js:
--------------------------------------------------------------------------------
1 | const containerEl= document.querySelector(".container");
2 | const leftEl= document.querySelector(".left");
3 | const rightEl= document.querySelector(".right");
4 |
5 | leftEl.addEventListener("mouseenter", ()=>{
6 | containerEl.classList.add("active-left");
7 |
8 | });
9 | leftEl.addEventListener("mouseleave", ()=>{
10 | containerEl.classList.remove("active-left");
11 | });
12 | rightEl.addEventListener("mouseenter",()=>{
13 | containerEl.classList.add("active-right");
14 | });
15 | rightEl.addEventListener("mouseleave", ()=>{
16 | containerEl.classList.remove("active-right");
17 | });
18 |
--------------------------------------------------------------------------------
/js project/landing page/style.css:
--------------------------------------------------------------------------------
1 | body{
2 | margin:0;
3 | display: flex;
4 | justify-content: center;
5 | align-items: center;
6 | height: 100vh;
7 | text-align: center;
8 | font-family:'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif;
9 | }
10 | h1{
11 | font-size: 80px;
12 | color: white;
13 | backdrop-filter: brightness(.5);
14 | letter-spacing: 4px;
15 | }
16 | .split{
17 | width: 50%;
18 | height: 100%;
19 | top:0;
20 | white-space: nowrap;
21 | }
22 | .split.left{
23 | position: absolute;
24 | left:0;
25 | background-color: pink;
26 | background-image: url("https://store.storeimages.cdn-apple.com/4982/as-images.apple.com/is/iphone-13-finish-select-202207-6-1inch-midnight?wid=2560&hei=1440&fmt=jpeg&qlt=95&.v=1656712887881");
27 | background-size: cover;
28 | background-position: center;
29 | }
30 | .split.right{
31 | position: absolute;
32 | right: 0;
33 | background-color: lightskyblue;
34 | background-image: url("https://images.samsung.com/is/image/samsung/p6pim/my/2202/gallery/my-galaxy-a53-5g-a536-sm-a536ezkhxme-531434787?$650_519_PNG$");
35 | background-size:cover ;
36 | background-position: center;
37 |
38 | }
39 | .active-left .left{
40 | width: 75%;
41 | }
42 | .active-left .right{
43 | width: 25%;
44 | }
45 | .active-right .left{
46 | width: 25%;
47 | }
48 | .active-right .right{
49 | width: 75%;
50 | }
51 | .left , .right{
52 | transition: width 2s ease-in-out;
53 | }
54 | .btn{
55 | background-color: black;
56 | color: white;
57 | padding: 15px 30px;
58 | font-size: 25px;
59 | border: 4px solid;
60 | cursor: pointer;
61 | transition: background-color .7s;
62 | }
63 | .btn:hover{
64 | background-color: white;
65 | color:black;
66 | }
--------------------------------------------------------------------------------
/js project/month calender/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Month Calender
8 |
9 |
10 |
11 |
12 |
13 |
14 |
20 |
21 |
Mon
22 |
Tue
23 |
Wed
24 |
Thu
25 |
Fri
26 |
Sat
27 |
Sun
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/js project/month calender/script.js:
--------------------------------------------------------------------------------
1 |
2 | const monthsEl= document.querySelector(".date h1");
3 | const fullDateEl= document.querySelector(".date p");
4 | const daysEl= document.querySelector(".days");
5 |
6 | const monthsIndex= new Date().getMonth();
7 | const lastDay= new Date(new Date().getFullYear(), monthsIndex + 1,0).getDate();
8 | const firstDay= new Date(new Date().getFullYear(), monthsIndex,1).getDay() -1;
9 |
10 |
11 | const months = [
12 | "January",
13 | "Fabruary",
14 | "March",
15 | "April",
16 | "May",
17 | "June",
18 | "July",
19 | "Agust",
20 | "September",
21 | "October",
22 | "November",
23 | "December"
24 | ]
25 | monthsEl.innerText= months[monthsIndex];
26 | fullDateEl.innerText= new Date().toDateString();
27 |
28 |
29 | let days= "";
30 |
31 | for(let i= firstDay; i > 0; i++){
32 | days += `
`;
33 | }
34 |
35 | for(let i= 1; i <= lastDay; i++ ){
36 | if(i === new Date().getDate()){
37 | days += `${i}
`;
38 | }else{
39 | days += `${i}
`;
40 | }
41 |
42 | }
43 | daysEl.innerHTML= days;
44 |
45 |
--------------------------------------------------------------------------------
/js project/month calender/style.css:
--------------------------------------------------------------------------------
1 | *{
2 | margin:0;
3 | padding:0;
4 | font-family: sans-serif;
5 | box-sizing: border-box;
6 | }
7 | .container{
8 | width: 100%;
9 | height: 100vh;
10 | display: flex;
11 | align-items: center;
12 | justify-content: center;
13 | background-color: cornsilk;
14 | }
15 | .calender{
16 | background-color:whitesmoke ;
17 | width: 450px;
18 | height: 520px;
19 | box-shadow: 2px 2px 4px rgba(0,0,0,.3);
20 | border-radius: 25px;
21 | }
22 | .month{
23 | width: 100%;
24 | height: 120px;
25 | background-color:#EF4B4B ;
26 | display: flex;
27 | align-items: center;
28 | justify-content: center;
29 | text-align: center;
30 | border-radius: 25px 25px 0 0;
31 | color: whitesmoke;
32 | }
33 | .month h1{
34 | font-size: 30px;
35 | font-weight: 400;
36 | text-transform: uppercase;
37 | }
38 | .month p{
39 | font-size: 14px;
40 | margin-top: 5px;
41 | }
42 | .weekdays{
43 | display: flex;
44 | margin: 5px;
45 | width: 100%;
46 | height: 50px;
47 | }
48 | .weekdays div{
49 | font-size: 15px;
50 | font-weight: bold;
51 | letter-spacing: 1px;
52 | width: 100%;
53 | display: flex;
54 | align-items: center;
55 | justify-content: center;
56 | }
57 | .days{
58 | width: 100%;
59 | display: flex;
60 | flex-wrap: wrap;
61 | padding: 2px;
62 |
63 | }
64 | .days div{
65 | font-size: 14px;
66 | margin:3px;
67 | width: 57.5px;
68 | height: 60px;
69 | display: flex;
70 | justify-content: center;
71 | align-items: center;
72 | }
73 | .days div:hover:not(.empty){
74 | border: 1px solid #000;
75 | cursor: pointer;
76 |
77 | }
78 | .today{
79 | background-color: #EF4B4B;
80 | }
81 |
--------------------------------------------------------------------------------
/js project/multiplication app/bg2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ipekulfetkaylan/basic-javascript-project/2d1a12a310a409ab77f9251cbd775eba73fbdf46/js project/multiplication app/bg2.jpg
--------------------------------------------------------------------------------
/js project/multiplication app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Multiplication App
8 |
9 |
10 |
11 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/js project/multiplication app/script.js:
--------------------------------------------------------------------------------
1 | const num1= Math.ceil (Math.random() *10);
2 | const num2= Math.ceil(Math.random() *10);
3 |
4 | const questionEl= document.getElementById("question");
5 | const formEl= document.getElementById("form");
6 | const inputEl= document.getElementById("input");
7 | const scoreEl= document.getElementById("score");
8 |
9 | let score = JSON.parse(localStorage.getItem("score"));
10 |
11 | if(!score){
12 | score = 0;
13 | }
14 | scoreEl.innerText= `score: ${score}`;
15 | questionEl.innerText= ` What is ${num1} multiplay by ${num2}?`
16 |
17 | const correcAns= num1 * num2;
18 |
19 |
20 | formEl.addEventListener("submit", ()=>{
21 |
22 | const userAns= +inputEl.value;//+ bir stringi sayıya dönüştürüyor
23 |
24 |
25 | if(userAns=== correcAns){
26 | score++
27 | updateLocalStorage();
28 | }else{
29 | score--
30 | updateLocalStorage();
31 | }
32 |
33 | });
34 |
35 | function updateLocalStorage(){
36 | localStorage.setItem("score",JSON.stringify (score));
37 | }
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/js project/multiplication app/style.css:
--------------------------------------------------------------------------------
1 | *{
2 | font-family: cursive;
3 | }
4 | body{
5 | margin:0;
6 | display: flex;
7 | justify-content: center;
8 | align-items: center;
9 | height: 100vh;
10 | text-align: center;
11 | background: url(bg2.jpg);
12 | background-size: cover;
13 | background-position: bottom;
14 | overflow: hidden;
15 |
16 | }
17 | .form{
18 | background-color: antiquewhite;
19 | padding: 30px;
20 | box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;
21 | border-radius: 5px;
22 | margin: 10px;
23 | }
24 | .input{
25 | box-sizing: border-box;
26 | display: flex;
27 | width: 100% ;
28 | font-size: 30px;
29 | padding: 8px;
30 | text-align: center;
31 | background-color: transparent;
32 | outline: none;
33 | border: none;
34 | border-bottom: 3px solid tomato;
35 | border-radius: 2px;
36 | }
37 | .input::placeholder{
38 | color: #CFD2CF;
39 | }
40 | .btn{
41 | background-color: #FF9F29;
42 | color: whitesmoke;
43 | border: none;
44 | padding: 10px 40px ;
45 | font-size: 20px;
46 | margin-top: 5px;
47 | border-radius: 5px;
48 | box-shadow: rgba(0, 0, 0, 0.35) 0px 2px 3px;
49 | cursor: pointer;
50 | }
51 | .btn:hover{
52 | transform: scale(.90);
53 | }
54 |
55 | .score{
56 | color: #FF9F29;
57 | text-align: right;
58 | font-size: 20px;
59 | }
--------------------------------------------------------------------------------
/js project/profile statistcs/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Profile Statistics
9 |
10 |
11 |
12 |
13 |
14 |
20
15 |
Years Exprience
16 |
17 |
18 |
19 |
20 |
280
21 |
Websites Made
22 |
23 |
24 |
25 |
26 |
50
27 |
Apps Made
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/js project/profile statistcs/script.js:
--------------------------------------------------------------------------------
1 | const countersEl= document.querySelectorAll(".counter");
2 |
3 | countersEl.forEach((counterEl) => {
4 | counterEl.innerText= "0";
5 |
6 | incrementCounter()
7 | function incrementCounter(){
8 | let currentNum = +counterEl.innerText
9 | const dataCeil= counterEl.getAttribute("data-ceil");
10 |
11 | const increment= dataCeil/ 15
12 | currentNum += Math.ceil (increment);
13 |
14 |
15 | if(currentNum < dataCeil){
16 | setTimeout(incrementCounter, 50)
17 | counterEl.innerText= currentNum
18 | }
19 | else{
20 | counterEl.innerText= dataCeil
21 | }
22 |
23 | }
24 | });
25 |
--------------------------------------------------------------------------------
/js project/profile statistcs/style.css:
--------------------------------------------------------------------------------
1 | body{
2 | margin:0;
3 | display: flex;
4 | height: 100vh;
5 | align-items: center;
6 | justify-content: center;
7 | text-align: center;
8 | background-color: orange;
9 | font-family: cursive;
10 | }
11 | .stats-container{
12 | margin:20px;
13 | border: dotted green;
14 | min-width: 200px;
15 | height: 100px;
16 | position: relative;
17 | padding: 20px;
18 | }
19 | .stats-container h4{
20 | position: absolute;
21 | bottom:1px;
22 | left: 50%;
23 | transform: translateX(-50%);
24 | white-space: nowrap;
25 | }
26 | .icon{
27 | position: absolute;
28 | top:-30px;
29 | left: 50%;;
30 | transform: translateX(-50%);
31 | }
32 | .counter{
33 | font-size: 50px;
34 | position: absolute;
35 | left: 50%;
36 | transform: translateX(-50%);
37 | color: green;
38 |
39 |
40 | }
41 |
42 |
43 | @media (max-width: 500px) {
44 | body{
45 | flex-direction: column;
46 | }
47 | }
--------------------------------------------------------------------------------
/js project/random password generator/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Random Password Generator
8 |
9 |
10 |
11 |
12 |
13 |
Random Password Generator
14 |
15 |
16 |
17 |
18 |
Generate
19 |
20 |
21 |
22 | Password Copied
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/js project/random password generator/script.js:
--------------------------------------------------------------------------------
1 | const btnEl= document.querySelector(".btn");
2 | const inputEl= document.getElementById("input");
3 | const copyIconEl= document.querySelector(".fa-copy");
4 | const alertContainerEl= document.querySelector(".alert-container")
5 |
6 | btnEl.addEventListener("click",()=>{
7 | createPassword()
8 | });
9 |
10 | copyIconEl.addEventListener("click", ()=>{
11 | copyPassword();
12 | if(inputEl.value){
13 | alertContainerEl.classList.remove("active");
14 | setTimeout(()=>{
15 | alertContainerEl.classList.add("active");
16 |
17 | },2000);
18 | }
19 |
20 |
21 | });
22 |
23 |
24 | function createPassword(){
25 | const chars="0123456789abcdefghijklmnoprstuwxvyz!@$%#*|^_?:{}^#ABCDEFGHIJKLMNOPRSTUWXVYZ"
26 | const passwordLenght= 14;
27 | let password="";
28 | for( let index=0; index < passwordLenght; index++){
29 | const randomNum= Math.floor (Math.random()* chars.length);
30 | password += chars.substring(randomNum, randomNum+ 1);//substring başlangıç ve bitiş parametresi alır ve parametre aralığındaki değerleri seçer
31 | }
32 | inputEl.value= password;
33 | alertContainerEl.innerText= password + " "+ "copied!"
34 |
35 | }
36 |
37 | function copyPassword(){
38 |
39 | inputEl.select();//input içindeki kopyalanacak değeri seçen kod
40 | inputEl.setSelectionRange(0,9999); //sadece mobil için onun dışında kullanmaya gerek yok.
41 | navigator.clipboard.writeText(inputEl.value);//input.value değerini panoya yazan kod
42 |
43 | }
44 |
45 |
46 |
--------------------------------------------------------------------------------
/js project/random password generator/style.css:
--------------------------------------------------------------------------------
1 | body{
2 | display: flex;
3 | justify-content: center;
4 | align-items: center;
5 | height: 100vh;
6 | margin:0;
7 | font-family:'Courier New', Courier, monospace;
8 | }
9 |
10 | .password-container{
11 | background-color: #FFE5B4;
12 | width: 500px;
13 | padding:20px;
14 | border-radius: 10px;
15 | box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px;
16 | margin: 10px;
17 | }
18 |
19 | .input-container{
20 | border: solid 2px black;
21 | padding: 10px;
22 | border-radius: 10px;
23 | display: flex;
24 | justify-content: space-between;
25 | align-items: center;
26 |
27 | }
28 |
29 | .input{
30 | border: none;
31 | background-color: transparent;
32 | outline: none;
33 | font-size: 24px;
34 | letter-spacing: 4px;
35 | }
36 | .input::placeholder{
37 | letter-spacing:0;
38 | font-size: 18px;
39 | }
40 | .fa-copy{
41 | cursor: pointer;
42 | opacity: .3;
43 | }
44 | .fa-copy:hover{
45 | opacity: .7;
46 | }
47 | .btn{
48 | background-color: black;
49 | color: whitesmoke;
50 | border: none;
51 | padding: 10px 10px;
52 | border-radius: 8px;
53 | margin:10px 0;
54 | font-size: 20px;
55 | }
56 | .btn:hover{
57 | cursor: pointer;
58 | background-color: #5FD068;
59 | color: black;
60 | }
61 | .btn:active{
62 | transform: scale(0.95);
63 | }
64 | .alert-container{
65 | position: fixed;
66 | width: 300px;
67 | height: 50px;
68 | background-color: #5FD068;
69 | right: 20px;
70 | bottom: 20px;
71 | border-radius: 10px;
72 | box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px;
73 | display: flex;
74 | justify-content: center;
75 | align-items: center;
76 | font-size: 20px;
77 | transition: .5s;
78 |
79 | }
80 |
81 | .alert-container.active{
82 | right: -300px;
83 |
84 | }
--------------------------------------------------------------------------------
/js project/random photos/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Random Photo
8 |
9 |
10 |
11 | Random Photo Gallery
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | Load More
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/js project/random photos/script.js:
--------------------------------------------------------------------------------
1 | const containerImageEl= document.querySelector(".image-container");
2 | const btnEl= document.querySelector(".btn");
3 |
4 | btnEl.addEventListener("click", ()=>{
5 | imageNum= 10;
6 | addNewImages();
7 | });
8 |
9 | function addNewImages(){
10 | for( let index= 0; index < imageNum; index++ ){
11 | const newImgEl= document.createElement("img");
12 | newImgEl.src = `https://picsum.photos/300/300?random=${Math.floor (Math.random() * 2000)}`;
13 |
14 | containerImageEl.appendChild(newImgEl); //foknsiyonu döngü içine almazsan sadece bir photo ekler.
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/js project/random photos/style.css:
--------------------------------------------------------------------------------
1 | body{
2 | margin:0;
3 | display: flex;
4 | flex-direction: column;
5 | align-items: center;
6 | background-color: lemonchiffon;
7 |
8 | }
9 | h1{
10 | font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;
11 | font-size: 40px;
12 | }
13 | .image-container{
14 | text-align: center;
15 | padding-top: 50px;
16 | }
17 | img{
18 | margin:10px;
19 | border-radius: 10px;
20 | box-shadow: 2px 4px 4px rgba(0,0,0,.4);
21 | background-color: aliceblue;
22 | width: 300px;
23 | height: 300px;
24 | }
25 | .btn{
26 | background-color: teal;
27 | border: none;
28 | outline: none;
29 | font-size: 20px;
30 | padding: 10px 25px;
31 | margin:25px;
32 | border-radius: 10px;
33 | color: aliceblue;
34 | box-shadow: 2px 2px 5px rgba(0,0,0,.4);
35 | cursor: pointer;
36 | }
37 | .btn:hover{
38 | opacity: .8;
39 | }
--------------------------------------------------------------------------------
/js project/repple effect/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Button Effect
8 |
9 |
10 |
11 | Button
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/js project/repple effect/script.js:
--------------------------------------------------------------------------------
1 | const btnEl= document.querySelector(".btn");
2 |
3 | btnEl.addEventListener("mouseover", (event)=>{
4 | const x = (event.pageX - btnEl.offsetLeft);
5 | const y = (event.pageY - btnEl.offsetTop);
6 |
7 | btnEl.style.setProperty("--xPos", x +"px");
8 | btnEl.style.setProperty("--yPos", y +"px");
9 |
10 | });
11 |
--------------------------------------------------------------------------------
/js project/repple effect/style.css:
--------------------------------------------------------------------------------
1 | body{
2 | margin:0;
3 | display: flex;
4 | justify-content: center;
5 | align-items: center;
6 | height: 100vh;
7 | background-color: aliceblue;
8 | font-family: sans-serif;
9 | }
10 |
11 | .btn{
12 | background-color: lightcoral;
13 | padding:20px 40px;
14 | color: black;
15 | border-radius: 5px;
16 | box-shadow: 0 4px 8px rgba(0,0,0,.3);
17 | text-decoration: none;
18 | font-size: 20px;
19 | position: relative;
20 | overflow: hidden;
21 | }
22 | .btn span{
23 | position: relative;
24 | z-index: 1;
25 | }
26 | .btn::before{
27 | content: "";
28 | position: absolute;
29 | background-color: antiquewhite;
30 | height: 0;
31 | width: 0;
32 | left:var(--xPos);
33 | top: var(--yPos);
34 | transform: translate(-50%, -50%);
35 | border-radius: 50%;
36 | transition: width .5s, height .5s;
37 | }
38 | .btn:hover::before{
39 | width: 300px;
40 | height: 300px;
41 | }
--------------------------------------------------------------------------------
/js project/slider/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Slider
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/js project/slider/script.js:
--------------------------------------------------------------------------------
1 | const prevEl= document.querySelector(".prev");
2 | const nextEl= document.querySelector(".next");
3 | const imageContainerEl= document.querySelector(".image-container");
4 | const imgsEl= document.querySelectorAll("img")
5 |
6 | let currentImg= 1;
7 | let timeout;
8 |
9 | nextEl.addEventListener("click", ()=>{
10 | currentImg++
11 | clearTimeout(timeout);
12 | updateImg();
13 | });
14 |
15 | prevEl.addEventListener("click", ()=>{
16 | currentImg--
17 | clearTimeout(timeout);
18 | updateImg();
19 | })
20 |
21 | updateImg();
22 |
23 | function updateImg(){
24 | if(currentImg > imgsEl.length){
25 | currentImg= 1;
26 | }else if(currentImg < 1) {
27 | currentImg= imgsEl.length;
28 | }
29 |
30 | imageContainerEl.style.transform = `translateX(-${(currentImg - 1) * 500}px) `;
31 |
32 | timeout= setTimeout(()=>{
33 | currentImg++
34 | updateImg();
35 | },3000)
36 | }
37 |
38 |
--------------------------------------------------------------------------------
/js project/slider/style.css:
--------------------------------------------------------------------------------
1 | body{
2 | margin:0;
3 | display: flex;
4 | align-items: center;
5 | justify-content: center;
6 | height: 100vh;
7 | background-color: antiquewhite;
8 | }
9 |
10 |
11 | .slider-container{
12 | width: 500px;
13 | height: 300px;
14 | overflow: hidden;
15 | border-radius: 10px;
16 | box-shadow: 2px 4px 6px rgba(0,0,0,.4);
17 | position: relative;
18 |
19 | }
20 | .image-container{
21 | display: flex;
22 | transition: transform .4s ease-in-out;
23 | }
24 | .btn{
25 | position: absolute;
26 | top:50%;
27 | transform: translateY(-50%);
28 | color: whitesmoke;
29 | opacity: .4;
30 | cursor: pointer;
31 | }
32 | .btn.prev{
33 | left: 10px;
34 | }
35 | .btn.next{
36 | right: 10px;
37 | }
38 | .btn:hover{
39 | opacity: 1;
40 | }
--------------------------------------------------------------------------------
/js project/social media selector menu/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
8 | Social Media Selector Menu
9 |
10 |
11 |
12 |
13 |
14 |
18 |
19 | Facebook
20 |
21 | Twitter
22 |
23 | Youtube
24 |
25 | Linkedin
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/js project/social media selector menu/script.js:
--------------------------------------------------------------------------------
1 | const menuEl= document.querySelector(".menu");
2 | const menuText= document.querySelector(".menu p");
3 | const socialListEl= document.querySelector(".social-lists");
4 | const liEls=document.querySelectorAll(".social-lists li");
5 |
6 |
7 | menuEl.addEventListener("click", ()=>{
8 | socialListEl.classList.toggle("hide"); //toggle bir class ekliyor aynı zamanda çıkarıyor
9 | menuEl.classList.toggle("rotate");
10 | });
11 |
12 | liEls.forEach(liEls=>{
13 | liEls.addEventListener("click", ()=>{
14 | menuText.innerHTML= liEls.innerHTML
15 | socialListEl.classList.add("hide");//bir class ekliyor eklenen classı ancak remove ile kaldırabilirsin
16 | menuEl.classList.toggle("rotate");
17 | });
18 | });
--------------------------------------------------------------------------------
/js project/social media selector menu/style.css:
--------------------------------------------------------------------------------
1 | body{
2 | margin:0;
3 | display: flex;
4 | align-items: center;
5 | flex-direction: column;
6 | height: 100vh;
7 | justify-content: center;
8 | font-family: sans-serif;
9 | background: linear-gradient(135deg, #C6FFDD 20%,#FBD786 50%,#f7797d) ;
10 | }
11 | .menu{
12 | background: whitesmoke;
13 | width: 300px;
14 | opacity: .7;
15 | border-radius: 5px;
16 | display: flex;
17 | align-items: center;
18 | justify-content: space-between;
19 | padding:10px;
20 | }
21 |
22 | .menu p{
23 | margin: 0 10px;
24 | display: flex;
25 | align-items: center;
26 |
27 | }
28 | .menu .fa-solid{
29 | transition: transform .2s;
30 | }
31 | .social-lists{
32 | background: whitesmoke;
33 | width: 300px;
34 | padding: 10px;
35 | opacity: .7;
36 | list-style: none;
37 | border-radius: 5px;
38 | }
39 | .social-lists li{
40 | display: flex;
41 | align-items: center;
42 | cursor: pointer;
43 | transition: .4s;
44 | }
45 | .social-lists li:hover{
46 | background: darkgray;
47 | border-radius: 5px;
48 | padding-left: 10px;
49 | }
50 | .social-lists .fa-brands{
51 | margin: 0 10px;
52 | }
53 |
54 | .rotate .fa-solid{
55 | transform: rotate(180deg);
56 |
57 | }
58 | .hide{
59 | visibility: hidden;
60 | }
--------------------------------------------------------------------------------
/js project/stcky navbar/bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ipekulfetkaylan/basic-javascript-project/2d1a12a310a409ab77f9251cbd775eba73fbdf46/js project/stcky navbar/bg.jpg
--------------------------------------------------------------------------------
/js project/stcky navbar/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Sticky Navbar
8 |
9 |
10 |
11 |
12 |
13 |
19 |
20 |
21 |
22 |
Welcome to Our Website
23 |
24 |
25 |
Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellat autem eum omnis debitis eaque temporibus, ducimus cum eos soluta odit architecto sint voluptates, minima aspernatur placeat ea, numquam nisi in iure dolorem nemo harum cupiditate! Non ipsa, possimus totam ducimus exercitationem ea sequi hic ab? Nostrum nam incidunt commodi eaque dolore nulla iusto sint nihil aliquam voluptates necessitatibus illum quo porro, unde quia tempora temporibus laborum possimus quaerat in nesciunt quibusdam harum! Consequuntur veritatis nam adipisci iure consectetur quibusdam! Repellat, amet sunt quae rem harum veniam veritatis atque debitis magni sapiente aliquam! Similique minus odio iste perspiciatis voluptatum consequatur provident.
26 |
Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellat autem eum omnis debitis eaque temporibus, ducimus cum eos soluta odit architecto sint voluptates, minima aspernatur placeat ea, numquam nisi in iure dolorem nemo harum cupiditate! Non ipsa, possimus totam ducimus exercitationem ea sequi hic ab? Nostrum nam incidunt commodi eaque dolore nulla iusto sint nihil aliquam voluptates necessitatibus illum quo porro, unde quia tempora temporibus laborum possimus quaerat in nesciunt quibusdam harum! Consequuntur veritatis nam adipisci iure consectetur quibusdam! Repellat, amet sunt quae rem harum veniam veritatis atque debitis magni sapiente aliquam! Similique minus odio iste perspiciatis voluptatum consequatur provident.
27 |
Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellat autem eum omnis debitis eaque temporibus, ducimus cum eos soluta odit architecto sint voluptates, minima aspernatur placeat ea, numquam nisi in iure dolorem nemo harum cupiditate! Non ipsa, possimus totam ducimus exercitationem ea sequi hic ab? Nostrum nam incidunt commodi eaque dolore nulla iusto sint nihil aliquam voluptates necessitatibus illum quo porro, unde quia tempora temporibus laborum possimus quaerat in nesciunt quibusdam harum! Consequuntur veritatis nam adipisci iure consectetur quibusdam! Repellat, amet sunt quae rem harum veniam veritatis atque debitis magni sapiente aliquam! Similique minus odio iste perspiciatis voluptatum consequatur provident.
28 |
Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellat autem eum omnis debitis eaque temporibus, ducimus cum eos soluta odit architecto sint voluptates, minima aspernatur placeat ea, numquam nisi in iure dolorem nemo harum cupiditate! Non ipsa, possimus totam ducimus exercitationem ea sequi hic ab? Nostrum nam incidunt commodi eaque dolore nulla iusto sint nihil aliquam voluptates necessitatibus illum quo porro, unde quia tempora temporibus laborum possimus quaerat in nesciunt quibusdam harum! Consequuntur veritatis nam adipisci iure consectetur quibusdam! Repellat, amet sunt quae rem harum veniam veritatis atque debitis magni sapiente aliquam! Similique minus odio iste perspiciatis voluptatum consequatur provident.
29 |
Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellat autem eum omnis debitis eaque temporibus, ducimus cum eos soluta odit architecto sint voluptates, minima aspernatur placeat ea, numquam nisi in iure dolorem nemo harum cupiditate! Non ipsa, possimus totam ducimus exercitationem ea sequi hic ab? Nostrum nam incidunt commodi eaque dolore nulla iusto sint nihil aliquam voluptates necessitatibus illum quo porro, unde quia tempora temporibus laborum possimus quaerat in nesciunt quibusdam harum! Consequuntur veritatis nam adipisci iure consectetur quibusdam! Repellat, amet sunt quae rem harum veniam veritatis atque debitis magni sapiente aliquam! Similique minus odio iste perspiciatis voluptatum consequatur provident.
30 |
Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellat autem eum omnis debitis eaque temporibus, ducimus cum eos soluta odit architecto sint voluptates, minima aspernatur placeat ea, numquam nisi in iure dolorem nemo harum cupiditate! Non ipsa, possimus totam ducimus exercitationem ea sequi hic ab? Nostrum nam incidunt commodi eaque dolore nulla iusto sint nihil aliquam voluptates necessitatibus illum quo porro, unde quia tempora temporibus laborum possimus quaerat in nesciunt quibusdam harum! Consequuntur veritatis nam adipisci iure consectetur quibusdam! Repellat, amet sunt quae rem harum veniam veritatis atque debitis magni sapiente aliquam! Similique minus odio iste perspiciatis voluptatum consequatur provident.
31 |
Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellat autem eum omnis debitis eaque temporibus, ducimus cum eos soluta odit architecto sint voluptates, minima aspernatur placeat ea, numquam nisi in iure dolorem nemo harum cupiditate! Non ipsa, possimus totam ducimus exercitationem ea sequi hic ab? Nostrum nam incidunt commodi eaque dolore nulla iusto sint nihil aliquam voluptates necessitatibus illum quo porro, unde quia tempora temporibus laborum possimus quaerat in nesciunt quibusdam harum! Consequuntur veritatis nam adipisci iure consectetur quibusdam! Repellat, amet sunt quae rem harum veniam veritatis atque debitis magni sapiente aliquam! Similique minus odio iste perspiciatis voluptatum consequatur provident.
32 |
Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellat autem eum omnis debitis eaque temporibus, ducimus cum eos soluta odit architecto sint voluptates, minima aspernatur placeat ea, numquam nisi in iure dolorem nemo harum cupiditate! Non ipsa, possimus totam ducimus exercitationem ea sequi hic ab? Nostrum nam incidunt commodi eaque dolore nulla iusto sint nihil aliquam voluptates necessitatibus illum quo porro, unde quia tempora temporibus laborum possimus quaerat in nesciunt quibusdam harum! Consequuntur veritatis nam adipisci iure consectetur quibusdam! Repellat, amet sunt quae rem harum veniam veritatis atque debitis magni sapiente aliquam! Similique minus odio iste perspiciatis voluptatum consequatur provident.
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/js project/stcky navbar/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/js project/stcky navbar/script.js:
--------------------------------------------------------------------------------
1 | const navbarEl= document.querySelector(".navbar");
2 |
3 | const bottomContainerEl= document.querySelector(".bottom-container");
4 |
5 | console.log(navbarEl.offsetHeight)
6 | console.log(bottomContainerEl.offsetTop);
7 |
8 | window.addEventListener("scroll", ()=>{
9 | if(window.scrollY > bottomContainerEl.offsetTop - navbarEl.offsetHeight - 50){
10 | navbarEl.classList.add("active");
11 | }else{
12 | navbarEl.classList.remove("active");
13 | }
14 | });
--------------------------------------------------------------------------------
/js project/stcky navbar/style.css:
--------------------------------------------------------------------------------
1 | body{
2 | margin:0;
3 | }
4 | .top-container{
5 | background-image: url(bg.jpg);
6 | height: 100vh;
7 | background-repeat: no-repeat;
8 | background-size: cover;
9 | display: flex;
10 | align-items: center;
11 | justify-content: center;
12 | text-align: center;
13 | }
14 | .top-container h1{
15 | color: aliceblue;
16 | font-size: 60px;
17 | font-family: sans-serif;
18 | letter-spacing: 4px;
19 | text-shadow: 4px 0px 7px rgba(0,0,0,0.47);
20 | }
21 | .text{
22 | margin:50px 5%;
23 | font-family: sans-serif;
24 | }
25 | .navbar{
26 | display: flex;
27 | position: fixed;
28 | background-color: whitesmoke;
29 | width: 100%;
30 | justify-content: space-between;
31 | align-items: center;
32 | transition: background-color .4s;
33 |
34 | }
35 | .navbar ul{
36 | display: flex;
37 | list-style: none;
38 | }
39 |
40 | .navbar ul li a{
41 | text-decoration: none;
42 | margin: 0 10px;
43 | color: black;
44 | font-family: sans-serif;
45 | font-weight: bold;
46 | }
47 | .navbar ul li a:hover{
48 | color: darkblue
49 | }
50 | .navbar.active{
51 | background-color: black;
52 | }
53 | .navbar.navbar.active ul li a{
54 | color: white;
55 | }
--------------------------------------------------------------------------------
/js project/step prgress bar/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Step Progress Bar
8 |
9 |
10 |
11 |
12 |
13 |
Step Progress Bar
14 |
15 |
16 |
17 |
18 |
19 | Start
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/js project/step prgress bar/script.js:
--------------------------------------------------------------------------------
1 | const nextEl= document.getElementById("next");
2 | const prevEl= document.getElementById("prev");
3 | const stepsEl= document.querySelectorAll(".step")
4 | const progressEl= document.querySelector(".progress-bar-front")
5 |
6 |
7 | let currentChecked= 1;
8 | nextEl.addEventListener("click", ()=>{
9 | currentChecked ++;
10 | if(currentChecked > stepsEl.length){
11 | currentChecked= stepsEl.length;
12 | }
13 | updateStepProgress();
14 |
15 | });
16 |
17 | prevEl.addEventListener("click", ()=>{
18 | currentChecked --;
19 | if(currentChecked < 1){
20 | currentChecked= 1;
21 | }
22 | updateStepProgress();
23 |
24 | });
25 |
26 | function updateStepProgress(){
27 | stepsEl.forEach((stepEl, idx)=>{
28 |
29 | if(idx < currentChecked){
30 | stepEl.classList.add("checked");
31 | stepEl.innerHTML= `
32 | ${idx === 0 ? "Start" : idx === stepsEl.length -1 ? "Final" : "Step" + idx} `;
33 | }
34 | else{
35 | stepEl.classList.remove("checked");
36 | stepEl.innerHTML=` `;
37 | }
38 | });
39 | const checkedNumber= document.querySelectorAll(".checked");
40 |
41 | progressEl.style.width=((checkedNumber.length -1)/(stepsEl.length -1)) *100 + "%";
42 |
43 | if(currentChecked=== 1){
44 | prevEl.disabled= true;
45 | }
46 | else if(currentChecked=== stepsEl.length){
47 | nextEl.disabled===true;
48 | }
49 | else{
50 | prevEl.disabled= false;
51 | nextEl.disabled= false;
52 | }
53 |
54 | }
--------------------------------------------------------------------------------
/js project/step prgress bar/style.css:
--------------------------------------------------------------------------------
1 | *{
2 | margin:0;
3 | }
4 | body{
5 | display: flex;
6 | justify-content: center;
7 | height: 100vh;
8 | align-items: center;
9 | background-color: orange;
10 | }
11 | h1{
12 | font-size: 36px;
13 | color: rgb(12, 73, 12);
14 | padding: 50px;
15 | }
16 | .container{
17 | text-align: center;
18 | }
19 | .progress-container{
20 | width: 500px;
21 | display: flex;
22 | position: relative;
23 | justify-content: space-between;
24 |
25 | }
26 | .progress-bar-back{
27 | position: absolute;
28 | height: 4px;
29 | width: 100%;
30 | background-color: #ddd;
31 | z-index: -1;
32 | border: none;
33 | top: 50%;
34 | transform: translateY(-50%);
35 |
36 | }
37 | .progress-bar-front{
38 | position: absolute;
39 | height: 4px;
40 | width: 0;
41 | background-color: green;
42 | z-index: -1;
43 | border: none;
44 | top: 50%;
45 | transform: translateY(-50%);
46 | transition: .4s;
47 | }
48 | .step{
49 | width: 30px;
50 | height: 30px;
51 | background-color: whitesmoke;
52 | border-radius: 50%;
53 | display: flex;
54 | justify-content: center;
55 | align-items: center;
56 | border: 4px solid lightgray;
57 | color:lightgray
58 | }
59 | .step.checked{
60 | color: green;
61 | border-color: green;
62 | transition: all .4s linear ;
63 | transition-delay: .3s;
64 | }
65 | .step.checked small{
66 | position: absolute;
67 | bottom: -20px;
68 | font-family: cursive;
69 | font-size: 16px;
70 | color: green;
71 | }
72 | .btn{
73 | background-color: rgb(26, 117, 192);
74 | border: none;
75 | color: #ddd;
76 | padding: 10px 15px;
77 | margin: 55px 15px 0;
78 | border-radius: 5px;
79 | cursor: pointer;
80 | box-shadow: rgba(0, 0, 0, 0.15) 1.95px 1.95px 2.6px;
81 | }
82 | .btn:hover{
83 | opacity: .8;
84 | }
85 | .btn:active{
86 | transform: scale(.97);
87 | }
88 |
89 | .btn:disabled{
90 | opacity: .4;
91 | }
92 | @media (max-width:500px) {
93 | .progress-container{
94 | width: 90vw;
95 | }
96 | }
--------------------------------------------------------------------------------
/js project/tab section/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Tabs Project
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | Step 1
18 | Step 2
19 | Step 3
20 |
21 |
22 |
23 |
24 |
25 |
Step 1
26 |
Lorem ipsum dolor, sit amet consectetur adipisicing elit. Odio at quod perspiciatis pariatur non eveniet repellat nobis error doloremque voluptatibus laborum, sapiente perferendis sint voluptas, dolore unde praesentium modi! Unde, minus. Consequuntur ut nobis odit sapiente aut saepe voluptas nesciunt. At alias nisi, adipisci veritatis eius laboriosam mollitia explicabo pariatur iusto, asperiores, nihil rem optio repudiandae neque cumque nesciunt hic iste quae labore. Dolorem, quasi dolor ut consectetur laboriosam quaerat quo? Eum perspiciatis necessitatibus nihil id earum soluta, tempora provident minima saepe voluptatibus exercitationem est odit aliquid error quibusdam expedita incidunt eligendi quos animi dolores cum! Dolores, nulla! Voluptatibus, quidem.
27 |
28 |
29 |
Step 2
30 |
Lorem ipsum dolor, sit amet consectetur adipisicing elit. Odio at quod perspiciatis pariatur non eveniet repellat nobis error doloremque voluptatibus laborum, sapiente perferendis sint voluptas, dolore unde praesentium modi! Unde, minus. Consequuntur ut nobis odit sapiente aut saepe voluptas nesciunt. At alias nisi, adipisci veritatis eius laboriosam mollitia explicabo pariatur iusto, asperiores, nihil rem optio repudiandae neque cumque nesciunt hic iste quae labore. Dolorem, quasi dolor ut consectetur laboriosam quaerat quo? Eum perspiciatis necessitatibus nihil id earum soluta, tempora provident minima saepe voluptatibus exercitationem est odit aliquid error quibusdam expedita incidunt eligendi quos animi dolores cum! Dolores, nulla! Voluptatibus, quidem.
31 |
32 |
33 |
Step 3
34 |
Lorem ipsum dolor, sit amet consectetur adipisicing elit. Odio at quod perspiciatis pariatur non eveniet repellat nobis error doloremque voluptatibus laborum, sapiente perferendis sint voluptas, dolore unde praesentium modi! Unde, minus. Consequuntur ut nobis odit sapiente aut saepe voluptas nesciunt. At alias nisi, adipisci veritatis eius laboriosam mollitia explicabo pariatur iusto, asperiores, nihil rem optio repudiandae neque cumque nesciunt hic iste quae labore. Dolorem, quasi dolor ut consectetur laboriosam quaerat quo? Eum perspiciatis necessitatibus nihil id earum soluta, tempora provident minima saepe voluptatibus exercitationem est odit aliquid error quibusdam expedita incidunt eligendi quos animi dolores cum! Dolores, nulla! Voluptatibus, quidem.
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/js project/tab section/script.js:
--------------------------------------------------------------------------------
1 | const tabs= document.querySelector(".tabs");
2 | const btns= document.querySelectorAll(".button");
3 | const articles= document.querySelectorAll(".content");
4 |
5 | tabs.addEventListener("click",(event)=>{
6 |
7 | const id= event.target.dataset.id;
8 |
9 | if(id){
10 | btns.forEach((btn)=>{
11 | btn.classList.remove("live");
12 | });
13 | event.target.classList.add("live");
14 | articles.forEach((article)=>{
15 | article.classList.remove("live");
16 | });
17 | const element= document.getElementById(id);
18 | element.classList.add("live");
19 | }
20 | });
21 |
--------------------------------------------------------------------------------
/js project/tab section/style.css:
--------------------------------------------------------------------------------
1 | body{
2 | margin:0;
3 | padding:0;
4 | font-family: sans-serif;
5 | background-color: rgb(248, 246, 246);
6 | color: gray;
7 | }
8 |
9 | img{
10 | display: block;
11 | width: 100%;
12 | border-radius: 5px;
13 | object-fit: cover;
14 | height: 30rem;
15 | margin-bottom: 2rem
16 | }
17 |
18 | .section-center{
19 | width: 90vw;
20 | margin:0 auto;
21 | max-width: 1170px;
22 | min-width: 340px;
23 | padding: 5rem 0;
24 | }
25 | .tabs{
26 | background-color: aliceblue;
27 | border-radius: .5rem;
28 | grid-template-rows: auto 1fr;
29 | }
30 | .button{
31 | padding: 1rem 0;
32 | border: none;
33 | font-size: 1rem;
34 | cursor: pointer;
35 | transition: all .3s linear;
36 | letter-spacing: .25rem;
37 | background-color: lightblue;
38 | }
39 | .btn-container{
40 | display: grid;
41 | grid-template-columns: 1fr 1fr 1fr;
42 | }
43 | .button:nth-child(1){
44 | border-top-left-radius: .5rem;
45 | }
46 | .button:nth-child(3){
47 | border-top-right-radius: .5rem;
48 | }
49 | .button:hover{
50 | background-color:lightcyan;
51 | color: black;
52 | }
53 | .tabs-content{
54 | padding: 2rem 1.5rem;
55 | }
56 | @media (max-width: 992px) {
57 | .image{
58 | margin-bottom: 0;
59 | }
60 | .section-center{
61 | display: grid;
62 | grid-template-columns: 1fr 1fr ;
63 | column-gap: 2rem;
64 | }
65 | }
66 | .content{
67 | display: none;
68 | }
69 | .content.live{
70 | display: block;
71 | }
72 | .button.live{
73 | background: aliceblue;
74 | }
--------------------------------------------------------------------------------
/js project/text effect/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Text Effect
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/js project/text effect/script.js:
--------------------------------------------------------------------------------
1 | const containerEl= document.querySelector(".container");
2 |
3 | const careers= ["Youtuber", "Web Developer", "Frelancer","Instructor"];
4 |
5 | let careerIndex= 0;
6 | let characterIndex= 0;
7 |
8 |
9 | updateText();
10 | function updateText(){
11 | characterIndex++;
12 |
13 | containerEl.innerHTML= ` I am ${careers[careerIndex].slice(0,1)==="I" ? "an" : "a"} ${careers[careerIndex].slice(0,characterIndex)} `
14 |
15 | if(characterIndex === careers[careerIndex].length){
16 | careerIndex++
17 | characterIndex = 0
18 | }
19 | if(careerIndex === careers.length){
20 | careerIndex = 0;
21 | }
22 | setTimeout(updateText,400)
23 | }
24 |
25 |
--------------------------------------------------------------------------------
/js project/text effect/style.css:
--------------------------------------------------------------------------------
1 | body{
2 | margin:0;
3 | font-family: cursive;
4 | display: flex;
5 | align-items: center;
6 | justify-content: center;
7 | height: 100vh;
8 | background-color:thistle;
9 | }
--------------------------------------------------------------------------------
/js project/timer/bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ipekulfetkaylan/basic-javascript-project/2d1a12a310a409ab77f9251cbd775eba73fbdf46/js project/timer/bg.jpg
--------------------------------------------------------------------------------
/js project/timer/bg2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ipekulfetkaylan/basic-javascript-project/2d1a12a310a409ab77f9251cbd775eba73fbdf46/js project/timer/bg2.jpg
--------------------------------------------------------------------------------
/js project/timer/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | New Year Countdown
8 |
9 |
10 |
11 | Countdown to New Year
12 | 2023
13 |
14 |
00
15 |
00
16 |
00
17 |
00
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/js project/timer/script.js:
--------------------------------------------------------------------------------
1 | const dayEl= document.getElementById("day");
2 | const hourEl= document.getElementById("hour");
3 | const minuteEl= document.getElementById("minute");
4 | const secondEl= document.getElementById("second");
5 |
6 | const newYearDate= new Date("Jan 1, 2023 00:00:00").getTime();
7 |
8 | updateCountdown();
9 | function updateCountdown(){
10 | const now= new Date().getTime();
11 | const gap= newYearDate - now
12 |
13 | const second= 1000;
14 | const minute= second * 60;
15 | const hour= minute* 60;
16 | const day= hour* 24;
17 |
18 | const d= Math.floor(gap / day);
19 | const h= Math.floor((gap % day)/ hour);
20 | const m= Math.floor((gap % hour)/ minute);
21 | const s= Math.floor ((gap % minute)/ second);
22 |
23 | dayEl.innerText=d;
24 | hourEl.innerText=h;
25 | minuteEl.innerText=m;
26 | secondEl.innerText=s;
27 |
28 | setTimeout(updateCountdown, 1000);
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/js project/timer/style.css:
--------------------------------------------------------------------------------
1 | body{
2 | margin:0;
3 | display: flex;
4 | flex-direction: column;
5 | align-items: center;
6 | height: 100vh;
7 | justify-content: center;
8 | font-family: cursive;
9 | overflow: hidden;
10 | background-image: url(bg.jpg);
11 | background-repeat: no-repeat;
12 |
13 | }
14 |
15 | h1{
16 | color: whitesmoke;
17 | text-transform: uppercase;
18 | letter-spacing: 4px;
19 | text-shadow: 4px 4px 2px rgba(0, 0, 0, .8);
20 | text-align: center;
21 | font-size: 3em;
22 |
23 |
24 | }
25 | .year{
26 | font-size: 5em;
27 | color:whitesmoke;
28 | font-weight: bold;
29 | }
30 | .countdown{
31 | margin:30px;
32 | background-color: rgba(0, 0, 0, 0.5 );
33 | width: 100%;
34 | color: whitesmoke;
35 | height: 120px;
36 | display: flex;
37 | justify-content: center;
38 | align-items: center;
39 | }
40 | .countdown div{
41 | margin:0 15px;
42 | font-size: 3.5em;
43 | font-weight: 500;
44 | margin-top: -25px;
45 | position: relative;
46 | text-align: center;
47 | width: 100px;
48 |
49 | }
50 |
51 | .countdown div::before{
52 | content: "";
53 | position: absolute;
54 | bottom: -30px;
55 | left: 0;
56 | font-size: .35em;
57 | line-height: 35px;
58 | letter-spacing: 1px;
59 | font-weight: 500;
60 | width: 100%;
61 | height: 35px;
62 |
63 | }
64 | .countdown #day::before{
65 | content: "Days";
66 | }
67 | .countdown #hour::before{
68 | content: "Hour";
69 | }
70 | .countdown #minute::before{
71 | content: "Minutes";
72 | }
73 | .countdown #second::before{
74 | content: "Second";
75 | }
--------------------------------------------------------------------------------
/js project/todolist/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Todo List
8 |
9 |
10 |
11 |
12 |
29 | Please add a task
30 | Add is success
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/js project/todolist/script.js:
--------------------------------------------------------------------------------
1 | const formEl= document.querySelector(".form");
2 | const alertEl= document.querySelector(".alert");
3 | const alertSuccessEl= document.querySelector(".alert-success");
4 | const inputEl= document.querySelector(".input");
5 | const ulEl= document.querySelector(".list");
6 |
7 | let list= JSON.parse(localStorage.getItem("list"));
8 |
9 | if (list) {
10 | list.forEach((task) => {
11 | toDoList(task);
12 | });
13 | }
14 |
15 | function showAlert(){
16 | if(inputEl.value=== ""){
17 | alertEl.style.display="block";
18 | setTimeout(()=>{
19 | alertEl.style.display="none";
20 | },2000);
21 | }else{
22 | alertSuccessEl.style.display="block";
23 | setTimeout(()=>{
24 | alertSuccessEl.style.display="none";
25 | },2000);
26 |
27 | }
28 |
29 | }
30 |
31 | formEl.addEventListener("submit", (event)=> {
32 | showAlert();
33 | event.preventDefault();
34 | toDoList()
35 | });
36 |
37 | function toDoList(task){
38 |
39 | let newTask= inputEl.value;
40 | if(task){
41 | newTask= task.name
42 | }
43 |
44 | const liEl= document.createElement("li");
45 | if(task && task.checked){
46 | liEl.classList.add("checked");
47 | }
48 |
49 | liEl.innerText= newTask;
50 | ulEl.appendChild(liEl);
51 | inputEl.value="";
52 |
53 | const checkBtnEl= document.createElement("div");
54 | checkBtnEl.innerHTML= ` `;
55 | liEl.appendChild(checkBtnEl);
56 |
57 | const trashBtnEl= document.createElement("div");
58 | trashBtnEl.innerHTML= ` `;
59 | liEl.appendChild(trashBtnEl);
60 |
61 | checkBtnEl.addEventListener("click", ()=>{
62 | liEl.classList.toggle("checked");
63 | updateLocalStorage();
64 | })
65 |
66 | trashBtnEl.addEventListener("click", ()=>{
67 | liEl.remove();
68 | updateLocalStorage();
69 | });
70 | updateLocalStorage();
71 | };
72 |
73 | function updateLocalStorage(){
74 | const liEls= document.querySelectorAll("li")
75 | let list= [];
76 | liEls.forEach(liEl=> {
77 | list.push({
78 | name:liEl.innerText,
79 | checked: liEl.classList.
80 | contains("checked")
81 | })
82 | });
83 | localStorage.setItem("list", JSON.stringify(list))
84 |
85 | }
86 |
87 |
--------------------------------------------------------------------------------
/js project/todolist/style.css:
--------------------------------------------------------------------------------
1 | *{
2 | font-family: cursive;
3 | box-sizing: border-box;
4 | }
5 |
6 | body{
7 | margin:0;
8 | display: flex;
9 | justify-content: center;
10 | background-color:#FFE9AE ;
11 |
12 |
13 | }
14 | .form{
15 | position: absolute;
16 | top:30%;
17 | box-shadow: rgba(0, 0, 0, 0.2) 0px 5px 15px;
18 | width: 400px;
19 | background-color: #FFDBA4;
20 | border-radius: 8px;
21 | }
22 | .input{
23 | border: none;
24 | width: 100%;
25 | padding: 10px;
26 | border-radius: 10px 10px 0 0;
27 | outline: none;
28 | font-size: 18px;
29 | }
30 | .input::placeholder{
31 | color: #ddd;
32 | }
33 | .list{
34 | padding:0;
35 | margin:0;
36 | }
37 | .list li{
38 | list-style: none;
39 | padding:20px;
40 | border-top: 1px solid #FFE9AE;
41 | position: relative;
42 | }
43 | .list li .fa-trash{
44 | color:#ec3f3f;
45 | position: absolute;
46 | right: 10px;
47 | top: 50%;
48 | transform: translateY(-50%);
49 | cursor: pointer;
50 | }
51 | .list li .fa-check:hover,
52 | .list li .fa-trash:hover{
53 | transform: scale(1.5);
54 | }
55 |
56 | .list li .fa-check{
57 | color:#3E7C17;
58 | position: absolute;
59 | right: 50px;
60 | top: 50%;
61 | transform: translateY(-50%);
62 | cursor: pointer;
63 | }
64 |
65 | .list li.checked{
66 | color: gray;
67 | text-decoration: line-through;
68 | font-size: 12px ;
69 | }
70 | .list li.checked .fa-check{
71 | color:gray;
72 | }
73 |
74 | .alert{
75 | position: fixed;
76 | width: 300px;
77 | height: 60px;
78 | background-color: #ec3f3f;
79 | right: 40%;
80 | top: 40px;
81 | border-radius: 10px;
82 | box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px;
83 | display: flex;
84 | justify-content: center;
85 | align-items: center;
86 | text-align: center;
87 | font-size: 20px;
88 | transition: 1s ease-in-out;
89 | display: none;
90 | }
91 |
92 | .alert-success{
93 | position: fixed;
94 | width: 300px;
95 | height: 60px;
96 | background-color: #3E7C17;
97 | right: 40%;
98 | top: 40px;
99 | border-radius: 10px;
100 | box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px;
101 | display: flex;
102 | justify-content: center;
103 | align-items: center;
104 | text-align: center;
105 | font-size: 20px;
106 | transition: 1s ease-in-out;
107 | display: none;
108 | }
--------------------------------------------------------------------------------
/js project/video trailer popup/img1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ipekulfetkaylan/basic-javascript-project/2d1a12a310a409ab77f9251cbd775eba73fbdf46/js project/video trailer popup/img1.jpg
--------------------------------------------------------------------------------
/js project/video trailer popup/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Video Popup
8 |
9 |
10 |
11 |
12 |
13 |
14 |
Movie Title
15 |
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Debitis, optio magnam minus fugit qui eos aperiam inventore suscipit. Adipisci consequuntur iure assumenda, molestias ut laboriosam, corporis quos ducimus aspernatur in vitae repellendus facere? Inventore placeat architecto suscipit consequuntur nihil! Nisi, tempore a officiis rem cumque voluptate quibusdam magni nihil perspiciatis.
16 |
Watch Now
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/js project/video trailer popup/script.js:
--------------------------------------------------------------------------------
1 | const btnEl = document.querySelector(".btn");
2 | const closeIconEl = document.querySelector(".close-icon");
3 | const trailerContainerEl = document.querySelector(".trailer-container");
4 | const videoEl = document.querySelector ("video");
5 |
6 | btnEl.addEventListener("click", ()=>{
7 | trailerContainerEl.classList.remove("active");
8 | });
9 |
10 | closeIconEl.addEventListener("click", ()=>{
11 | trailerContainerEl.classList.add("active");
12 | videoEl.pause();
13 | videoEl.currentTime = 0;
14 | })
--------------------------------------------------------------------------------
/js project/video trailer popup/style.css:
--------------------------------------------------------------------------------
1 | body{
2 | margin:0;
3 | box-sizing: border-box;
4 | font-family: sans-serif;
5 | display: flex;
6 | justify-content: center;
7 | align-items: center;
8 | height: 100vh;
9 | background-color: black;
10 | }
11 |
12 | .main-container{
13 | max-width: 550px;
14 | padding: 10px;
15 | }
16 | .main-container h1{
17 | color: white;
18 | font-weight: 500px;
19 | }
20 | .main-container p{
21 | color: white;
22 | margin: 15px 0;
23 | }
24 | .btn{
25 | background-color: white;
26 | border: none;
27 | padding: 10px 20px;
28 | cursor: pointer;
29 | font-size: 16px;
30 | border-radius: 5px;
31 | transition: .4s;
32 | }
33 | .btn:hover{
34 | background-color: tomato;
35 | }
36 | .main-container img{
37 | max-width: 100%;
38 | margin-bottom: 15px;
39 | border-radius: 10px;
40 | }
41 | .trailer-container{
42 | position: fixed;
43 | top: 50%;
44 | left: 50%;
45 | transform: translate(-50%, -50%);
46 | background-color: black;
47 | width: 100%;
48 | height: 100%;
49 | display: flex;
50 | justify-content: center;
51 | align-items: center;
52 | transition: opacity .7s;
53 | opacity: 1;
54 | }
55 | .active.trailer-container{
56 | visibility: hidden;
57 | opacity: 0;
58 | }
59 | .trailer-container video{
60 | position: relative;
61 | max-width: 900px;
62 | outline: none;
63 | }
64 | .close-icon{
65 | position: absolute;
66 | top: 30px;
67 | right: 30px;
68 | color: white;
69 | cursor: pointer;
70 | }
71 | @media (max-width: 991px){
72 | .trailer-container video{
73 | max-width: 90%;
74 | }
75 | }
--------------------------------------------------------------------------------
/js project/video trailer popup/video.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ipekulfetkaylan/basic-javascript-project/2d1a12a310a409ab77f9251cbd775eba73fbdf46/js project/video trailer popup/video.mp4
--------------------------------------------------------------------------------