API etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
API etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

HTML API Ders_6 Server-Sent Events (SSE) - Sunucudan Gelen Olaylar

Sunucudan Gelen Olaylar (SSE/Server Sent Events)

Server sent olaylar (SSE), bir sayfaya sunucudan güncellemeler alması için izin verir.

Bir web sayfasının, kendini güncellemesi daha önce de mümkündü; fakat sayfa yeni güncellemeler için bizden izin almak zorundaydı.

Server-Sent Events ile web sayfaları otomatik olarak kendini yenileyebilmektedir.

Server-Sent güncellemelerine; Facebook/Twitter güncellemeleri, maç sonuçları güncellemeleri, stok fiyatları güncellemeleri, haber beselemeleri gibi güncellemeler örnek verilebilir. 

Tarayıcı Desteği

Aşağıdaki tablo, web tarayıcıların hangi sürümden itibaren bu özelliği destekeldiğini göstermektedir:

API
SSE6.0Desteklemiyor6.05.011.5

SSE Uyarısı Almak

Sayfamızda bir SSE güncellemesi uyarısı almak için, EventSource() metodunu kullanırız. Aşağıdaki örneğe dikkat edelim:


<h1>Sunucu güncellemeleri alnıyor:</h1>

<div id="sonuc"></div>

<script>
if(typeof(EventSource) !== "undefined") {
    var kaynak = new EventSource("demo_sse.php");
    kaynak.onmessage = function(event) {
        document.getElementById("sonuc").innerHTML += event.data + "<br>";
    };
} else {
    document.getElementById("sonuc").innerHTML = "Üzgünüm, tarayıcınız server-sent events özelliğini desteklemiyor...";
}
</script>


Yukarıdaki koda yakından bakalım:
  • Yeni bir EventSource objesi oluşturduk ve kaynak değişkenine yükledik. Bu objede parametre olarak güncellemenin alınacağı php sayfasını girdik:

var kaynak = new EventSource("demo_sse.php");
    kaynak.onmessage = function(event) {
        document.getElementById("sonuc").innerHTML += event.data + "<br>";
    };

  • onmessage olayının gerçekleştiği her durumda, sayfamızda bir güncelleme gerçekleşecektir. Güncelleme zamanı ise, "sonuc" adındaki html elemanında gösterilecektir.

SSE Desteği Kontrolü

Aşağıda, bir web tarayıcının Server-Sent Events desteği olup olmadığını test eden kodlar vardır:

if(typeof(EventSource) !== "undefined") {
    // Evet! Server-sent events desteği var!
    // Some code.....
} else {
    // Hayır! server-sent events desteği yok...
}

Sunucu Tarafındaki (Server-Side) Kodlar

Yukarıdaki örneğin çalışabilmesi için sunucumuzun da (server ımız) veri gönderme yeteneğine sahip olması gerekir. Sunucumuza bu yeteneği kazandırmak için yapmamız gereken şey, güncelleme gönderen bir php veya asp kodu yazmaktır.

Sunucu taraflı güncelleme yayını ayarı oldukça basittir: "Content-Type" başlığını "text/event-stream" olarak ayarlamanız yeterlidir. Bu ayarlamadan sonra, artık event (olay) yayınları yapabilirsiniz. Yukarıdaki örneğimizde SSE yapan php dosyamızın (demo_sse.php) kodları şöyledir:

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

$zaman = date('r');
echo "data: Son sunucu zamanı: {$zaman}\n\n";
flush();
?>

ASP kodu da şöyledir (demo_sse.asp)

