
Anket Sonuçlarını Grafikle Gösteren Basit JavaScript Kodu Nasıl Yazılır?
Web siteleri, ziyaretçileriyle etkileşim kurmanın ve onların görüşlerini almanın birçok yolunu sunar. Bu yollardan biri de anketlerdir. Ancak bir anketin potansiyelini tam olarak ortaya çıkarmanın en etkili yollarından biri, elde edilen
veri işleme sonuçlarını sadece sayılarla değil, aynı zamanda göz alıcı grafiklerle sunmaktır. Bir SEO editörü olarak, bu tür görselleştirmelerin hem kullanıcı deneyimini zenginleştirdiğini hem de sitenizin AdSense performansına olumlu katkı sağlayabileceğini rahatlıkla söyleyebilirim. Basit bir JavaScript kodu ile anket sonuçlarını grafikle göstermek, düşündüğünüzden çok daha kolay ve sitenize büyük değer katabilir.
Bu makalede, karmaşık kütüphanelere veya sunucu tarafı programlamaya ihtiyaç duymadan, yalnızca HTML, CSS ve temel JavaScript kullanarak anket sonuçlarınızı nasıl görselleştireceğinizi adım adım inceleyeceğiz. Amacımız, sitenizde hızlı yüklenen, mobil uyumlu ve
kullanıcı deneyimi odaklı bir çözüm oluşturmak.
Neden Anket Sonuçlarını Görselleştirmeliyiz?
Veri, doğru şekilde sunulmadığında değerini kaybeder. Sayısal tablolar veya uzun metinler halindeki anket sonuçları, çoğu kullanıcı için sıkıcı ve anlaşılması zor olabilir. Oysa grafikler, bilgiyi çok daha hızlı ve etkili bir şekilde aktarır:
*
Hızlı Anlaşılabilirlik: Bir çubuk grafik, seçenekler arasındaki oranları bir bakışta gösterir. Kullanıcılar, karmaşık verileri okumaya zaman harcamak yerine, görsel bir temsil sayesinde anında sonuca ulaşabilir.
*
Gelişmiş Kullanıcı Deneyimi (UX): Ziyaretçileriniz, sitenizde etkileşimli ve görsel olarak çekici içerik bulduklarında daha fazla zaman geçirirler. Bu, hemen çıkma oranlarını düşürür ve sayfa görüntülemelerini artırabilir.
*
Paylaşılabilirlik: İyi tasarlanmış bir grafik, sosyal medyada veya diğer platformlarda paylaşılmaya daha yatkındır. Bu, sitenize organik trafik çekmenin etkili bir yoludur.
*
AdSense Gelirleri Üzerindeki Etki: Google AdSense, kullanıcıların sitenizde geçirdiği zaman ve etkileşim düzeyiyle yakından ilişkilidir. Kullanıcılar sitenizde daha uzun süre kalıp daha fazla sayfa görüntülerse, reklamları görme ve tıklama olasılıkları artar. Gelişmiş bir UX, dolaylı olarak AdSense gelirlerinizin artmasına yardımcı olur. Unutmayın, AdSense politikaları, kullanıcı deneyimini bozan veya yanıltıcı içeriklerden kaçınmanızı şiddetle tavsiye eder; görselleştirmeler ise tam tersi, değeri artırır.
Bu nedenlerle, anket sonuçlarını basit de olsa bir
görselleştirme aracıyla sunmak, modern web geliştiriciliği ve SEO stratejileri için vazgeçilmez bir unsurdur.
Basit Bir Anket Yapısı Oluşturma: HTML ve CSS Temelleri
Basit bir anket oluşturucu ve sonuç görüntüleyici için öncelikle temiz bir HTML yapısına ihtiyacımız var. Bu yapı, hem anket sorularını ve seçeneklerini hem de sonuçları göstereceğimiz alanları içerecek.
Başlangıç olarak, anket formunu oluşturmalıyız. Bu, bir soru ve birkaç radio butondan (veya checkbox'tan) oluşabilir. Örneğin:
```html
```
Burada, `anketKapsayici` div'i anket sorularını ve seçeneklerini içerirken, `sonucKapsayici` div'i sonuçlar için bir yer tutucu görevi görüyor. Başlangıçta bu div gizli (`display:none;`) olacak ve kullanıcı oy verdiğinde görünür hale gelecektir. `grafikAlani` ise JavaScript ile oluşturacağımız çubuk grafikleri barındıracak.
CSS tarafında ise, bu HTML elementlerini görsel olarak daha çekici hale getirmemiz gerekir. Temel bir anket için aşırıya kaçmamıza gerek yok. Odak noktamız, okunabilirliği ve sadeliği sağlamak:
```css
#anketKapsayici, #sonucKapsayici {
width: 80%;
max-width: 600px;
margin: 20px auto;
padding: 20px;
border: 1px solid #ddd;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
#grafikAlani div { /* Çubuk grafikler için stil */
background-color: #4CAF50;
color: white;
text-align: right;
padding: 5px;
margin-bottom: 5px;
border-radius: 3px;
transition: width 0.5s ease-in-out;
}
```
Bu temel CSS kuralları, anket kutucuklarına estetik bir görünüm kazandırırken, ileride JavaScript ile oluşturacağımız grafik çubukları için de bir başlangıç stili sunar. Özellikle `transition` özelliği, çubukların genişliği değiştiğinde hoş bir animasyon sağlayacaktır. Web sitelerinizde kullanıcı etkileşimini artırma konusunda daha fazla bilgi almak isterseniz, '/makale.php?sayfa=web-sitelerinde-kullanici-etkilesimini-artirma' makalemize göz atabilirsiniz.
JavaScript ile Anket Verilerini Toplama ve İşleme
Anketin beyni JavaScript kısmıdır. Burada, kullanıcıların oylarını nasıl toplayacağımızı ve bu oyları nasıl işleyip grafiklere dönüştüreceğimizi belirleyeceğiz.
İlk adım, kullanıcının hangi seçeneği seçtiğini tespit etmektir. Bir "Oy Ver" butonuna tıklandığında, JavaScript bu seçimi yakalamalıdır.
```javascript
// Anket seçenekleri ve başlangıç oy sayıları
let anketVerileri = {
"JavaScript": 0,
"Python": 0,
"Java": 0
};
// Sayfa yüklendiğinde localStorage'dan verileri çek (varsa)
if (localStorage.getItem('anketVerileri')) {
anketVerileri = JSON.parse(localStorage.getItem('anketVerileri'));
}
document.getElementById('oyVerButonu').addEventListener('click', function() {
const secilenDil = document.querySelector('input[name="programlamaDili"]:checked');
if (secilenDil) {
// Seçilen seçeneğin oy sayısını artır
anketVerileri[secilenDil.value]++;
// Verileri localStorage'a kaydet (sayfa yenilense de kalıcı olması için)
localStorage.setItem('anketVerileri', JSON.stringify(anketVerileri));
// Anket formunu gizle ve sonuçları göster
document.getElementById('anketKapsayici').style.display = 'none';
document.getElementById('sonucKapsayici').style.display = 'block';
// Grafiği çiz
grafikCiz(anketVerileri);
} else {
alert('Lütfen bir seçenek belirleyin.');
}
});
```
Yukarıdaki mantık, `anketVerileri` adında bir JavaScript objesi kullanarak her bir anket seçeneğinin oy sayısını tutar. Kullanıcı oy verdiğinde, seçilen seçeneğin oy sayısı artırılır. Burada basit bir
DOM manipülasyonu ile anket formunu gizleyip sonuç bölümünü görünür hale getiriyoruz.
Verilerin sayfalar arası kalıcılığını sağlamak için `localStorage` kullanmak pratik bir yöntemdir. Bu sayede, kullanıcı sayfayı yenilese bile daha önce verilmiş oylar kaybolmaz. Ancak gerçek bir üretim ortamında, çok daha güvenli ve tutarlı bir veri saklama yöntemi için sunucu tarafı bir veritabanı kullanılması gerektiğini belirtmekte fayda var. Bu makalenin konusu "basit JavaScript" olduğu için, client-side (istemci tarafı) bir çözüm olan `localStorage` yeterli olacaktır.
Grafik Gösterimi İçin Temel Yaklaşımlar
Anket sonuçlarını grafik olarak göstermenin birçok yolu vardır. En basiti, HTML `div` elementlerini kullanarak çubuk grafikler (bar chart) oluşturmaktır. Bu yöntem, CSS ile kolayca stilize edilebilir ve JavaScript ile dinamik olarak genişlikleri ayarlanabilir. Pasta grafikleri veya daha karmaşık görselleştirmeler için Chart.js gibi kütüphaneler mevcut olsa da, makalemizin amacı "basit JavaScript" olduğu için, temel çubuk grafik yöntemine odaklanacağız.
Çubuk grafik oluştururken ana mantık şudur:
1. Toplam oy sayısını bul.
2. Her bir seçeneğin toplam oylara oranını (yüzdesini) hesapla.
3. Bu yüzdelere göre HTML `div` elementlerinin genişliklerini ayarla.
Bu adımlar, herhangi bir dış kütüphaneye ihtiyaç duymadan, yalnızca JavaScript ve CSS'in gücüyle gerçekleştirilebilir. Bu tür etkileşimli sayfalar oluşturmak için JavaScript'in ne kadar temel bir araç olduğunu daha iyi anlamak için '/makale.php?sayfa=javascript-ile-etkilesimli-sayfalar' makalemizi okuyabilirsiniz.
Adım Adım Grafik Oluşturma Mantığı (JavaScript)
Şimdi, oy verildikten sonra sonuçları görselleştirecek olan `grafikCiz` fonksiyonunu detaylandıralım.
```javascript
function grafikCiz(veriler) {
const grafikAlani = document.getElementById('grafikAlani');
grafikAlani.innerHTML = ''; // Önceki grafikleri temizle
let toplamOy = 0;
for (const secenek in veriler) {
toplamOy += veriler[secenek];
}
if (toplamOy === 0) {
grafikAlani.innerHTML = '
Henüz hiç oy kullanılmadı.
';
return;
}
for (const secenek in veriler) {
const oySayisi = veriler[secenek];
const yuzde = (oySayisi / toplamOy) * 100;
// Her seçenek için bir çubuk oluştur
const barDiv = document.createElement('div');
barDiv.className = 'grafikCubugu'; // CSS ile stilize edilecek
barDiv.style.width = yuzde + '%';
barDiv.textContent = `${secenek}: ${oySayisi} oy (${yuzde.toFixed(1)}%)`;
grafikAlani.appendChild(barDiv);
}
}
```
Bu `grafikCiz` fonksiyonu aşağıdaki adımları takip eder:
1.
Mevcut Grafiği Temizleme: Her yeni oyda grafiğin güncellenebilmesi için, öncelikle `grafikAlani` içindeki tüm eski çubukları temizler.
2.
Toplam Oy Sayısını Hesaplama: Tüm seçeneklerin toplam oy sayısını buluruz. Bu, yüzdeleri hesaplamak için gereklidir.
3.
Yüzde Hesaplama: Her bir seçeneğin oy sayısı, toplam oy sayısına bölünüp 100 ile çarpılarak yüzdesi bulunur. `toFixed(1)` ile yüzdeyi bir ondalık basamağa yuvarlarız.
4.
Çubuk Elementleri Oluşturma: Her bir seçenek için yeni bir `div` elementi (`barDiv`) oluşturulur.
5.
Stil Uygulama ve İçerik Ekleme: Bu `div` elementine, daha önce CSS'te tanımladığımız `grafikCubugu` sınıfı verilir (veya direkt stil eklenebilir). En önemlisi, `width` özelliği, hesapladığımız yüzde değerine göre ayarlanır. Ayrıca, çubuğun içine seçeneğin adı, oy sayısı ve yüzdesi metin olarak eklenir.
6.
DOM'a Ekleme: Oluşturulan `barDiv`, `grafikAlani` içine `appendChild` metodu ile eklenir.
Bu süreç, her oy verilişinde veya sayfa yüklendiğinde (eğer `localStorage`'dan veri çekiliyorsa), anket sonuçlarını dinamik ve görsel olarak zengin bir çubuk grafiğe dönüştürür.
Kullanıcı Deneyimi ve AdSense Politikaları Bağlamında Optimizasyon
Bir SEO editörü olarak, bu tür interaktif özelliklerin AdSense gelirleriniz üzerindeki potansiyelini her zaman vurgularım. Ancak bu potansiyeli maksimize etmek ve aynı zamanda Google'ın
AdSense politikalarına uymak için bazı optimizasyonları göz önünde bulundurmak şarttır:
*
Hız ve Performans: Kullandığımız basit JavaScript kodu, ağır kütüphanelerden arındırılmış olduğu için çok hızlı yüklenir. Bu, hem kullanıcı deneyimi hem de SEO açısından kritik öneme sahiptir. Yavaş yüklenen siteler kullanıcı kaybeder ve AdSense reklamları bile doğru düzgün görüntülenmeyebilir.
*
Mobil Uyumluluk: CSS'inizi `flexbox` veya `grid` gibi modern tekniklerle tasarlayarak veya `@media` sorguları kullanarak grafiklerinizin ve anketinizin her cihazda (telefon, tablet, masaüstü) düzgün görünmesini sağlayın. Mobil uyumluluk, AdSense'in en önem verdiği unsurlardan biridir.
*
Netlik ve Şeffaflık: Anketin ne hakkında olduğunu, seçenekleri ve sonuçları açıkça belirtin. Kullanıcıları yanıltıcı veya manipülatif başlıklar/seçeneklerden kesinlikle kaçının. AdSense, yanıltıcı içeriklere tolerans göstermez.
*
Görsel Hiyerarşi: Anketin kendisi ve sonuç grafiği, sayfanızdaki diğer içeriklerle bütünlük içinde olmalı, ancak yine de dikkat çekici ve kolayca bulunabilir olmalıdır. Reklamlarınızı bloke etmediğinden veya onlarla çatışmadığından emin olun.
*
Erişilebilirlik: Ekran okuyucu kullanan kişiler için anket seçeneklerini ve sonuçlarını doğru bir şekilde etiketlemek (`aria-label`, `alt` metinleri) önemlidir. Bu, herkes için kapsayıcı bir deneyim sunar ve AdSense politikalarıyla da uyumludur.
*
Tekrarlanan Oy Engelleme: Daha gelişmiş bir sistemde, kullanıcıların birden fazla oy vermesini engellemek için IP adresi veya çerez tabanlı kontroller eklenebilir. Bu, anket sonuçlarının doğruluğunu artırır ve manipülasyonu önler. Ancak basit bir client-side çözümde bu, her zaman %100 kesin olmayabilir.
Bu optimizasyonlar, sitenizin genel kalitesini artırarak hem organik arama performansınızı hem de AdSense üzerinden elde edeceğiniz geliri doğrudan etkileyecektir.
İleri Seviye Düşünceler (Basitlikten Uzaklaşmadan)
Bu makalede "basit" bir yaklaşıma odaklanmış olsak da, temel bilgilerle bile sisteminizi biraz daha ileri taşıyabilirsiniz:
*
Veri Kalıcılığı: Şu an `localStorage` kullanarak verileri sadece kullanıcının kendi tarayıcısında saklıyoruz. Daha kalıcı ve doğru sonuçlar için, oy verilerini bir sunucuya (örneğin PHP, Node.js veya Python tabanlı bir backend) göndererek bir veritabanında saklayabilirsiniz. Bu, anket sonuçlarının herkes için tutarlı olmasını sağlar.
*
Animasyonlar: CSS `transition` özelliği, çubukların genişliği değiştiğinde yumuşak bir animasyon sağlar. `transform` veya `opacity` gibi başka CSS özellikleriyle de ufak ama hoş animasyonlar ekleyerek
kullanıcı deneyimini daha da geliştirebilirsiniz. Ancak abartılı ve dikkat dağıtıcı animasyonlardan kaçınmak önemlidir.
*
Anketi Sıfırlama: Test amaçlı veya belirli aralıklarla anket sonuçlarını sıfırlamak isteyebilirsiniz. Bunun için, `localStorage.removeItem('anketVerileri')` komutunu çalıştıran bir yönetici butonu veya zamanlayıcı eklenebilir.
*
Birden Fazla Anket: Eğer sitenizde birden fazla anket göstermek isterseniz, her anket için benzersiz bir ID kullanarak `anketVerileri` objesini ve `localStorage` key'lerini farklılaştırabilirsiniz.
Bu ek özellikler, temel JavaScript bilginizi biraz daha zorlayabilir ancak yine de dış kütüphanelere ihtiyaç duymadan uygulanabilir niteliktedir.
Sonuç
Anket sonuçlarını grafikle göstermek, web sitenizin etkileşimini artırmanın, ziyaretçilerinize değerli bilgiler sunmanın ve dolaylı olarak AdSense gelirlerinizi artırmanın basit ama etkili bir yoludur. Temel HTML, CSS ve JavaScript bilgisiyle, karmaşık kütüphanelere bağımlı kalmadan, kendi
basit anket oluşturucu JS ile dinamik ve görsel olarak çekici grafikler oluşturabilirsiniz.
Bu yaklaşım, hızlı yüklenen sayfalar, mobil uyumluluk ve geliştirilmiş bir kullanıcı deneyimi sunarak sitenizin hem arama motoru sıralamalarında hem de AdSense performansında olumlu sonuçlar doğuracaktır. Unutmayın, Google AdSense politikaları her zaman kullanıcı odaklı yaklaşımları teşvik eder ve bu tür şeffaf, bilgilendirici ve etkileşimli özellikler, sitenizin genel kalitesini yükseltir. Kendi anketlerinizi oluşturarak ziyaretçilerinizle daha derin bir bağ kurmaya ve sitenizin potansiyelini tam anlamıyla ortaya çıkarmaya başlayın!
Yazar: Serkan Çelik
Ben Serkan Çelik, bir Dijital Pazarlama Uzmanı. Platformumuzda teknolojiyi herkes için anlaşılır kılmak, karmaşık konuları basitleştirerek okuyucularımızın günlük yaşamında pratik olarak kullanabileceği bilgiler sunmak, yeni beceriler kazandırmak, farkındalık oluşturmak ve teknoloji dünyasındaki gelişmeleri anlaşılır bir dille aktarmak amacıyla yazıyorum.