JavaScript'te Olay Yönetimi

JavaScript'te Olay Yönetimi

Bu makale, JavaScript'te olay yönetimini açıklar.

YouTube Video

javascript-html-event.html
  1<!DOCTYPE html>
  2<html lang="en">
  3<head>
  4  <meta charset="UTF-8">
  5  <title>JavaScript &amp; HTML</title>
  6  <style>
  7    * {
  8        box-sizing: border-box;
  9    }
 10
 11    body {
 12        margin: 0;
 13        padding: 1em;
 14        padding-bottom: 10em;
 15        font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
 16        background-color: #f7f9fc;
 17        color: #333;
 18        line-height: 1.6;
 19    }
 20
 21    .container {
 22        max-width: 800px;
 23        margin: 0 auto;
 24        padding: 1em;
 25        background-color: #ffffff;
 26        border: 1px solid #ccc;
 27        border-radius: 10px;
 28        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
 29    }
 30
 31    .container-flex {
 32        display: flex;
 33        flex-wrap: wrap;
 34        gap: 2em;
 35        max-width: 1000px;
 36        margin: 0 auto;
 37        padding: 1em;
 38        background-color: #ffffff;
 39        border: 1px solid #ccc;
 40        border-radius: 10px;
 41        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
 42    }
 43
 44    .left-column, .right-column {
 45        flex: 1 1 200px;
 46        min-width: 200px;
 47    }
 48
 49    h1, h2 {
 50        font-size: 1.2rem;
 51        color: #007bff;
 52        margin-top: 0.5em;
 53        margin-bottom: 0.5em;
 54        border-left: 5px solid #007bff;
 55        padding-left: 0.6em;
 56        background-color: #e9f2ff;
 57    }
 58
 59    button {
 60        display: block;
 61        margin: 1em auto;
 62        padding: 0.75em 1.5em;
 63        font-size: 1rem;
 64        background-color: #007bff;
 65        color: white;
 66        border: none;
 67        border-radius: 6px;
 68        cursor: pointer;
 69        transition: background-color 0.3s ease;
 70    }
 71
 72    button:hover {
 73        background-color: #0056b3;
 74    }
 75
 76    #output {
 77        margin-top: 1em;
 78        background-color: #1e1e1e;
 79        color: #0f0;
 80        padding: 1em;
 81        border-radius: 8px;
 82        min-height: 200px;
 83        font-family: Consolas, monospace;
 84        font-size: 0.95rem;
 85        overflow-y: auto;
 86        white-space: pre-wrap;
 87    }
 88
 89    .highlight {
 90        outline: 3px solid #ffc107; /* yellow border */
 91        background-color: #fff8e1;  /* soft yellow background */
 92        transition: background-color 0.3s ease, outline 0.3s ease;
 93    }
 94
 95    .active {
 96        background-color: #28a745; /* green background */
 97        color: #fff;
 98        box-shadow: 0 0 10px rgba(40, 167, 69, 0.5);
 99        transition: background-color 0.3s ease, box-shadow 0.3s ease;
100    }
101  </style>
102</head>
103<body>
104    <div class="container-flex">
105        <div class="left-column">
106            <h2>HTML Sample</h2>
107            <div id="parentDiv">
108                <button id="myButton">Click me</button>
109            </div>
110        </div>
111
112        <div class="right-column">
113            <h2>Form Sample</h2>
114            <form id="myForm">
115                <input type="text" name="username">
116                <button type="submit">Submit</button>
117            </form>
118        </div>
119    </div>
120
121    <div class="container">
122        <h1>JavaScript Console</h1>
123        <button id="executeBtn">Execute</button>
124        <div id="output"></div>
125    </div>
126
127    <script>
128        // Override console.log to display messages in the #output element
129        (function () {
130            const originalLog = console.log;
131            console.log = function (...args) {
132                originalLog.apply(console, args);
133                const output = document.getElementById('output');
134                output.textContent += args.map(String).join(' ') + '\n';
135            };
136        })();
137
138        document.getElementById('executeBtn').addEventListener('click', () => {
139            // Prevent multiple loads
140            if (document.getElementById('externalScript')) return;
141
142            const script = document.createElement('script');
143            script.src = 'javascript-html-event.js';
144            script.id = 'externalScript';
145            //script.onload = () => console.log('javascript-html-event.js loaded and executed.');
146            //script.onerror = () => console.log('Failed to load javascript-html-event.js.');
147            document.body.appendChild(script);
148        });
149    </script>
150</body>
151</html>

