Takip et

Giriş: SVG ve GreenSock (GSAP) ile Web Animasyonlarının Gücü

Giriş: SVG ve GreenSock (GSAP) ile Web Animasyonlarının Gücü Web siteleri ve uygulamalar, kullanıcı deneyimini zenginleştirmek için giderek daha fazla animasyona ihtiyaç duymaktadır.

Giriş: SVG ve GreenSock (GSAP) ile Web Animasyonlarının Gücü

Web siteleri ve uygulamalar, kullanıcı deneyimini zenginleştirmek için giderek daha fazla animasyona ihtiyaç duymaktadır. Bu animasyonların temel taşlarından biri Ölçeklenebilir Vektör Grafikleri (SVG) ve onları canlandırmak için kullanılan güçlü bir JavaScript kütüphanesi olan GreenSock Animation Platform (GSAP)’tır. SVG’ler, çözünürlükten bağımsız olmaları ve küçük dosya boyutları sunmaları nedeniyle logolar, ikonlar ve karmaşık çizimler için idealdir. GreenSock (eski adıyla TweenMax/TweenLite) ise, tarayıcılar arası uyumluluk, performans ve esneklik açısından sektör standardı haline gelmiş, animasyonları kolayca oluşturmanızı sağlayan bir araçtır.

Bu rehberde, popüler Alligator.io web sitesinin logosunu SVG ve GreenSock kullanarak nasıl canlandıracağımızı adım adım inceleyeceğiz. Bu süreç, SVG’nin yapısını anlamaktan, GreenSock’un temel özelliklerini kullanmaya ve etkileyici, performanslı animasyonlar oluşturmaya kadar uzanacaktır. Amacımız, sadece bir logoyu canlandırmak değil, aynı zamanda bu teknolojilerin gücünü ve web projelerinizde nasıl kullanılabileceğini göstermektir.

Alligator.io SVG Logo Yapısını Anlamak

Bir SVG logosunu canlandırmadan önce, onun yapısını iyi anlamak kritik öneme sahiptir. Alligator.io logosu, genellikle bir timsah kafası figürü ve “Alligator.io” metninden oluşur. Bu iki ana bileşen, SVG içinde farklı elementler olarak tanımlanır ve her birine benzersiz bir kimlik (ID) atanır, böylece GreenSock ile kolayca hedeflenebilirler.

Temel SVG Elementleri ve Logomuzdaki Yeri

Bir SVG dosyası, XML tabanlı bir yapıya sahiptir ve çeşitli şekil elementleri içerir:

  • : En dıştaki kapsayıcı elementtir. width, height, viewBox ve xmlns gibi özellikler içerir. viewBox, SVG’nin kendi iç koordinat sistemini tanımlar ve responsive davranış için hayati öneme sahiptir.
  • : En güçlü ve esnek SVG elementidir. Karmaşık şekiller çizmek için kullanılır. Timsah kafası gibi figürler genellikle bir veya daha fazla elementiyle oluşturulur. d (data) niteliği, şeklin çizim komutlarını içerir.
  • : Metin içeriğini tanımlar. Logodaki “Alligator.io” yazısı bu elementle oluşturulur. x, y, font-family, font-size, fill gibi özelliklerle metnin konumu ve stili belirlenir.
  • : Bir grup elementidir. İlgili SVG elementlerini (örneğin, timsah kafasının tüm parçalarını) bir araya getirerek onları tek bir birim olarak dönüştürmenizi veya canlandırmanızı sağlar.

Örnek SVG Yapısı:

Alligator.io logosu için basitleştirilmiş bir SVG yapısı aşağıdaki gibi olabilir. Bu yapıda, timsah kafası için bir ve metin için bir elementi kullanılmıştır. Her bir elemente animasyon için kolayca hedeflenebilecek bir id verilmiştir.


  
    
    
  
  Alligator.io

Bu yapıyı anladıktan sonra, GreenSock ile bu elementleri nasıl hareketlendireceğimize geçebiliriz.

GreenSock (GSAP) ile Animasyona Başlamak

GreenSock, web’deki en güçlü animasyon kütüphanelerinden biridir. CSS, SVG, Canvas, React, Vue, Angular gibi birçok farklı teknolojiyi sorunsuz bir şekilde canlandırabilir.

GSAP Kurulumu

GSAP’yi projenize dahil etmenin iki ana yolu vardır:

1. CDN Kullanımı (Hızlı Başlangıç İçin): HTML dosyanızın veya kapanış etiketinden hemen önce aşağıdaki script etiketini ekleyebilirsiniz:

2. npm ile Kurulum (Modern Projeler İçin): Eğer bir build aracı (Webpack, Vite vb.) kullanıyorsanız, GSAP’yi npm ile kurabilir ve modüller olarak import edebilirsiniz:

npm install gsap

Ardından JavaScript dosyanızda:

import { gsap } from "gsap";
    // Eğer SplitText gibi eklentiler kullanacaksanız:
    // import { SplitText } from "gsap/SplitText";

Temel GSAP Animasyonları

GSAP’nin kalbinde gsap.to(), gsap.from(), ve gsap.fromTo() metodları bulunur.

  • gsap.to(hedef, {özellikler}): Hedefin mevcut durumundan belirtilen özelliklere doğru animasyon yapar.
  • gsap.from(hedef, {özellikler}): Hedefin belirtilen özelliklerden mevcut durumuna doğru animasyon yapar.
  • gsap.fromTo(hedef, {başlangıçÖzellikleri}, {bitişÖzellikleri}): Hedefi belirtilen başlangıç durumundan bitiş durumuna canlandırır.