<%
Response.ContentType = "text/event-stream"
Response.Expires = -1
Response.Write("data: 
Son sunucu zamanı: " & now())
Response.Flush()
%>

Bu kodların anlamı şudur:
  • Önce "header('Content-Type: text/event-stream');" başlığını atıyarak SSE için hazır hale geliyoruz.
  • Daha sonra, SSE dosyamızın belleğe alınmayacağından emin oluyoruz (header('Cache-Control: no-cache');).
  • Göndermek için data çıktısı alıyoruz (echo "data: Son sunucu zamanı: {$zaman}\n\n"). Bu çıktı her zaman data ifadesi ile başlamalıdır.
  • flush() metodu ile data çıktısını sonlandırıyoruz. 

EventSource Objesi (Nesnesi)

Yukarıdaki örnekte, mesaj almak için onmessage olayını kullandık. Fakat aşağıda tabloda verildiği gibi daha başka olaylar da kullanabiliriz:
Events (Olaylar)Tanımı
onopenBir sunucu bağlantısı açıldığında
onmessageBir mesaj alındığında
onerrorBir hata oluştuğunda


Bu ders, HTML serüvenimizin son dersidir. Bu ders ile birlikte, html ile ilgili bilmemiz gereken hemen her kodu görmüş olduk. Bundan sonra, CSS öğrenmenizi tavsiye ederim.

Bu serüvende kafamızı karıştıran kodlar muhtemelen JavaScript kodlarıdır. CSS öğrendikten sonra tavsiye edeceğim dil de JavaScript dilidir. Daha sonra da PHP öğrenmenizi tavsiye ediyorum. JavaScript'i iyi öğrenirsek PHP de çantada keklik olacaktır. Çünkü bu iki dilin mantığı birbirine çok yakındır.

Tabi ki her şeyde olduğu gibi bu işte de partik yapmak ve kafa yormak çok önemlidir. Umarım çok başarılı projelerde görev alırsınız ya da böyle projeleri yönetirsiniz...

Bizi takip ettiğiniz için teşekkürler.

CSS serüvenimize bekliyoruz: dersimizkod-css.blogspot.com.tr

HTML API Ders_5 Web Workers (Web İşçileri)

HTML5 Web Workers (Web İşçileri)

Bir web worker; arkaplanda, sayfanın performansını etkilemeden çalışan bir JavaScript kodudur.

Html sayfalarındaki scriptler (javascript kodları) çalışmaya başladığında, script bitene kadar html sayfası tepkisiz kalır. Fakat bir web worker çalışırken böyle olmaz. Siz, sayfade gezinmeye devam edersiniz, bu arada da web worker işini yapmaya devam eder.

Tarayıcı Desteği

Aşağıdaki tabloda, web tarayıcılarının hangi versiyondan itibaren web worker özelliğini desteklediğini görüyorsunuz:

API
Web Workers4.010.03.54.011.5

HTML Web Workers Örneği

Aşağıdaki örnek, arkaplanda, sayma yapan, basit bir web worker örneğidir:

<p>Say: <output id="sonuc"></output></p>
<button onclick="baslatWorker()">Worker'ı Baslat</button> 
<button onclick="durdurWorker()">Worker'ı Durdur</button>

<script>

var w;

function baslatWorker() {
    if(typeof(Worker) !== "undefined") {
        if(typeof(w) == "undefined") {
            w = new Worker("demo_workers.js");
        }
        w.onmessage = function(event) {
            document.getElementById("sonuc").innerHTML = event.data;
        };
    } else {
        document.getElementById("sonuc").innerHTML = "Üzgünüm tarayıcınız Web Workers API'sını desteklemiyor...";
    }
}

function durdurWorker() { 
    w.terminate();
    w = undefined;
}
</script>

Yukarıdaki kodları inceleyelim:
  • Önce, tarayıcı desteği var mı diye kontrol ettik: 
if(typeof(Worker) !== "undefined") {
    // evet! Web worker destekleniyor!
    // kodarımız buraya.....
} else {
    // Hayır! Web Worker desteği yok..
}

  • Web worker dosyası oluşturduk ve adını "demo_workers.js" koyduk. Bu dosya, basit bir sayma işlemi yapan bir javascript dosyasıdır. İçerdiği kodlar şöyledir:
var i = 0;

function zamanSayar() {
    i = i + 1;
    postMessage(i);
    setTimeout("zamanSayar()",500);
}

zamanSayar();

Yukarıdaki kodda, postMessage() metoduna dikkat çekmek istiyorum. Bu metot, html sayfasında bir mesaj göstermek için kullanılır.

NOT: Web workerlar, normalde bu kadar basit işlemler için değil, CPU (işlemci) odaklı görevler için kullanılır.

Bir Web Worker Objesi Oluşturmak

Artık bir worker olarak kullanabileceğimiz bir .js sayfamız var. Bu sayfayı bir worker sınıfı içinde çağırırsak, artık bir işçimiz olur. Aşağıdaki kodlar, bir kontrol yaptıktan sonra bir worker sınıfı oluşturup .js dosyasını worker yapıyor:

if(typeof(w) == "undefined") {
    w = new Worker("demo_workers.js");
}

Bundan sonra, web workerdan mesaj alıp mesaj gönderebiliriz.

Bir event listener (olay dinleyici) olan onmessage ekleyerek worker dosyasındaki mesajı html dökümanımızda gösteriyoruz:

w.onmessage = function(event){
    document.getElementById("result").innerHTML = event.data;
};

Web Worker Sonlandırma

Bir worker, kendi scriptinde bir sonlanma zamanı içermiyorsa, çalışmaya başladıktan sonra durmadan devem edecektir. Bu yüzden workerler için bir sonlandırma işlemine ihtiyaç duyarız.

Bu işlem için terminate() metodunu kullanıyoruz:

w.terminate();

Web Worker'ı Yeniden Kullanmak

Eğer sonlandırdıktan sonra, worker değişkenini "undefined" olarak ayarlarsak, workeri yeniden kullanabiliriz. 

w = undefined;

Web Workerlar ve DOM

Workerlar, harici dosyalarda ise aşağıdaki JavaScript objelerine geçişleri yoktur:
  • Window objesi
  • Document objesi
  • Parent objesi

HTML API Ders_4 App Cache (Uygulama Belleği)

Application Cache (App - Uygulama Belleği) Nedir?

Uygulama belleği, bir web uygulamasının offline (çevrimdışı) versiyonunu yapmanın kolay bir yoludur. Bunun için bir bellek klasörü oluşturur.

HTML5 ile birlikte gelen bu özellik sayesinde, internet bağlantısı olmadan da (offline) çalışan uygulamalar yapılabilmektedir.

Uygulama belleği, üç önemli avantaja sahiptir:

  1. Çevrimdışı (offline) tarama: Kullanıcılar, uygulamamızı çevrimdışı iken de kullanabilirler.
  2. Hız: Bellek kaynakları, bilgisayar üzerinde olacağı için daha hızlı çalışır.
  3. Daha az server bağlantısı: Tarayıcı, sadece güncelleme/değişiklikler için sunucu bağlantısına ihtiyaç duyacaktır.

Tarayıcı Desteği 

Aşağıdaki tablo, web tarayıcılarının hangi versiyondan itibaren bu özelliği desteklediğini göstermektedir:


API
Application Cache4.010.03.54.011.5

HTML Bellek Bildirimi (Cache Manifest) Örneği

Aşağıdaki örnek, bellek bildirimi içeren bir HTML dökümanıdır:

<!DOCTYPE html>
<html manifest="deneme_html.appcache">
<body>

<script src="deneme_time.js"></script>

<p id="timePara"><button onclick="getDateTime()">Tarih ve saati gör</button></p>

<p><img src="bir_resim.gif" width="336" height="69"></p>

<p> <a href="http://www.sitem.com/kalsor/app_cache_deneme_sayfasi.html" target="_blank">Bu sayfayı</a>, internet bağlantısı olamadan açtığınızda da resmin hala yüklenebilir olduğunu göreceksiniz.</p>

</body>
</html>

Cache Manifest Özelliğinin Temelleri

Cache manifest özelliğini kullanabilmek için, bu özelliği <html> tagının içinde ilan etmemiz gerekir:

<!DOCTYPE HTML>
<html manifest="demo.appcache">
...
</html>
  
manifest özelliğini (attribute) atadığımız bütün sayfalar, kullanıcı ziyaret ettikten sonra belleğe alınacaktır. Bir html dökümanında, manifest özelliği yoksa bu sayfa belleğe alınmayacaktır. (sayfa doğrudan bellek klasöründe gösterilmemişse...)

Html geliştiricileri, manifest dosyası için .appcache uzantısını tavsiye ediyorlar.

Bir manifest dosyası, uygun medya tipinde ayarlanmalıdır. Web sunucusunda yapılacak bu ayarda uygun medya tipi  "text/cache-manifest" şeklinde olmalıdır.

Manifest Dosyası

Manifest dosyası, basit bir text dosyasıdır. Bu dosya, web tarayıcısına, nelerin belleğe alınacağını, nelerin alınmayacağını söyler.

Bir manifest dosyasının üç bölümü vardır:
  • CACHE MANIFEST : İlk defa indirildiklerinde, açıldıklarında belleğe alınacak dosya listesini bu başlık altında toplarız.
  • NETWORK : Bu başlık altında, hiç bir zaman belleğe alınmayacak, internet bağlantısı ile online olarak açılacak dosyalar listelenir.
  • FALLBACK : Bu başlık altında, erişilemediğinde, gösterilecek sayfaların listesi oluşturulur.

CACHE MANIFEST

İlk satır (CACHE MANIFEST) zorunludur:

CACHE MANIFEST
/theme.css
/logo.gif
/main.js

Yukarıdaki cache manifest listesinde, üç dosya kaynağı belirtilmiştir. Bir CSS dosyası, bir GIF resim dosyası ve bir JavaScript dosyası. Manifest dosyası yüklendiğinde, web tarayıcı bu üç dosyayı, web sitesinin kök dizininden indirecektir. Bundan sonra, kullanıcı internete bağlanamasa da bu dosyalar açması mümkün olacaktır.

NETWORK

network bölümü, asla belleğe alınmayacak, offline iken açılamayacak dosyaların kaynağını/ismini içerir:

NETWORK:
login.asp

Bir asterik (yıldız) işareti, geriye kalan bütün diğer dosyaların, internet bağlantısı ile açılacağını belirtir.

NETWORK
*

FALLBACK

Aşağıdaki Fallback bölümü, offline.html adında bir dosya belirtir. Bu dosya, internet bağlantısı kurulamadığında, html klasöründeki bütün dosyaların yerine açılaktır.

FALLBACK:
/html/ /offline.html

Cache Dosyalarını Update Etmek

Bir uygulama belleğe alındığında, bu uygulamanın, aşağıdakilerden herhangi biri gerçekleşene kadar bellekte kalması gerekir:
  • Kullanıcı, tarayıcı belleğini sillene kadar
  • Manifest dosyası elden geçirilinceye kadar
  • Uygulama belleği, porgramlı olarak güncellenene kadar
Tam bir Cache Manifest Dosyası Örneği:

CACHE MANIFEST
# 2012-02-21 v1.0.0
/theme.css
/logo.gif
/main.js

NETWORK:
login.asp

FALLBACK:
/html/ /offline.html

Diyez işareti ile başlayan satır (# 2012-02-21 v1.0.0), bir yorum satırıdır fakat başka bir amaca daha hizmet eder. Bir uygulama belleği sadece manifest dosyası değiştiğinde güncellenir. Bir resim yayınladığınızda, ya da bir javascript fonksiyonunu değiştirdiğinizde bunlar belleğin yenilenmesini sağlamayacaktır. Fakat bu yorum satırındaki tarihi ve versiyonu güncellemeniz, tarayıcının bellek dosyalarını güncellemesini sağlayacaktır.

Application Cache Hakkında Notlar:

Neleri belleğe alacağımız konusunda dikkatli olmalıyız.

Bir dosya bir defa tarayıcı belleğine alındığında, tarayıcı bu dosyayı belleğe aldığı versiyonuyla göstermeye devam edecektir. Eğer bu dosaya bir değişiklik yaptıysanız, son haliyle belleğe alındığından emin olmak için manifest dosaysını değiştrimeyi unutmayın.

NOT: Tarayıcılar, bellek dataları için farklı boyut limitlerine sahiptir. (Bazı tarayıcılar, her bir site için 5MB limit belirler.)

HTML API Ders_3 Local Storage (Local Depolama)

HTML Local Depolama (Local Storage) Nedir?

  • Html local depolama, cookielerden (çerez/kurabiye) daha etkilidir.
  • Html local depolama, kullanıcının tarayıcısında bilgi depolamaya yarayan bir web uygulamasıdır.
  • HTML5'den önce, uygulama bilgileri (ziyaretçi bilgileri), serverdan talep edildirdi, serverler ise bu bilgileri cookielerde depo etmek zorundaydı. Bu da server taraflı bir işlemdi. Local depolama, daha güvenlidir, daha fazla bilgi depolamaya olanak sağlar ve websitemizin performansını da düşürmez.
  • Cookielerden farklıdır, bilgi depolama limiti çok daha fazladır (en az 5MB) ve bilgiler asla servera gönderilmez.
  • Local depolama, her domain için ayrı bir yerde yapılır. Bir domain adresine ait bütün sayfalar aynı local depolama alanını kullanır ve gerektiğinde aynı alana ulaşır.

Tarayıcı Desteği

Aşağıdaki tabloda, web tarayıcıların hangi sürümlerinden itibaren, local depolama özelliğini desteklediğini görmekteyiz:

API
Web Storage4.08.03.54.011.5

HTML Local Depolama Objeleri

Html local depolama özelliği, istemcide (kullanıcının tarayıcısında) depolanmak üzere iki çeşit obje sunar. Bunlar:

  • window.localStorage : Bilgileri, bir silme tarihi olmadan, sonsuza dek depolar.
  • window.sessionStorage: Bilgileri, tek bir oturum süresince depolar. Tarayıcı sayfası kapatıldığında, bilgiler de silinir.
Local depolamayı kullanmadan önce, localStorage ve sessionStorage için tarayıcı desteği var mı diye kontrol etmekte büyük fayda vardır. Bunun için aşağıdaki javascript kodları işimizi görecektir:

 if(typeof(Storage) !== "undefined") {
    // localStorage/sessionStorage ile ilgili kodlar...
} else {
    // Üzgünüm! Web Storage (Depolama) desteği yok..
}

localStorage Objesi

localStorage objesi, bilgileri bir silme tarihi olmadan depolar. Kullanıcı web tarayıcısını kapattığında, bilgiler silinmeyecektir. Yarın, haftaya, seneye... bilgiler tarayıcıda kayıtlı duracaktır. Örneğe dikkat edelim:

<div id="sonuc"></div>

<script>
// Tarayıcı desteği kontrolü
if (typeof(Storage) != "undefined") {
    // Bilgi oluşturma
    localStorage.setItem("soyad", "Kaya");
    // Bilgileri geri çağırma
    document.getElementById("sonuc").innerHTML = localStorage.getItem("soyad");
} else {
    document.getElementById("sonuc").innerHTML = "Üzgünüm, tarayıcınız Web Storage özelliğini desteklemior...";
}

</script>

Yukarıdaki kodlara yakından bakalım:

  • Bilgi oluşturma kısmındaki: localStorage.setItem("lastname", "Smith"); kodu veri/değeri bilgi çiftini oluşturur. Bu çiftte; veri="soyad"  ve değeri="Kaya" olarak girilmiştir.
  • Bilgileri geri çağırma kısmında, oluşturduğumuz soyad verisinin değerini aldık ve "sonuc" adlı html elemanının içeriğine gönderdik.
Yukarıdaki örnek şu şekilde de yazılabilirdi:

// Bilgileri oluşturma
localStorage.lastname = "Kaya";
// Bilgileri geri çağırma
document.getElementById("sonuc").innerHTML = localStorage.lastname;


Eğer, oluşturduğumuz "soyad" bilgisini silmek istersek de şu kod kalıbını kullanacağız:

localStorage.removeItem("lastname");

Javascript bilenler anlayacaktır: veri/değeri çifti bir string depolar. İhtiyacımız olduğunda, bu verileri diğer formatlara dönüştürmeyi unutmamalıyız.

Aşağıdaki kod, bir kullanıcın butonlarımızdan birine kaç defa bastığını sayar. Bu kodda, string olan değer bilgisi, number formatına dönüştürülmüştür. Böylece saymak mümkün olmuştur:

<!DOCTYPE html>
<html>
<head>
<script>
function tiklamaSayisi() {
    if(typeof(Storage) !== "undefined") {
        if (localStorage.clickcount) {
            localStorage.clickcount = Number(localStorage.clickcount)+1;
        } else {
            localStorage.clickcount = 1;
        }
        document.getElementById("sonuc").innerHTML = "Bu butona " + localStorage.clickcount + " defa tıkladınız.";
    } else {
        document.getElementById("sonuc").innerHTML = "Üzgünüm, tarayıcınız web storage özelliğini desteklemiyor...";
    }
}
</script>
</head>
<body>
<p><button onclick="tiklamaSayisi()" type="button">Buraya tıklayınız!</button></p>
<div id="sonuc"></div>
<p>Butona tıklayın ve sayının arttığını görün!</p>
<p>Tarayıcınızı veya pencerenizi kapatıp tekrar deneyin ve sayının kaldığı yerden devam ettiğini görün.(Sıfırlanmayacaktır.)</p>
</body>
</html>

Yukarıdaki kodların nasıl çalıştığını görmek için aşağıya bakınız:


Butona tıklayın ve sayının arttığını görün!
Tarayıcınızı veya pencerenizi kapatıp tekrar deneyin ve sayının kaldığı yerden devam ettiğini görün.(Sıfırlanmayacaktır.)


sessionStorage Objesi

sessionStorage objesi, localStorage objesi ile aynı görevi yapar, tek farkı sadece bir oturum için geçerli olmasıdır. Kullanıcının tarayıcısına gönderdiğimiz bilgi, kullanıcı pencereyi kapattığında otomatik olarak silinecektir. 

Aşağıdaki örnek, kullanıcının tek bir oturumda, bir butona kaç defa bastığını sayar:

<!DOCTYPE html>
<html>
<head>
<script>
function tiklamaSayisi() {
    if(typeof(Storage) !== "undefined") {
        if (sessionStorage.clickcount) {
            sessionStorage.clickcount = Number(sessionStorage.clickcount)+1;
        } else {
            sessionStorage.clickcount = 1;
        }
        document.getElementById("result").innerHTML = "Bu butona " + sessionStorage.clickcount + " defa tıkladınız.";
    } else {
        document.getElementById("sonuc").innerHTML = "Üzgünüm, tarayıcınız web storage özelliğini desteklemiyor...";
    }
}
</script>
</head>
<body>
<p><button onclick="clickCounter()" type="button">Lütfen tıklayınız</button></p>
<div id="result"></div>
<p>Butona tıklayın ve sayının arttığını görün!</p>
<p>Tarayıcınızı veya pencerenizi kapatıp tekrar deneyin ve sayının sıfırlandığını görün.</p>
</body>

</html>

Bu örnek, bir önceki ile çok benzer olduğu için uygulamasını size bırakıyoruz.

HTML API Ders_2 Sürükle Bırak (Drag/Drop)

HTML5 Drag ve Drop Özelliği (Sürükle ve Bırak)

  • Sürükle ve bırak özelliği, bir HTML5 standartıdır.
  • Bir objeyi, bir konumdan başka bir konuma sürüklemek için kullanılan oldukça yaygın bir özelliktir.
  • Sürükle ve bırak; HTML5 standartlarının bir parçasıdır ve her html elementi sürüklenebilir.

Tarayıcı Desteği

Aşağıdaki tabloda, tarayıcıların hangi sürümlerinden itibaren sürükle ve bırak özelliğini desteklediği verilmiştir:

API
Drag and Drop4.09.03.56.012.0

HTML Sürükle ve Bırak Örneği

Aşağıda bir sürükle ve bırak örneği verilmiştir:

<!DOCTYPE HTML>
<html>
<head>
<script>
function allowDrop(ev) {
    ev.preventDefault();
}

function drag(ev) {
    ev.dataTransfer.setData("text", ev.target.id);
}

function drop(ev) {
    ev.preventDefault();
    var data = ev.dataTransfer.getData("text");
    ev.target.appendChild(document.getElementById(data));
}
</script>
</head>
<body>

<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>

<img id="drag1" src="resim.gif" draggable="true"
ondragstart=
"drag(event)" width="336" height="569">

</body>
</html>


Kodlar biraz karmaşık gelebilir. Hadi bu kodları mercek altına alıp inceleyelim:
  • Öncelikle, sürüklenebilir bir html elemanı oluşturalım. draggable="true" özelliği html elemanlarını sürüklenebilir yapar : <img draggable="true">
  • Bundan sonraki aşamada, html elemanı sürüklendikten sonra neler olacağını belirlememiz gerekiyor. 
  • ondragstart="drag(event)" özelliği, drag() fonsiyonunu çağırır. drag() fonksiyonu da hangi verinin sürükleneceğini belirler. Bu fonksiyondaki dataTransfer.setData() metodu, sürüklenen verinin tipini ve değerini belirler. 
  • function drag(ev) {
    ev.dataTransfer.setData("text", ev.target.id);
    }  kodunda, sürüklenecek verinin tipi "
    text", değeri de elemanın id'si olarak ayarlanmıştır.("drag1") 
  • ondragover olayı (event), sürüklenecek objenin nereye bırakılacağını belirler.
  • Varsayılan olarak, html elemanları sürüklenebilir değildir.
  • Sürükleyip bırakabilmek için, html nesnelerinin varsayılan değerlerini değiştirmemiz gerekir.  Bu iş, event.preventDefault() metodunu çağırarak yapılıyor  Bu metot da allowDrop() fonksiyonunda çalıştırılmış. ondragover="allowDrop(event)" kodu ile bu metodu çağırmış oluyoruz. Böylece bu html elemanına, sürüklediğimiz bir nesneyi bırakabiliyoruz.
  • Sürüklenen veri bırakıldığında bir bırakma (drop) olayı (event) gerçekleşir. Şu kodlar, ondrop özelliğine drop() fonksiyonunu çağırır: ondrop="drop(event)"
  • drop() fonksiyonundaki preventDefault() metodu varsayılan değerleri görmezden gelmeyi sağlar. 
  • Sürüklenen data, dataTransfer.getData() methodu ile alınır. Bu metot, setData() methodunda döndürülen ve tipleri aynı olan bütün dataları döndürür.
  • Sürüklenen data, sürüklenen html elemanının id'sidir. ("drag1")
  • Böylece, sürüklenen data, bırakılacak elemana yerleştirilir.