├── 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 | magnifier 13 | 14 | 15 | 16 | mic-icon 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 | 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 | 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 | 15 |
16 |
17 |

Samsung

18 | 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 |
15 |
16 |

17 |

18 |
19 |
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 |
12 |

score: 0

13 |

What is 1 multiply by 1?

14 | 15 | 16 |
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 | 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 | 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 | 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 | 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 | 40 | 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 | 18 | 19 | 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 |
13 | 14 | 28 |
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 | movie image 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 | 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 --------------------------------------------------------------------------------