hedef parametresi bir CSS seçici ("#id", ".class"), bir DOM elementi veya bir element dizisi olabilir. özellikler objesi ise canlandırmak istediğiniz CSS özelliklerini (veya GSAP’ye özel özellikleri) ve animasyon ayarlarını (duration, ease, delay vb.) içerir.

SVG Animasyonuna Özel Özellikler:

SVG elementlerini canlandırırken, CSS özelliklerinin yanı sıra bazı SVG’ye özgü özellikleri de kullanabiliriz:

  • x, y: Elementin konumunu değiştirir.
  • scale: Elementin boyutunu ayarlar.
  • rotation: Elementi döndürür. transformOrigin ile birlikte kullanılırsa daha etkili olur.
  • opacity: Saydamlık.
  • fill, stroke: Dolgu ve çizgi rengini canlandırır.
  • strokeDasharray, strokeDashoffset: SVG elementleri için çizim efektleri oluşturmak amacıyla kullanılır.
  • transformOrigin: Dönüşümlerin (scale, rotation) hangi noktadan yapılacağını belirler. SVG için genellikle "center center" veya piksel değerleri kullanılır.

Alligator.io SVG Logosu Animasyonu Adım Adım

Şimdi, yukarıda tanımladığımız basitleştirilmiş Alligator.io logosunu canlandıralım. Animasyonumuz, timsah kafasının çizilmesiyle başlayacak, ardından metin içeriği belirecek ve son olarak hafif bir sallanma efekti eklenecektir.

Adım 1: SVG Hazırlığı ve CSS Stilleri

Öncelikle, HTML dosyamıza SVG’mizi ekleyelim ve animasyona başlamadan önce bazı başlangıç CSS stillerini uygulayalım. Özellikle elementi için çizim efekti hazırlığı yapacağız.




    
    
    Alligator.io SVG Animasyonu
    



    
      
        
      
      Alligator.io
    

    
    

Adım 2: Timsah Kafası İçin Çizim Efekti (Stroke Drawing)

SVG elementlerini çizim efektiyle canlandırmak için stroke-dasharray ve stroke-dashoffset özelliklerini kullanırız.

  1. getTotalLength(): elementinin toplam uzunluğunu piksel cinsinden verir.
  2. stroke-dasharray: Çizginin ve boşlukların uzunluğunu tanımlar. pathLength değerini verirsek, çizgi tam uzunlukta bir çizgi ve bir boşluktan oluşur.
  3. stroke-dashoffset: Çizginin başlangıç noktasını kaydırır. pathLength değerine ayarlarsak, çizgi tamamen görünmez olur. Animasyon sırasında bu değeri 0’a getirerek çizginin belirmesini sağlarız.
const alligatorHead = document.getElementById('alligatorHead');
const pathLength = alligatorHead.getTotalLength();

// Başlangıçta çizgiyi gizle
gsap.set(alligatorHead, {
    strokeDasharray: pathLength,
    strokeDashoffset: pathLength
});

Adım 3: Metin Animasyonu

Metin elementini basitçe saydamlık ve konum değişimi ile canlandırabiliriz.

const alligatorText = document.getElementById('alligatorText');
// Metnin başlangıç opacity ve transform değerleri CSS'de ayarlandı.

Adım 4: Kombine Animasyon ve Zaman Çizelgesi (Timeline)

Birden fazla animasyonu sıralı veya eş zamanlı olarak çalıştırmak için GSAP’nin gsap.timeline() metodunu kullanırız. Bu, animasyon akışını yönetmek için harika bir araçtır.

document.addEventListener('DOMContentLoaded', () => {
    const alligatorHead = document.getElementById('alligatorHead');
    const alligatorText = document.getElementById('alligatorText');
    const pathLength = alligatorHead.getTotalLength();

    // Animasyondan önce timsah kafasını gizle
    gsap.set(alligatorHead, {
        strokeDasharray: pathLength,
        strokeDashoffset: pathLength,
        fill: "transparent" // Başlangıçta dolguyu da gizle
    });

    // Metnin başlangıç durumunu CSS'de ayarladık (opacity: 0, translateY(20px))

    const tl = gsap.timeline({ defaults: { ease: "power2.out" } });

    tl.to(alligatorHead, {
        strokeDashoffset: 0, // Çizgiyi çiz
        duration: 1.5,
        delay: 0.5 // Yarım saniye beklet
    })
    .to(alligatorHead, {
        fill: "#33CC33", // Çizim bittikten sonra içini doldur
        duration: 0.8
    }, "-=0.5") // Önceki animasyon bitmeden 0.5 saniye önce başla
    .to(alligatorText, {
        opacity: 1, // Metni göster
        y: 0,       // Metni orijinal konumuna getir
        duration: 1,
        ease: "back.out(1.7)" // Geri sekme efekti
    }, "-=0.6") // Önceki animasyon bitmeden 0.6 saniye önce başla
    .to("#alligatorHeadGroup", { // Tüm timsah kafası grubunu hedefle
        rotation: 5,
        yoyo: true, // Tekrarla ve geri dön
        repeat: -1, // Sonsuz tekrar
        duration: 2,
        ease: "sine.inOut",
        transformOrigin: "center center" // Dönüşüm merkezini ayarla
    }, "+=0.5"); // Metin animasyonundan 0.5 saniye sonra başla
});

