Merhaba sevgili kod aşkı! 👋
Bugün tarayıcının gizli sihirbazını açıyoruz: Drag & Drop (Sürükle-Bırak)!
Kulağa basit geliyor ama aslında kullanıcı deneyimini oyunlaştıran, sayfayı canlandıran ve seni bir JS sihirbazına dönüştüren bir özellik. 🪄💖
“Fareyle oynarken öğrenmek: Dosyaları sürükle, kutulara bırak ve JS ile sihir yap!” sözünü hatırla, çünkü bugün hem eğleneceğiz hem de pratik bilgiler kazanacağız. 😎
1️⃣ Drag & Drop Nedir, Neden Önemli? 💌
Drag & Drop, kullanıcıların bir nesneyi tıklayıp sürükleyerek başka bir alana bırakabilmesini sağlayan HTML + JS özelliğidir.
Avantajları:
- Kullanıcı deneyimini eğlenceli ve interaktif yapar 🎮
- Formlar, dosya yüklemeleri, mini oyunlar ve listeler için birebir 📝
- Kod basit ama etkisi büyük ✨
Pratik İpucu:
- Sadece fare ile değil, dokunmatik ekranlar için de düşün.
touchstartvetouchendolaylarıyla mobil uyumlu sürükle-bırak yapabilirsin.
2️⃣ Temel HTML Yapısı 🔧
İlk adım olarak basit bir sürükleme ve bırakma kutusu oluşturalım:
<div id="kaynak" draggable="true"
style="width:100px;height:100px;background:red;margin:10px;color:white;display:flex;align-items:center;justify-content:center;">
Sürükle beni!
</div>
<div id="hedef"
style="width:150px;height:150px;background:lightblue;margin:10px;display:flex;align-items:center;justify-content:center;">
Bırak buraya
</div>
🎨 Açıklama:
draggable="true"ile öğeyi sürüklenebilir yaptık.- CSS ile kutuları daha görsel ve anlaşılır yaptık.
Pratik İpucu:
- Kutulara hover efekti eklemek kullanıcıya ipucu verir:
#hedef:hover {
border: 2px dashed darkblue;
}
3️⃣ JavaScript ile Temel Sihir 🪄
Şimdi sürükle ve bırak işlevini JS ile ekleyelim:
<script>
const kaynak = document.getElementById("kaynak");
const hedef = document.getElementById("hedef");
// Sürükleme başladığında
kaynak.addEventListener("dragstart", e => {
e.dataTransfer.setData("text/plain", e.target.id);
console.log("Sürükleme başladı!");
});
// Hedef üzerine gelindiğinde (drop izni)
hedef.addEventListener("dragover", e => e.preventDefault());
// Nesne bırakıldığında
hedef.addEventListener("drop", e => {
e.preventDefault();
const id = e.dataTransfer.getData("text/plain");
const elem = document.getElementById(id);
hedef.appendChild(elem);
console.log("Tebrikler! Nesneyi bıraktın 😍");
});
</script>
💡 Pratik İpuçları:
dragoverolayındae.preventDefault()kullanmak zorunlu, yoksa drop çalışmaz.dataTransferile birden fazla veri tipi (text, HTML) taşıyabilirsin.
4️⃣ Birden Fazla Nesne ile Oyunlaştırma 🚀
Artık birkaç nesneyi sürükleyip bırakabilirsin. Örnek:
<div class="item" draggable="true" style="width:80px;height:80px;background:orange;margin:5px;display:flex;align-items:center;justify-content:center;">1</div>
<div class="item" draggable="true" style="width:80px;height:80px;background:green;margin:5px;display:flex;align-items:center;justify-content:center;">2</div>
<div id="hedef2" style="width:200px;height:200px;background:lightgreen;margin:10px;display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:flex-start;">
Bırak buraya!
</div>
<script>
const items = document.querySelectorAll(".item");
const hedef2 = document.getElementById("hedef2");
items.forEach(item => {
item.addEventListener("dragstart", e => {
e.dataTransfer.setData("text/plain", e.target.innerText);
});
});
hedef2.addEventListener("dragover", e => e.preventDefault());
hedef2.addEventListener("drop", e => {
e.preventDefault();
const data = e.dataTransfer.getData("text/plain");
const yeni = document.createElement("div");
yeni.innerText = data;
yeni.style.width = "80px";
yeni.style.height = "80px";
yeni.style.background = "#FF69B4";
yeni.style.margin = "5px";
yeni.style.display = "flex";
yeni.style.alignItems = "center";
yeni.style.justifyContent = "center";
hedef2.appendChild(yeni);
console.log(`Nesne ${data} bırakıldı! 🎉`);
});
</script>
🎯 Açıklama:
- Artık kullanıcı birden fazla nesneyi sürükleyip bırakabilir.
- Kutulara stil vererek deneyimi daha görsel ve eğlenceli yaptık.
5️⃣ İleri Seviye İpuçları 💖
- Hover efektleri:
- Kullanıcı hedef kutuya geldiğinde border veya arka plan rengini değiştir:
#hedef2:hover { border: 3px dashed purple; background-color: lightyellow; } - Animasyon ekleme:
- CSS transition ile sürükleme ve bırakmayı daha yumuşak yapabilirsin:
.item, #hedef2 div { transition: all 0.3s ease; } - Veri tiplerini taşımak:
dataTransfer.setData("text/html", "<b>Bold</b>")ile HTML içeriği de taşıyabilirsin.
- Mobil uyumluluk:
- Touch event’ler ekle (
touchstart,touchmove,touchend).
- Touch event’ler ekle (
- Hata önleme:
- Sadece belirli öğeleri bırakabilmek için
idveyaclasskontrolü yap:
if(e.dataTransfer.getData("text/plain") === "1") { ... } - Sadece belirli öğeleri bırakabilmek için
6️⃣ Mini Proje Önerisi 🏆
Haydi bunu biraz oyunlaştırıp eğlenceli hale getirelim:
- 3 farklı renk kutu (1,2,3)
- Hedef kutuya bırak → puan +1
- Her bırakışta animasyon → kutu büyüyüp küçülür
- LocalStorage ile toplam puan sakla
Böylece hem JS hem HTML pratiği yaparsın, hem de interaktif bir deneyim kazanırsın 😍
7️⃣ Sonuç: Fareyle Sihir Yap! 🖱️✨
Drag & Drop, sayfanı canlı, interaktif ve eğlenceli hale getirir.
Artık sen:
- Kullanıcı ile oyunlaştırılmış etkileşimler oluşturabilirsin 🎮
- HTML + JS ile basit ama etkili bir deneyim yaratabilirsin
- Sürükle bırak ile sayfanı “Vay be!” dedirtecek bir hale getirebilirsin 😎
💡 İpucu: Bu mantığı liste sıralama, dosya yükleme ve mini oyunlar için de kullanabilirsin.