JavaScript'te Olay Yönetimi

JavaScript'te olay yönetimi, kullanıcı işlemlerine (örneğin tıklamalar ve klavye girişleri) veya tarayıcı işlemlerine yanıt olarak belirli eylemleri gerçekleştiren bir mekanizmadır. Olay dinleyicileri kurarak dinamik ve etkileşimli web sayfaları oluşturabilirsiniz.

Olayların Temelleri

Olaylar, kullanıcı işlemlerine ve tarayıcı işlemlerine yanıt olarak gerçekleşir. Bir olay gerçekleştiğinde, ilgili olay işleyicisi (fonksiyon) çalıştırılır. Örneğin, aşağıdaki gibi olaylar vardır:.

  • Tıkla (click)
  • Klavye Girişi (keydown, keyup)
  • Fare Hareketi (mousemove, mouseover)
  • Form Gönderimi (submit)
  • Sayfa Yüklemesi Tamamlandı (DOMContentLoaded)
  • Kaydırma (scroll)

Olay Dinleyicilerini Ekleme

Olay dinleyicileri, addEventListener() yöntemi kullanılarak kurulur. Bu yöntem, belirtilen olay gerçekleştiğinde belirli bir fonksiyonu çağırır.

addEventListener() Temel Sözdizimi

1element.addEventListener(event, handler);
  • element, olayı izleyen HTML öğesidir.
  • event, olayın adıdır (örneğin, click).
  • handler, olay gerçekleştiğinde çalışan fonksiyondur.

Olay Nesnesi

Bir olay meydana geldiğinde, JavaScript olay detaylarını içeren bir olay nesnesini olay işleyicisine aktarır. Bu nesne, hangi öğenin olayı tetiklediği ve hangi tuşun basıldığı gibi bilgileri içerir.

Örnek: Olay Nesnesini Kullanma

1<button id="myButton">Click me</button>
1const button = document.getElementById('myButton');
2
3button.addEventListener('click', (event) => {
4    console.log(event);  // Display event details in the console
5    console.log('Clicked element:', event.target);  // Display the clicked element
6});
  • Bu kod, düğme tıklandığında olay nesnesini kullanarak ayrıntılı bilgileri ve tıklanan öğeyi konsolda gösterir.

Tipik Olaylar

Tıklama Olayı

click olayı, kullanıcı bir öğeye tıkladığında meydana gelir.

1element.addEventListener('click', () => {
2    console.log('Clicked');
3});
  • Bu kod, öğeye tıklandığında konsolda bir mesaj gösterir.

Klavye Olayları

keydown ve keyup olayları, kullanıcı bir tuşa bastığında veya bıraktığında meydana gelir. Hangi tuşa basıldığını görmek için event.key kullanabilirsiniz.

1document.addEventListener('keydown', (event) => {
2    console.log(`Key pressed: ${event.key}`);
3});
  • Kullanıcı bir tuşa bastığında, bu kod konsolda tuşun adını gösterir.

Fare Olayları

mousemove ve mouseover olayları, fare hareketi ve üzerine gelme sırasında meydana gelir.

1document.addEventListener('mousemove', (event) => {
2    console.log(`Mouse position: X=${event.clientX}, Y=${event.clientY}`);
3});
  • Bu kod, fare her hareket ettiğinde X ve Y koordinatlarını konsolda gösterir.

Form Olayları

Formla ilgili olaylar arasında submit ve input yer alır. submit olayı, bir form gönderildiğinde meydana gelir ve genellikle sayfanın yeniden yüklenmesine neden olur, ancak bunu önlemek için genellikle event.preventDefault() kullanılır.

Örnek: Form gönderiminde sayfa yeniden yüklenmesini engelleme

1<form id="myForm">
2    <input type="text" name="username">
3    <button type="submit">Submit</button>
4</form>
1const form = document.getElementById('myForm');
2
3form.addEventListener('submit', (event) => {
4    event.preventDefault();  // Prevent page reload
5    console.log('Form has been submitted');
6});
  • Bu kod, form gönderildiğinde sayfanın yeniden yüklenmesini engeller ve bunun yerine konsolda bir mesaj gösterir.