Bu kod parçası:
1. Timsah kafasını çizim efektiyle 1.5 saniyede çizer.
2. Çizim efekti bitmeden 0.5 saniye önce timsah kafasının içini doldurur.
3. Timsah kafası dolarken, metin opacity ve y (dikey konum) animasyonu ile belirir ve hafifçe yukarı sıçrar.
4. Son olarak, tüm timsah kafası grubuna hafif bir sallanma (rotation) efekti eklenir ve bu sonsuz döngüde devam eder.

Pratik İpuçları ve En İyi Uygulamalar

Performans Optimizasyonu

  • GPU Hızlandırmalı Özellikler: x, y, scale, rotation, opacity gibi özellikler modern tarayıcılarda GPU tarafından hızlandırılır, bu da daha akıcı animasyonlar sağlar. width, height, left, top gibi özelliklerden kaçının.
  • Karmaşık SVG’leri Optimize Edin: Logoları veya ikonları bir tasarım yazılımından dışa aktarırken (örneğin Adobe Illustrator, Figma, Sketch), gereksiz noktaları ve grupları temizleyin. SVGO gibi araçlar kullanarak SVG dosya boyutunu küçültebilirsiniz.
  • Animasyonları Akıllıca Kullanın: Her elementin hareket etmesine gerek yoktur. Odaklanmış ve anlamlı animasyonlar, kullanıcı deneyimini iyileştirirken performansı düşürmez.

