JQuery bir JavaScript fonksiyonlar kütüphanesidir. Nasıl bildiğimiz kütüphane de birçok kitap varsa , JQuery kütüphanesinde de birçok yararlı fonksiyon vardır. Bu bölümde jQuery kütüphanesini kullanarak animasyonlar yapmasını, elemanları görünür-görünmez yapmasını, fade ile yumuşak görünüm geçişlerini, eleman şeffaflıklarını değiştirmeyi, eleman üzerinde birden fazla aksiyonun zincirleme yapılmasını, eleman üzerine mouse gelince-gidince veya tıklanınca gibi olacak olayların tanımlamasını, class değerini değiştirerek eleman stili değiştirmeyi vs. birçok eğlenceli şeyi öğreneceğiz.
Bu bölüm sonunda etkileşimli web sayfalarının nasıl yapıldığına dair çok önemli bilgiler edineceksiniz.
Aynı Bootstrap CSS kütüphanesini eklerken yaptığımız gibi JQuery kütüphanesini de web sayfamıza eklerken 2 yöntem var.
Siteden lokale indiriken kullnamanız için sitesinde "download" linkine tıkladığınızda size indirilebilir dosya seçenekleri gösterilir. Hızlı çalışması bakımından sıkıştırılmış (compressed) versiyonu indirmeniz iyi olacaktır. İndirme linkine tıkladığınızda eğer indirme klasör seçim penceresi otomatik açılmadan tarayıcınızda dosyayı direk gösterirse, (adres barda https://code.jquery.com/jquery-3.7.1.min.js gibi bir şey yazıp sayfada bir sürü kod görünürse) sayfa üzerinde sağ tıklayıp "farklı kaydet" seçeneği ile dosyayı web sitenizin scripts klasörü içine indirebilirsiniz.
Başka versiyonlar indirmek isterseniz ya da başka web geliştirme ortamlarında nasıl kullanılacağını merak ederseniz "download" sayfasında bir çok yararlı bilgi bulunuyor. JQuery kütüphanesini bir CDN server üzerinden sayfanıza nasıl dahil edeceğimiz de yine burada gösteriliyor. Örneğin jsDelivr server'larından kullanmak için:
kodunu sayfanızın <head>
kısmına eklemeniz gerekiyor. Denemelerimizi
gerçekleştirmek üzere deneme web sitemizin olduğu klasöre jquery.html adında
bir yeni dosya ekleyelim.
Eğer lokalde indirdiğimiz dosyayı kullanmak istersek <script>
elemanımız
şöyle olmalı:
Aşağıda <body>
kısmı içindeki <script>
elemanı içinde
ise yüklemenin gerçekleşmiş olduğunu test etmek için küçük bir jQuery program var. Bu
kod sayfa ilk yüklendiğinde bir popup mesaj penceresi açarak yüklü olan jQuery versiyonunu
bildiriyor. Eğer sayfamızı tarayıcıda açarsak şuna benzer bir mesaj çıkmalı:
Kodu biraz açıklamak gerekirse bu kodda jQuery'nin en yaygın kullanım tekniklerinden biri yer alıyor.
Burada $(document)
ifadesi bir jQuery HTML eleman seçim ifadesi.
$(document)
seçimiyle jQuery o anda içinde bulunduğumuz web sayfasını
(dökümanını) seçiyor ve bize bir jQuery nesnesi olarak veriyor. Örneğin
$("h1")
ifadesi bize sayfamızdaki <h1>
elemanlarını
seçer vs. document
kelimesi özel bir değişkendir ve tüm sayfayı ifade eder.
Daha sonra $(document)
nesnesinin .ready()
metodu çağrılıyor.
.ready()
metodu sayfamız (document nesnesi) tamamen tarayıcıya
yüklendiğinde çalışacak bir fonksiyon bildirme imkanı veriyor. Yani sayfadaki tüm
HTML elemanlar yüklendiğinde artık jQuery kullanarak bu elemanlar üzerinde
manipülasyonlar yapabiliriz demektir.
.ready()
metodu parametresinde ise bir JavaScript fonksiyon tanımlaması
yapılıyor, diğer kodlardan ayırırsak bu fonksiyon tanımı şöyle:
Bu bir fonksiyon tanımı, daha önceden JavaScript bölümünden biliyoruz ki fonksiyonlar
tanımlanınca çalışmaz, çağrıldıklarında çalışır. Bu fonksiyonu biz kod ile çağırmıyoruz,
.ready()
metoduna parametre olarak verdiğimiz için bu fonksiyonu
.ready()
metodu çağıracak. .ready()
metodu bir olay işleme
metodudur ve "döküman hazır" olayı oluşunca parametresinde tanımı verilen fonksiyonu
çalışsın diye tarayıcımızın JavaScript işleyen kımına bildirir. Ne zaman ki döküman
tamamen yüklenmiş olur, tarayıcımız bu verilen fonksiyonu otomatik olarak çalıştırır.
Fonksiyonun yaptığı iş ise oldukça basit, bir popup mesaj açıp bize "JQuery Yüklendi"
mesajı ve yanında da yüklenmiş olan JQuery kütüphanesi versiyon numarasını veriyor.
jQuery.fn.jquery
ifadesini tabi ki JQuery dökümanlarından buldum, bu
bize versiyon numarasını veren jQuery değişkeninin adı. $.fn.jquery
de
yazılabilir , çünkü jQuery kütüphanesi için $
ve jQuery
kelimeleri aynı nesneyi ifade ediyor.
JQuery seçiciler (selectors) en önemli kütüphane yapılarıdır. JQuery seçiciler ile manipüle etmek istediğimiz HTML elemanlarını bulur ve seçeriz. JQuery seçicilerin gruplandırması şöyle:
JQuery seçiciler ifade edilirken $(" ")
şeklinde bir $ işareti
ve arkasından parantez içinde tırnak içine yazılan Seçici Kelimeler ile ifade
edilirler. $(document)
ifadesinde tırnak kullanmadık çünkü document
kelimesinin jQuery'de özel bir anlamı var, burada anlatacaklarımızla karışmasın.
Denemeler yapmak için web sayfamızın kodunu şöyle düzenleyelim:
Bu bir paragraf
Bu diğer bir paragraf
Aşağıda <script>
tag içinde butona tıklanınca çalışacak olan
fonksiyonun tanımını yapıyoruz. Bunu yaparken de aslında bir eleman seçici
kullanıyoruz, $("button")
seçicisi sayfadaki button elemanları
seçer. Sayfada bir tanecik button elemanı olduğu içinde tanımlanan fonksiyon o butonun
.click()
olayında (yani elemana tıklanınca) çalışacak olan kod olur.
Şimdi butona tıklanınca değişik elemanları seçerek bazı manipülasyonlar deneyelim.
Bu bir paragraf
Bu diğer bir paragraf
İlk denmemiz bir eleman seçici ve sayfadaki <h2>
elemanları
seçerek onlara .hide()
metodunu uyguluyor. Seçici olan $("h2")
sayfadan birden fazla eleman seçtiği için .hide()
metodu her birine
tek tek uygulanır ve onları görünmez yapar. Aslında elemanlar sayfa kodundan silinmezler,
geliştirici araçlarında bakarsanız h2
elemanların hala orada olduğunu ama
style: "display: none;"
stili verilerek görünmez yapıldığını göreceksiniz.
Şimdi de ID seçicisi deneyelim.
Bu bir paragraf
Bu diğer bir paragraf
Aynı CSS kuralı yazarken yaptığımız gibi bir elemanı ID değerine göre belirtmek için
ID değerinin başına #
işareti ekliyoruz. $("#heading")
seçicisi HTML elemanlar içinde ID değeri "heading" olan elemanı seçer ve bize getirir.
Daha önce de belirtmiştik sayfa kodunuzda ID değeri aynı olan birden fazla eleman olmamalı,
ID değeri tek bir elemana özel olmalı. Eğer birden fazla elemana aynı ID değerini verip
jQuery ile ID seçcici kullanırsanız size sadece ilk bulduğu elemanı getirir, çünkü ID
değeri biricik olmalıdır. Şimdi de class seçicisi deneyelim.
Bu bir paragraf
Bu diğer bir paragraf
Gördüğünüz üzere burada da aynı CSS gibi class değeri başına nokta işareti konarak
ifade ediliyor. $(".para")
seçicisi class değeri para olan
2 paragrafı seçer ve arkasından .hide()
ile elemanları görünmez yapar.
Birden çok eleman seçilirse .hide()
metodu her birine tek tek uygulanır.
Her şeyi seçen seçici ile devam edelim.
Bu bir paragraf
Bu diğer bir paragraf
Aslında bu kod biraz komik olur, butona tıklayınca sayfadaki <body>
,
<head>
ve hatta <html>
elemanı bile görünmez yapılır.
Butonun kendi bile yok olur. Bu seçici aslında bir kısmı görünmez yapmak amacıyla
kullanılabilir. Mesela gizli class değerine sahip bir <div class="gizli">
elemanının tüm içeriğini seçmek istesek $(".gizli *")
seçicisi kullanılır.
Bu şekilde arada boşluk vererek dıştaki eleman ve içteki eleman seçicinin yazılması da
aynı CSS seçicileri gibi yapılır. Sırada ilk elemanın seçilmesi var.
Bu bir paragraf
Bu diğer bir paragraf
p:first
ile aranan yerdeki yukarıdan aşağıya sıralanmış <p>
elemanları içinde ilk başta olanı seçilerek geri döner. Buna benzer bir çok ilginç
seçiciyi JQuery Selectors
dökümanında bulabilirsiniz. Sırada this kelimesi var.
Bu bir paragraf
Bu diğer bir paragraf
$(this)
seçicisi o anda kodun uygulandığı elemanın kendisini seçer.
Bu örnekte kod button elemanının tıklanma olayının içinde olduğuna göre
this kelimesi butonun kendisini ifade eder. Bu durumda tıklanınca butonun
kendisi görünmez olur. this kelimesi de jQuery'de özel bir anlam taşır ve
tırnak kullanmadan $(this)
şeklinde ifade edilir.
Jquery olay işleyicileri kullanıcının web sayfasında yaptığı etkileşimlere cevap vermek için yazılan fonksiyonlardır. Gerçekleşen bu etkileşimlere programcılıkta olay adı verilir. Bir butona tıklamak, mouse'u bir elemanın üzerine getirmek, elemanın üzerinden çıkarmak, bir girdi ktusuna değer yazarak değerini değiştirmek, bir elemanın sayfaya konduğu an gibi bir çok olay örnek verilebilir. Etkileşimli bir web sayfası demek aslında tamamen bu olayların karşılığında çalışacak fonksiyonları tanımlamakla olur. Hatta programcılıkta buna "olay güdümlü programlama" şeklinde özel bir isim verilir.
hover
ve click
olaylarını test etmek için sayfamıza bir
renkli bölge koyalım.
İlk olayımız hover
olayı, yani eleman üzerinde mouse hareket etmesi olayı.
hover
olayının iki parçası var ilki mouse işaretçisinin eleman üzerine
girmesi ve ikincisi işaretçinin eleman üzerinden çıkması. .hover()
metodu
ile bu iki olayın fonksiyon tanımlarını girerek sisteme hover olayı karşısında neler
olmasını istediğimizi bildiririz.
.hover()
metodunun ilk parametresi mouse elemanın üzerine geldiğinde çalışacak
fonksiyonun tanımı, ikincisi ise mouse üzerinden ayrılınca çalışacak fonksiyon tanımı.
Buna göre elemanı renklendirme üzerine bir kod yazalım.
Aşağıdaki renkli bölge içinde ve dışında mouse hareket ettirin ve bölgeye tıklayın
Gördüğünüz üzere .hover()
metodu parametre bloğunun içinde 2 tane
fonksiyon tanımı yaptık. Mouse girince arka renk kırmızı, çıkınca mavi olacak şekiilde
eleman CSS değerlerini değiştirdik. .css()
metodu bir elemanın stil
değerlerini vermek için kullanılır. Parametresinde bir JavaScript nesne
olarak { key: value, key: value }
şeklinde stil kuralları girilir.
Metod parametresinde birçok fonksiyon tanımlama kodu girmek görünümü karıştırıyor derseniz fonksiyonları önceden tanımlayıp parametrelere isimlerini de verebilirsiniz.
Çok dikkat edilmesi gereken nokta fonksiyonların sadece isimlerini parametreye
yazıyoruz, hover_in()
gibi parantezlerle birlikte girersek o anda
fonksiyonu çalıştırır ve fonksiyondan dönen değeri parametreye girer. Halbuki biz
fonksiyon tanımının kendisinin parametrede olmasını istiyoruz, bu yüzden sadece
adını parantezler olmadan giriyoruz.
Daha önce örneklerini yaptığımız click
(tıklanma) olay işleyicisini de
kodumuza ekleyelim.
Aşağıdaki renkli bölge içinde ve dışında mouse hareket ettirin ve bölgeye tıklayın
Çift tıklama için bir olay işleyici tanımlayacaksanız .dblclick()
metodunu kullanırsınız.
gibi.
JQuery kütüphanesinde hazır bulunan olay metodlarının listesini jQuery Olayları dökümanında bulabilirsiniz. Göreceğiniz gibi daha birçok olay jQuery yardımıyla kolayca işlenebiliyor.
JQuery animasyonlar ve efektler yapmak için işleri kolaylaştıran birçok fonksiyon sağlar. Yaygın kullanılan teknikler:
Animasyon amacıyla .animate()
metodu kullanılır.
İlk parametrede aynı .css()
metodunda olduğu gibi JavaScript nesnesi
olarak istenen CSS değerleri verilir. <div>
elemanını kaydırabilmek
için ilk başta stiline position: absolute;
vermeyi unutmayınız.
İkinci parametre ise animasyon hızını belirtir.
Animasyonların sırayla değil aynı anda gerçekleşmesini istersek stilleri tek bir
JavaScript nesne içinde toplarız.
Hız için değer verirken "fast"
ya da "slow"
değerleri ile
hızlı ya da yavaş olarak seçim yapabileceğiniz gibi milisaniye cinsinden sayı değeri
olarak animasyon süresi verilebilir.
deneyin ve görün mesela. Şimdi de show, hide ve toggle etkilerini görelim.
.show()
metodu seçilen elemanı görünür yapar. Tabi ki , zaten görünür ise
bir şey değişmez. .hide()
metodu ise daha önce de denediğimiz gibi
elemanı sayfada görünmez yapıyor. Burada değişik olan .toggle()
metodu,
bu metod seçilen elemanı görünürse görünmez yapar. Eğer eleman görünmez ise bu sefer
görünür yapar. Örnekteki Toggle yazılı butona her tıkladığınızda eleman bir
görünür olur, diğer tıkta görünmez olur vs.
Kullanılan metodlar parametreler de alabiliyor. Örnek olarak:
.hide()
metodunda ikinci verilen parametre animasyonun şeklini
bildiriyor. "swing" değeri aslında default değer ve verilmese de olurdu.
Gittikçe hızlanan bir animasyon fade eder. "linear" değeri kullanılsa sabit hızda
devam eden bir animasyon görürüz. Sırada kaydırma (sliding) efektleri var. Kaydırma
efektlerini de .slideUp()
, .slideDown()
ve
.slideToggle()
metodları ile yaparız.
Buharlaştırmalar (fade) da görsel olarak güzel efektler. 4 metodla bu efektler oluşturulur:
.fadeOut()
seçilen elemanı şeffaflaştırarak yok eder.
İkinci bir buton ekleyip .fadeIn()
denemesi yapalım, tabi ki
butonlar karışmasın diye farklı ID değerleri vermeliyiz.
.fadeToggle()
ise aynı hide-show-toggle gibi fade işleminde
bir birini bir diğerini yapar.
.fadeTo()
metodu verilen bir ölçüye kadar elemanı şeffaflaştırır. Fade
işlemleri yapılırken seçili elemanın opacity
stili üzerinden işlem yapılır.
opacity: 1.0;
elemanın şeffaf olmadığını opacity: 0.0;
ise
elemanın tamamen şeffaf olduğunu belirtir. Sıfır ve bir arası değerler vererek istediğimiz
değere getirmek için .fadeTo()
metodunu kullanırız.
Şeffaflaşma etkisi daha açık belli olsun diye kutuları siyaha boyadım. .fadeTo()
metodu ilk parametresinde animasyon hızı , ikinci de ise elemanın gitmesini istediğimiz
şeffaflık derecesi girilir.
JQuery geliştiricileri tasarladıkları fonksiyonlara bir teknik ekleyerek metodların birbiri arkasına yazılabilmesini sağlamışlar. Metodların seçilmiş bir elemana böyle zincirleme uygulanabilmesi kodlarımızı oldukça kısaltır. Bir örnek verelim.
Önce elemanın arka rengi kırmızı yapılıyor, sonra yukarı slide ile görünmez oluyor,
sonra da aşağı kaydırma ile tekrar görünür yapılıyor. Bunu böyle yapabilmek için
jQuery metodları her zaman işlenmiş elemanı bir jQuery nesnesi olarak geri dönüyor.
Bu sayede yukarıdaki örneğe bakarsak $("div")
bize elemanı veriyor. Arkasından
gelen .css()
metodu elemanın stilini değiştirip , değişmiş halini geri
değer olarak dönüyor. Arkasından .slideUp()
ve onun arkasından da
.slideDown()
metodları da aynı şekilde işlenmiş elemanı bir jQuery
nesnesi olarak geri döndürdüğünden bu şekilde zincirleme metodlar kullanılabiliyor.
Çok fazla sayıda metod zincirleme bağlanırken alt satıra geçerek devam edilebilir. Yukarıdaki örneğe uygularsak:
Bu şekilde yazarak daha anlaşılabilir bir görünüm oluşturmuş oluruz.
So far so good, buraya kadar web geliştirici olmak için bir hayli bilgi biriktirdiniz. Bu eğitimi burada kesiyorum. Bundan sonrası aktif server'lar vs. ileri konular. O konuların her birine özel baişlıklar yazmaya devam ediyorum. Github Sayfalarım ve Blogger Sayfalarımı takipte kalmaya devam ediniz, nasip oldukça yazmaya devam edeceğim. Kalın sağlıcakla..
.
.