Olay Yayılımı (Kabarcıklanma ve Yakalama)

Olaylar iki aşamada yayılır: üstten alt öğelere doğru ilerleyen yakalama aşaması ve alttan üst öğelere doğru ilerleyen kabarcıklanma aşaması.

Olay Kabarcıklanması

Varsayılan olarak, olaylar en içteki öğede meydana gelir ve dışarı doğru yayılır. Bu duruma kabarcıklanma denir.

Örnek: Kabarcıklanma Örneği

1<div id="parentDiv">
2    <button id="myButton">Click me</button>
3</div>
 1const parent = document.getElementById('parentDiv');
 2const button = document.getElementById('myButton');
 3
 4parent.addEventListener('click', () => {
 5    console.log('Parent element was clicked');
 6});
 7
 8button.addEventListener('click', () => {
 9    console.log('Button was clicked');
10});
  • Bu örnekte, bir düğmeye tıkladığınızda önce düğmenin olayı, ardından üst öğenin olayı meydana gelir.

Olay Yakalama

addEventListener() içinde üçüncü argüman olarak true belirterek olayları yakalama aşamasında işleyebilirsiniz.

1parent.addEventListener('click', () => {
2    console.log('Capturing: Parent element was clicked');
3}, true);
  • Bu kod, üst öğenin tıklama olayını 'capturing' aşamasında işler ve konsolda bir mesaj gösterir.

stopPropagation() ile Yayılımı Önleme

Etkinliklerin yayılmasını event.stopPropagation() kullanarak durdurabilirsiniz.

1button.addEventListener('click', (event) => {
2    event.stopPropagation();  // Stop the event propagation
3    console.log('Button was clicked (no propagation)');
4});
  • Bu kod, düğmeye tıklandığında olayın yayılmasını engeller ve konsolda bir mesaj gösterir.

Etkinlikleri Kaldırma

removeEventListener() kullanarak olay dinleyicilerini kaldırabilirsiniz. Bir olay dinleyicisini kaldırmak için, addEventListener() içinde belirtilen fonksiyona bir referansınız olması gerekir.

1function handleClick() {
2    console.log('Clicked');
3}
4
5const button = document.getElementById('myButton');
6button.addEventListener('click', handleClick);
7button.removeEventListener('click', handleClick);  // Remove the event listener
  • Bu kod, düğmeden tıklama olay dinleyicisini kaldırır, böylece artık tıklandığında işlenmez.

Özel Etkinlikler

JavaScript'te, standart olaylara ek olarak özel olaylar oluşturabilir ve tetikleyebilirsiniz. CustomEvent yapıcısını kullanın.

 1document.addEventListener('myCustomEvent', (event) => {
 2    console.log(event.detail.message);  // Displays "Hello!"
 3});
 4
 5const event = new CustomEvent('myCustomEvent', {
 6    detail: {
 7        message: 'Hello!'
 8    }
 9});
10document.dispatchEvent(event);
  • Bu kod, myCustomEvent adlı özel bir olay oluşturup gönderir ve ayrıntılarını konsolda gösterir.

Özet

Olay yönetimi, web uygulamalarının etkileşimini artırmak için temel bir unsurdur. Olay yönetimi bileşenlerini kullanarak daha esnek ve gelişmiş bir kullanıcı deneyimi sunabilirsiniz.

  • Olay Dinleyicisi: Bir öğe üzerinde bir olay işleyici ayarlamak için addEventListener() kullanın.
  • Olay Nesnesi: Bir olay gerçekleştiğinde, detaylı bilgi almak için kullanılabilecek bir olay nesnesi iletilir.
  • Olay Yayılımı: Olaylar iki aşamada yayılır: kabarcıklanma (bubbling) ve yakalama (capturing).
  • Form Olayları ve Özel Olaylar: Form gönderimlerini ve kendi özel olaylarınızı işleyebilirsiniz.

Yukarıdaki makaleyi, YouTube kanalımızda Visual Studio Code'u kullanarak takip edebilirsiniz. Lütfen YouTube kanalını da kontrol edin.

YouTube Video