Erişilebilirlik (Accessibility)

  • Anlamlı Metin Alternatifleri: SVG logoları için </code> ve <code><desc></code> elementlerini kullanarak veya <code><img role="img" alt="Alligator.io Logo"></code> gibi bir yapıda <code>alt</code> metni sağlayarak ekran okuyucular için anlamlı açıklamalar sunun.</li> <li><strong>Hareket Hassasiyeti:</strong> Bazı kullanıcılar hareketli animasyonlara karşı hassas olabilir. <code>prefers-reduced-motion</code> medya sorgusunu kullanarak bu kullanıcılar için daha az hareketli veya hiç hareketli olmayan versiyonlar sunun. GSAP bunu destekler: <pre><code class="language-javascript">if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) { // Animasyonları devre dışı bırak veya basitleştir gsap.set("#alligatorHeadGroup", { rotation: 0 }); tl.kill(); // Zaman çizelgesini durdur }</code></pre> </li> </ul> <h3 id="responsive-tasarim">Responsive Tasarım</h3> <ul> <li><strong><code>viewBox</code> Kullanımı:</strong> SVG’nizin <code>viewBox</code> niteliğini doğru bir şekilde ayarlamak, SVG’nizin kapsayıcı elementine göre otomatik olarak ölçeklenmesini sağlar. <code>width</code> ve <code>height</code> niteliklerini yüzde (%) cinsinden vermek veya CSS ile kontrol etmek, responsive davranışı pekiştirir.</li> <li><strong>CSS ile Boyutlandırma:</strong> SVG’yi bir <code> <div></code> içine yerleştirip bu div’in boyutlarını ve <code>max-width</code> gibi özelliklerini CSS ile kontrol etmek, genellikle en iyi responsive sonuçları verir.</li> </ul> <h3 id="gelistirici-araclari">Geliştirici Araçları</h3> <p>Tarayıcıların geliştirici araçlarını (DevTools) kullanarak SVG elementlerini inceleyebilir, GSAP tarafından uygulanan CSS dönüşümlerini görebilir ve animasyonları adım adım takip edebilirsiniz. Bu, hata ayıklama ve ince ayar yapma için paha biçilmezdir.</p> <h2 id="sonuc-sss">Sonuç ve Sıkça Sorulan Sorular (SSS)</h2> <p>Bu rehberde, Alligator.io SVG logosunu GreenSock (GSAP) kullanarak nasıl canlandıracağımızı adım adım gördük. SVG’nin yapısal avantajlarını ve GSAP’nin animasyon gücünü bir araya getirerek, web sitelerimize etkileyici ve performanslı görsel öğeler ekleyebileceğimizi anladık. Çizim efektlerinden metin animasyonlarına ve zaman çizelgelerinin gücüne kadar birçok konuya değindik. Bu teknikleri kendi projelerinizde kullanarak yaratıcılığınızı serbest bırakabilir ve kullanıcılarınıza unutulmaz deneyimler sunabilirsiniz.</p> <h3 id="sss">Sıkça Sorulan Sorular</h3> <h4 id="gsap-ucretli-mi">GSAP ücretli mi?</h4> <p>GSAP’nin temel kütüphanesi (Core) ve birçok eklentisi (Plugins) çoğu proje için ücretsizdir. Ticari projelerde de kullanılabilir. Ancak, bazı özel eklentiler (örneğin <code>MorphSVGPlugin</code>, <code>SplitTextPlugin</code>, <code>ScrollTrigger</code>‘ın bazı gelişmiş özellikleri) Club GreenSock üyeliği gerektirir. Bu eklentiler genellikle çok özel ve karmaşık animasyonlar için tasarlanmıştır.</p> <h4 id="svg-animasyonlari-seo-dostu-mu">SVG animasyonları SEO dostu mu?</h4> <p>Evet, SVG’ler metin tabanlı oldukları için arama motorları tarafından okunabilirler. Animasyonlar doğrudan SEO’yu etkilemez, ancak daha iyi bir kullanıcı deneyimi sundukları için dolaylı olarak sitenizin genel performansına ve kullanıcı etkileşimine katkıda bulunabilirler. Önemli olan, animasyonun performans düşüşüne neden olmaması ve erişilebilirlik standartlarına uygun olmasıdır.</p> <h4 id="karmasik-svgleri-nasil-optimize-edebilirim">Karmaşık SVG’leri nasıl optimize edebilirim?</h4> <p>Karmaşık SVG’ler için <code>SVGO</code> gibi araçlar kullanarak gereksiz meta verileri, boşlukları, yorumları ve grupları kaldırabilirsiniz. Ayrıca, tasarım yazılımınızda dışa aktarırken optimizasyon seçeneklerini kullanın. Çok karmaşık grafikler için, animasyon öncesinde SVG’yi rasterize etmeyi veya daha basit bir versiyonunu kullanmayı düşünebilirsiniz.</p> <h4 id="animasyonlar-tum-tarayicilarda-calisir-mi">Animasyonlar tüm tarayıcılarda çalışır mı?</h4> <p>GreenSock (GSAP), tarayıcılar arası uyumluluk konusunda mükemmel bir geçmişe sahiptir ve eski tarayıcılar da dahil olmak üzere geniş bir yelpazede sorunsuz çalışır. SVG’nin kendisi de modern tarayıcılar tarafından iyi desteklenir. Ancak, çok eski tarayıcılarda bazı gelişmiş SVG veya CSS özellikleri tam olarak desteklenmeyebilir. GSAP, genellikle bu tür uyumsuzlukları kendi içinde ele alır ve mümkün olan en iyi deneyimi sunar.</p> <p></body></p> </div> <div class="cs-entry__footer"> <div class="cs-entry__footer-left"> <div class="cs-entry__post-meta" ><div class="cs-meta-author"><a class="cs-meta-author-link url fn n" href="https://fatihsoysal.com/blog/author/fatihsoysal/"><span class="cs-meta-author-by">by</span><span class="cs-meta-author-name">Fatih Soysal</span></a></div><div class="cs-meta-comments"><a href="https://fatihsoysal.com/blog/giris-svg-ve-greensock-gsap-ile-web-animasyonlarinin-gucu/#respond" class="comments-link" >0</a></div></div> </div> <div class="cs-entry__footer-right"> <div class="cs-share"> <a class="cs-share__link" target="_blank" href="https://www.facebook.com/sharer.php?text=Giri%C5%9F%3A%20SVG%20ve%20GreenSock%20%28GSAP%29%20ile%20Web%20Animasyonlar%C4%B1n%C4%B1n%20G%C3%BCc%C3%BC&u=https://fatihsoysal.com/blog/giris-svg-ve-greensock-gsap-ile-web-animasyonlarinin-gucu/"> <i class="cs-icon cs-icon-facebook"></i> </a> <a class="cs-share__link" target="_blank" href="https://twitter.com/share?t=Giri%C5%9F%3A%20SVG%20ve%20GreenSock%20%28GSAP%29%20ile%20Web%20Animasyonlar%C4%B1n%C4%B1n%20G%C3%BCc%C3%BC&url=https://fatihsoysal.com/blog/giris-svg-ve-greensock-gsap-ile-web-animasyonlarinin-gucu/"> <i class="cs-icon cs-icon-twitter-x"></i> </a> <a class="cs-share__link" target="_blank" href="https://t.me/share/url?url=%5BURL%5D&text=https://fatihsoysal.com/blog/giris-svg-ve-greensock-gsap-ile-web-animasyonlarinin-gucu/"> <i class="cs-icon cs-icon-telegram"></i> </a> <a class="cs-share__link cs-share__copy-link" target="_blank" href="https://fatihsoysal.com/blog/giris-svg-ve-greensock-gsap-ile-web-animasyonlarinin-gucu/"> <i class="cs-icon cs-icon-link"></i> </a> </div> </div> </div> <div class="cs-entry__comments" id="comments"> <div class="cs-entry__comments-header"> <div class="cs-entry__comments-left"> <div class="cs-entry__comments-heading">Yorumlar</div> <div class="cs-entry__comments-description h2">İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.</div> </div> <div class="cs-entry__comments-right"> <div class="cs-entry__comments-toggle"> <span class="cs-button" role="button" aria-label="Yorumlar"> <span>Yorum Yaz</span> </span> </div> </div> </div> <div class="cs-entry__comments-inner"> <div id="respond" class="comment-respond"> <h2 id="reply-title" class="comment-reply-title">Bir yanıt yazın <small><a rel="nofollow" id="cancel-comment-reply-link" href="/blog/giris-svg-ve-greensock-gsap-ile-web-animasyonlarinin-gucu/#respond" style="display:none;">Yanıtı iptal et</a></small></h2><form action="https://fatihsoysal.com/blog/wp-comments-post.php" method="post" id="commentform" class="comment-form" novalidate><p class="comment-notes"><span id="email-notes">E-posta adresiniz yayınlanmayacak.</span> <span class="required-field-message">Gerekli alanlar <span class="required">*</span> ile işaretlenmişlerdir</span></p><p class="comment-form-comment"><textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required="required" aria-required="true" placeholder="Your Comment *"></textarea></p><p class="comment-form-author"><input id="author" name="author" type="text" value="" size="30" aria-required='true' placeholder="Your Name *" /></p> <p class="comment-form-email"><input id="email" name="email" type="email" value="" size="30" aria-required='true' placeholder="Your E-mail *" /></p> <p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes"><label for="wp-comment-cookies-consent">Save my name and email in this browser for the next time I comment.</label></p> <p class="form-submit"><button name="submit" type="submit" id="submit" class="submit" value="Yorum gönder" />Gönder </button> <input type='hidden' name='comment_post_ID' value='41144' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /> </p><p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="e519ba426f" /></p><p style="display: none !important;" class="akismet-fields-container" data-prefix="ak_"><label>Δ<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_1" name="ak_js" value="23"/><script> document.getElementById( "ak_js_1" ).setAttribute( "value", ( new Date() ).getTime() ); </script> </p></form> </div><!-- #respond --> </div> </div> </div> </div> </div> </div> </div> <section class="cs-read-next"> <h2 class="cs-read-next__heading"> Aşağıdaki içerikler de ilgilinizi çekebilir: </h2> <div class="cs-read-next__list cs-posts-area__archive"> <article class="cs-read-next__item post-41146 post type-post status-publish format-standard category-genel cs-entry cs-video-wrap"> <div class="cs-entry__outer"> <div class="cs-entry__inner cs-entry__content"> <div class="cs-entry__info"> <h2 class="cs-entry__title"><a href="https://fatihsoysal.com/blog/yakinsama-olmadan-hicbir-sey-ayakta-durmaz-bilim-muhendislik-ve-yapay-zekada-temel-bir-ilke/">Yakınsama Olmadan Hiçbir Şey Ayakta Durmaz: Bilim, Mühendislik ve Yapay Zekada Temel Bir İlke<div class="cs-entry__post-meta" ><div class="cs-meta-date">3 Mart 2026</div></div></a></h2> </div> </div> </div> </article> <article class="cs-read-next__item post-41148 post type-post status-publish format-standard category-genel cs-entry cs-video-wrap"> <div class="cs-entry__outer"> <div class="cs-entry__inner cs-entry__content"> <div class="cs-entry__info"> <h2 class="cs-entry__title"><a href="https://fatihsoysal.com/blog/google-gemini-yazi-yarismasi-yapay-zeka-ile-yaraticiligin-sinirlarini-zorlamak/">Google Gemini Yazı Yarışması: Yapay Zeka ile Yaratıcılığın Sınırlarını Zorlamak<div class="cs-entry__post-meta" ><div class="cs-meta-date">3 Mart 2026</div></div></a></h2> </div> </div> </div> </article> <article class="cs-read-next__item post-41149 post type-post status-publish format-standard category-genel cs-entry cs-video-wrap"> <div class="cs-entry__outer"> <div class="cs-entry__inner cs-entry__content"> <div class="cs-entry__info"> <h2 class="cs-entry__title"><a href="https://fatihsoysal.com/blog/iki-kucuk-sistem-gercek-dunya-muhendisligini-is-emirlerinden-daha-iyi-ogreten-deneyimler/">İki Küçük Sistem: Gerçek Dünya Mühendisliğini İş Emirlerinden Daha İyi Öğreten Deneyimler<div class="cs-entry__post-meta" ><div class="cs-meta-date">3 Mart 2026</div></div></a></h2> </div> </div> </div> </article> <article class="cs-read-next__item post-41150 post type-post status-publish format-standard category-genel cs-entry cs-video-wrap"> <div class="cs-entry__outer"> <div class="cs-entry__inner cs-entry__content"> <div class="cs-entry__info"> <h2 class="cs-entry__title"><a href="https://fatihsoysal.com/blog/android-google-haritalarda-iki-nokta-arasi-rota-cizimi-detayli-teknik-rehber/">Android Google Haritalar’da İki Nokta Arası Rota Çizimi: Detaylı Teknik Rehber<div class="cs-entry__post-meta" ><div class="cs-meta-date">3 Mart 2026</div></div></a></h2> </div> </div> </div> </article> </div> </section> <div class="cs-subscribe"> <div class="cs-subscribe__content"> <div class="cs-subscribe__header"> <div class="cs-subscribe__heading h2"> E-posta Bülteni </div> <div class="cs-subscribe__subheading h2"> Yazılım Topluluğuna Katılın </div> <div class="cs-subscribe__description"> En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim. </div> </div> <form class="cs-subscribe__form" action="https://codesupply.us13.list-manage.com/subscribe/post?u=41845cb8908fb4302a4df512f&id=b5a5e9c757" method="post" target="_blank" novalidate> <div class="cs-form-group cs-subscribe__form-group"> <input type="email" placeholder="Your E-mail" name="EMAIL" required> <button type="submit" value="Abone Ol" aria-label="Abone Ol" name="subscribe"> <span>Abone Ol</span> </button> </div> </form> </div> </div> </div> </div> </main> </div> </div> <footer class="cs-footer" data-scheme="auto" data-l="light" data-d="dark"> <div class="cs-footer__item cs-footer__item-top-bar"> <div class="cs-container"> <div class="cs-footer__item-inner"> <div class="cs-footer__col cs-col-left"> <div class="cs-footer-columns__nav-menu"> <ul id="menu-menu-5" class="cs-footer-columns__nav "><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-19194 csco-menu-item-style-none"><a href="https://fatihsoysal.com/"><span>Anasayfa</span></a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-11 csco-menu-item-style-none"><a href="https://fatihsoysal.com/blog/hakkimda/"><span>Hakkımda</span></a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-25363 csco-menu-item-style-none"><a href="#"><span>Eğitimler</span></a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-30019 csco-menu-item-style-none"><a href="#"><span>Makaleler</span></a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-69 csco-menu-item-style-none"><a href="https://fatihsoysal.com/blog"><span>Blog</span></a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-35075 csco-menu-item-style-none"><a href="#"><span>Kategoriler</span></a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-257 csco-menu-item-style-none"><a href="https://fatihsoysal.com/blog/iletisim/"><span>Bana Ulaşın</span></a></li> </ul> </div> </div> <div class="cs-footer__col cs-col-right"> <div class="cs-social"> <a class="cs-social__link" href="https://www.linkedin.com/in/fatihsoysal/" target="_blank" title="Linkedin"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M16.8169 2.00011H3.1831C3.02984 1.998 2.87767 2.02591 2.73526 2.08226C2.59286 2.13861 2.46302 2.22229 2.35316 2.32852C2.24329 2.43475 2.15556 2.56145 2.09496 2.70139C2.03437 2.84133 2.0021 2.99176 2 3.1441V16.8559C2.0021 17.0082 2.03437 17.1587 2.09496 17.2986C2.15556 17.4385 2.24329 17.5653 2.35316 17.6715C2.46302 17.7777 2.59286 17.8614 2.73526 17.9177C2.87767 17.9741 3.02984 18.002 3.1831 17.9999H16.8169C16.9702 18.002 17.1223 17.9741 17.2647 17.9177C17.4071 17.8614 17.537 17.7777 17.6468 17.6715C17.7567 17.5653 17.8444 17.4385 17.905 17.2986C17.9656 17.1587 17.9979 17.0082 18 16.8559V3.1441C17.9979 2.99176 17.9656 2.84133 17.905 2.70139C17.8444 2.56145 17.7567 2.43475 17.6468 2.32852C17.537 2.22229 17.4071 2.13861 17.2647 2.08226C17.1223 2.02591 16.9702 1.998 16.8169 2.00011ZM6.85312 15.3919H4.43863V8.19203H6.85312V15.3919ZM5.64588 7.18404C5.31289 7.18404 4.99354 7.05256 4.75808 6.81851C4.52262 6.58447 4.39034 6.26704 4.39034 5.93606C4.39034 5.60507 4.52262 5.28764 4.75808 5.0536C4.99354 4.81956 5.31289 4.68807 5.64588 4.68807C5.82269 4.66814 6.00175 4.68556 6.17133 4.73918C6.3409 4.7928 6.49717 4.88142 6.6299 4.99924C6.76264 5.11706 6.86883 5.26141 6.94155 5.42285C7.01426 5.58429 7.05185 5.75918 7.05185 5.93606C7.05185 6.11294 7.01426 6.28782 6.94155 6.44926C6.86883 6.6107 6.76264 6.75506 6.6299 6.87287C6.49717 6.99069 6.3409 7.07931 6.17133 7.13293C6.00175 7.18656 5.82269 7.20397 5.64588 7.18404ZM15.5614 15.3919H13.1469V11.528C13.1469 10.56 12.8008 9.928 11.9235 9.928C11.652 9.92998 11.3877 10.0146 11.1661 10.1705C10.9445 10.3264 10.7762 10.5461 10.6841 10.8C10.6211 10.988 10.5938 11.186 10.6036 11.384V15.3839H8.18913V8.18402H10.6036V9.20001C10.823 8.8217 11.142 8.51004 11.5263 8.29859C11.9106 8.08713 12.3457 7.98391 12.7847 8.00003C14.3944 8.00003 15.5614 9.03201 15.5614 11.248V15.3919Z"/></svg> </a> </div> </div> </div> </div> </div> <div class="cs-footer__item cs-footer__item-bottom-bar"> <div class="cs-container"> <div class="cs-footer__item-inner"> <div class="cs-footer__col cs-col-left"> <div class="cs-footer__nav-menu"> <ul id="menu-footer" class="cs-footer__nav "><li id="menu-item-39737" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39737"><a href="https://fatihsoysal.com/blog/category/ai/"><span>AI</span></a></li> <li id="menu-item-39739" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39739"><a href="https://fatihsoysal.com/blog/category/akademik-ve-bilimsel/"><span>Akademik ve Bilimsel</span></a></li> <li id="menu-item-39740" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39740"><a href="https://fatihsoysal.com/blog/category/angular/"><span>Angular</span></a></li> <li id="menu-item-39741" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39741"><a href="https://fatihsoysal.com/blog/category/aws/"><span>AWS</span></a></li> <li id="menu-item-39742" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39742"><a href="https://fatihsoysal.com/blog/category/azure/"><span>Azure</span></a></li> <li id="menu-item-39743" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39743"><a href="https://fatihsoysal.com/blog/category/bash/"><span>Bash</span></a></li> <li id="menu-item-39745" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39745"><a href="https://fatihsoysal.com/blog/category/c-2/"><span>C++</span></a></li> <li id="menu-item-39746" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39746"><a href="https://fatihsoysal.com/blog/category/cloud/"><span>Cloud</span></a></li> <li id="menu-item-39748" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39748"><a href="https://fatihsoysal.com/blog/category/devops/"><span>Devops</span></a></li> <li id="menu-item-39749" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39749"><a href="https://fatihsoysal.com/blog/category/docker/"><span>Docker</span></a></li> <li id="menu-item-39750" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39750"><a href="https://fatihsoysal.com/blog/category/dusunsel-ve-kisisel/"><span>Düşünsel ve Kişisel</span></a></li> <li id="menu-item-39751" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39751"><a href="https://fatihsoysal.com/blog/category/egitim/"><span>Eğitim</span></a></li> <li id="menu-item-39752" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39752"><a href="https://fatihsoysal.com/blog/category/flutter/"><span>Flutter</span></a></li> <li id="menu-item-39754" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-item-39754"><a href="https://fatihsoysal.com/blog/category/genel/"><span>Genel</span></a></li> <li id="menu-item-39755" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39755"><a href="https://fatihsoysal.com/blog/category/git/"><span>Git</span></a></li> <li id="menu-item-39758" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39758"><a href="https://fatihsoysal.com/blog/category/is-dunyasi/"><span>İş Dünyası</span></a></li> <li id="menu-item-39759" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39759"><a href="https://fatihsoysal.com/blog/category/java/"><span>Java</span></a></li> <li id="menu-item-39760" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39760"><a href="https://fatihsoysal.com/blog/category/kubernetes/"><span>Kubernetes</span></a></li> <li id="menu-item-39761" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39761"><a href="https://fatihsoysal.com/blog/category/mobile/"><span>Mobile</span></a></li> <li id="menu-item-39762" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39762"><a href="https://fatihsoysal.com/blog/category/mongodb/"><span>MongoDB</span></a></li> <li id="menu-item-39763" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39763"><a href="https://fatihsoysal.com/blog/category/mvc/"><span>MVC</span></a></li> <li id="menu-item-39764" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39764"><a href="https://fatihsoysal.com/blog/category/nextjs/"><span>NextJS</span></a></li> <li id="menu-item-39765" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39765"><a href="https://fatihsoysal.com/blog/category/nginx/"><span>Nginx</span></a></li> <li id="menu-item-39766" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39766"><a href="https://fatihsoysal.com/blog/category/powershell/"><span>PowerShell</span></a></li> <li id="menu-item-39767" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39767"><a href="https://fatihsoysal.com/blog/category/programming-patterns/"><span>Programming Patterns</span></a></li> <li id="menu-item-39768" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39768"><a href="https://fatihsoysal.com/blog/category/python/"><span>Python</span></a></li> <li id="menu-item-39769" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39769"><a href="https://fatihsoysal.com/blog/category/redis/"><span>Redis</span></a></li> <li id="menu-item-39770" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39770"><a href="https://fatihsoysal.com/blog/category/sed/"><span>Sed</span></a></li> <li id="menu-item-39771" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39771"><a href="https://fatihsoysal.com/blog/category/server/"><span>Server</span></a></li> <li id="menu-item-39772" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39772"><a href="https://fatihsoysal.com/blog/category/yazilim/net/"><span>.NET</span></a></li> <li id="menu-item-39773" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39773"><a href="https://fatihsoysal.com/blog/category/yazilim/ajax/"><span>AJAX</span></a></li> <li id="menu-item-39774" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39774"><a href="https://fatihsoysal.com/blog/category/yazilim/asp-net/"><span>ASP.NET</span></a></li> <li id="menu-item-39775" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39775"><a href="https://fatihsoysal.com/blog/category/yazilim/c/"><span>C#</span></a></li> <li id="menu-item-39776" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39776"><a href="https://fatihsoysal.com/blog/category/yazilim/css3-html5/"><span>CSS3 – HTML5</span></a></li> <li id="menu-item-39777" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39777"><a href="https://fatihsoysal.com/blog/category/yazilim/java-android-development/"><span>JAVA – Android</span></a></li> <li id="menu-item-39778" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39778"><a href="https://fatihsoysal.com/blog/category/yazilim/javascript/"><span>Javascript</span></a></li> <li id="menu-item-39779" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39779"><a href="https://fatihsoysal.com/blog/category/yazilim/linux/"><span>Linux</span></a></li> <li id="menu-item-39780" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39780"><a href="https://fatihsoysal.com/blog/category/yazilim/php/"><span>PHP</span></a></li> <li id="menu-item-39781" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39781"><a href="https://fatihsoysal.com/blog/category/yazilim/javascript/jquery/"><span>jQuery</span></a></li> <li id="menu-item-39782" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39782"><a href="https://fatihsoysal.com/blog/category/yazilim/javascript/node-js/"><span>Node.js</span></a></li> <li id="menu-item-39783" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39783"><a href="https://fatihsoysal.com/blog/category/yazilim/javascript/react/"><span>React</span></a></li> <li id="menu-item-39784" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39784"><a href="https://fatihsoysal.com/blog/category/yazilim/sql/ms-sql-server/"><span>MS SQL Server</span></a></li> <li id="menu-item-39785" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39785"><a href="https://fatihsoysal.com/blog/category/yazilim/sql/mysql/"><span>MySQL</span></a></li> <li id="menu-item-39786" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39786"><a href="https://fatihsoysal.com/blog/category/yazilim/sql/postgresql/"><span>PostgreSQL</span></a></li> </ul> </div> </div> <div class="cs-footer__col cs-col-right"> <div class="cs-footer__copyright"> © 2026 Fatih Soysal 💻🚀 All rights reserved. Built with passion & caffeine ☕ </div> </div> </div> </div> </div> </footer> <button class="cs-scroll-top" role="button" aria-label="Scroll to top button"> <i class="cs-icon cs-icon-chevron-up"></i> <div class="cs-scroll-top-border"> <svg width="52" height="52" viewBox="0 0 52 52"> <path d="M26,2 a24,24 0 0,1 0,48 a24,24 0 0,1 0,-48" style="stroke-width: 2; fill: none;"></path> </svg> </div> <div class="cs-scroll-top-progress"> <svg width="52" height="52" viewBox="0 0 52 52"> <path d="M26,2 a24,24 0 0,1 0,48 a24,24 0 0,1 0,-48" style="stroke-width: 2; fill: none;"></path> </svg> </div> </button> <script type="text/javascript"> var CF7AppsLoadhCaptcha = function() { var hcaptcha = document.querySelectorAll( '.h-captcha' ); for (var i = 0; i < hcaptcha.length; i++) { hcaptcha[i].setAttribute( 'data-sitekey', '' ); hcaptcha[i].setAttribute( 'data-callback', 'cf7apps_hcaptcha_callback' ); } }; </script> <script src="https://js.hcaptcha.com/1/api.js?onload=CF7AppsLoadhCaptcha" async defer ></script> <script> const lazyloadRunObserver = () => { const lazyloadBackgrounds = document.querySelectorAll( `.e-con.e-parent:not(.e-lazyloaded)` ); const lazyloadBackgroundObserver = new IntersectionObserver( ( entries ) => { entries.forEach( ( entry ) => { if ( entry.isIntersecting ) { let lazyloadBackground = entry.target; if( lazyloadBackground ) { lazyloadBackground.classList.add( 'e-lazyloaded' ); } lazyloadBackgroundObserver.unobserve( entry.target ); } }); }, { rootMargin: '200px 0px 200px 0px' } ); lazyloadBackgrounds.forEach( ( lazyloadBackground ) => { lazyloadBackgroundObserver.observe( lazyloadBackground ); } ); }; const events = [ 'DOMContentLoaded', 'elementor/lazyload/observe', ]; events.forEach( ( event ) => { document.addEventListener( event, lazyloadRunObserver ); } ); </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/embed-any-document/js/pdfobject.min.js?ver=2.7.12" id="awsm-ead-pdf-object-js"></script> <script id="awsm-ead-public-js-extra"> var eadPublic = []; </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/embed-any-document/js/embed-public.min.js?ver=2.7.12" id="awsm-ead-public-js"></script> <script src="https://fatihsoysal.com/blog/wp-includes/js/dist/hooks.min.js?ver=4d63a3d491d11ffd8ac6" id="wp-hooks-js"></script> <script src="https://fatihsoysal.com/blog/wp-includes/js/dist/i18n.min.js?ver=5e580eb46a90c2b997e6" id="wp-i18n-js"></script> <script id="wp-i18n-js-after"> wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/contact-form-7/includes/swv/js/index.js?ver=6.1.5" id="swv-js"></script> <script id="contact-form-7-js-translations"> ( function( domain, translations ) { var localeData = translations.locale_data[ domain ] || translations.locale_data.messages; localeData[""].domain = domain; wp.i18n.setLocaleData( localeData, domain ); } )( "contact-form-7", {"translation-revision-date":"2026-01-19 21:19:08+0000","generator":"GlotPress\/4.0.3","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"tr"},"This contact form is placed in the wrong place.":["Bu ileti\u015fim formu yanl\u0131\u015f yere yerle\u015ftirilmi\u015f."],"Error:":["Hata:"]}},"comment":{"reference":"includes\/js\/index.js"}} ); </script> <script id="contact-form-7-js-before"> var wpcf7 = { "api": { "root": "https:\/\/fatihsoysal.com\/blog\/wp-json\/", "namespace": "contact-form-7\/v1" } }; </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/contact-form-7/includes/js/index.js?ver=6.1.5" id="contact-form-7-js"></script> <script src="https://fatihsoysal.com/blog/wp-includes/js/imagesloaded.min.js?ver=5.0.0" id="imagesloaded-js"></script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/sight/render/js/jquery.magnific-popup.min.js?ver=1777452259" id="magnific-popup-js"></script> <script id="sight-block-script-js-extra"> var sight_lightbox_localize = {"text_previous":"Previous","text_next":"Next","text_close":"Close","text_loading":"Loading","text_counter":"of"}; </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/sight/render/js/sight.js?ver=1777452259" id="sight-block-script-js"></script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/easy-syntax-highlighter/assets/js/highlight.min.js?ver=11.9.0" id="esh-highlight-js-js"></script> <script id="esh-highlight-js-js-after"> document.addEventListener("DOMContentLoaded", () => { hljs.highlightAll(); }); </script> <script id="esh-frontend-js-extra"> var esh_i18n = {"copied":"\u5df2\u590d\u5236\uff01","copy_failed":"\u590d\u5236\u5931\u8d25"}; </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/easy-syntax-highlighter/assets/js/frontend.js?ver=2.0.0" id="esh-frontend-js"></script> <script src="https://www.google.com/recaptcha/api.js?render=6Lfq6JMsAAAAAFwFocaWCzv-A3znzOaIyo9ACOYg&ver=3.0" id="google-recaptcha-js"></script> <script src="https://fatihsoysal.com/blog/wp-includes/js/dist/vendor/wp-polyfill.min.js?ver=3.15.0" id="wp-polyfill-js"></script> <script id="wpcf7-recaptcha-js-before"> var wpcf7_recaptcha = { "sitekey": "6Lfq6JMsAAAAAFwFocaWCzv-A3znzOaIyo9ACOYg", "actions": { "homepage": "homepage", "contactform": "contactform" } }; </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/contact-form-7/modules/recaptcha/index.js?ver=6.1.5" id="wpcf7-recaptcha-js"></script> <script id="csco-scripts-js-extra"> var csLocalize = {"siteSchemeMode":"system","siteSchemeToogle":"1","shareCopiedText":"URL copied","subscribeProcess":"Processing your subscription...","subscribeSuccess":"Thank you for subscribing!","subscribeError":"Form submission error"}; </script> <script src="https://fatihsoysal.com/blog/wp-content/themes/intro/assets/js/scripts.js?ver=6.7.11" id="csco-scripts-js"></script> <script src="https://fatihsoysal.com/blog/wp-content/themes/intro/assets/static/js/comment-reply.js?ver=6.7.11" id="csco-comment-reply-js"></script> <script defer src="https://fatihsoysal.com/blog/wp-content/plugins/akismet/_inc/akismet-frontend.js?ver=1777452205" id="akismet-frontend-js"></script> </div> </body> </html>