Klavye Kırıntıları
Jquery ile Accordion menu hazırlayalım
Neredeyse bir web 2.0 standardı olan accordion menüler sayfalarımızında vazgeçilmezi haline geldi. Şimdi yazacağımız plugin ile accordion menü hazırlamak çok
kolay hala gelecek. Sizlerde üzerinde biraz değişiklikler yaparak istediğiniz yapıda menüleri kolaylıkla oluşturabilirsiniz.
Öncelikle menümüzün salt html halini oluşturalım;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-9" /> <title>Accordion Menü</title> </head> <body> <div class="accordion"> <ul title="Baslık bir"> <li><a href="#">Madde 1</a></li> <li><a href="#">Madde 2</a></li> <li><a href="#">Madde 3</a></li> </ul> <ul title="Baslık İki"> <li><a href="#">Madde 2-1</a></li> <li><a href="#">Madde 2-2</a></li> <li><a href="#">Madde 2-3</a></li> </ul> <ul title="Baslık Üç"> <li><a href="#">Madde 3-1</a></li> <li><a href="#">Madde 3-2</a></li> <li><a href="#">Madde 3-3</a></li> </ul> </div> </body> </html>
Sayfamıza jquery.js dosyamızı ekledikten sonra accordion.js adında bir javascript dosyası oluşturalım kendimize.Oluşturduğumuz accordion.js dosyasını
sayfamıza <link> etiketi ile ekledikten sonra kodlarımızı yazmaya başlayalım.
Öncelikle sabitlerimizi oluşturalım
var divClass = "accordion";//accorion uygulanacak ul'lerin bulunduğu divin classı var menuHtml = "";//sayfadaki mevcut kodları temizledikten sorna kendi kodlarımızı ekleyeceğimiz değişken. var sonAcikUl = -1;//en son açılan ul'un id'si.Eğer -1 ise henüz hiçbiri açılmamış demektir.
Buradaki değişkenlerimizin açıklaması zaten yanlarında mevcut ancak <strong>menuHtml</strong> üzerinde durmamız sanırım iyi olacaktır. Eğer
menümüzün üzerinde ekstra birşey yer almasını istiyorsak bu değişkene atayabiliriz. Örneğin menümüzün üzerinde menu.jpg adında bir grafik yer almasını
istiyorsak
var menuHtml = "<img src="menu.jpg" />";
şeklinde değiştirebiliriz.
Kodumuzun ilk bölümü hazırlandı. Şimdi sayfamız yüklendiğinde değiştirilecek alanı bularak gerekli işlemleri yapmaya başlamamız gerekmektedir. Bu işlemleri
jQuery’nin $(document).ready fonksiyonu ile başlatıyoruz ;
$(document).ready(function(){
var us = $('div.'+divClass+'>ul').length;//işleme girecek ul sayısını alıyoruz
//bunları bir for döngüsü ile spanolustur fonksiyonuna atıyoruz
for(i=0;i<us;i++)
{
spanOlustur(i);
}
//fonksiyonumuz gerekli işlemleri yaptıktan sonra bize işlevsel html kodlarımız dönüyor
//Bizde bunları en başta belirlediğimiz div'in içeriğine eklemeden önce
//div'imizin içindeki html kodlarını temizliyoruz
//daha sonrada fonksiyonumuzun oltuşturduğu kodları div'imize ekliyerek işlemlerimizi tamamlıyoruz
$('div.'+divClass).empty().html(menuHtml);
//accordion menümüz artık hazır ve geriye kalan tek şey ul etiketlerinin bulunduğu divleri kapatmak
$('div.acilanDiv').hide();
});
Evet işlemler bitti ve menümüz hazır hayırlı olsun demeyeceğim tabii ki. Burada çağırmış olduğumuz spanOlustur fonksiyonumuz tüm
işlevselliği sağlayor. Şimdi o fonksiyonumuzu yazalım.
Not:jQuery’nin en güzel seçicilerinden olan eq’nun burada güzel bir kullanımını göreceğiz.Bu seçicinin ne işe yaradığını kısaca anlatmak gerekirse :
eq ile istediğimiz bir etiketin istediğimiz sıradaki elemanını seçebiliriz. Biz burada menümüzü oluşturan ul’leri sırası ile seçerek
içerisindeki html kodlarını alıp istediğimiz hale getiriyoruz.
function spanOlustur(ulSayi)
{
//fonksiyonumuz ile gelen ulSayi'ncı sıradaki ul'u seçiyoruz
//bu elementi ul adında bir değişkene atıyoruz.
var ul = $('div.'+divClass+'>ul:eq('+ulSayi+')');
//ulHtml değişkenine ul'e ait html'i atıyoruz
var ulHtml = ul.html();
//menümüzün başlıklarını oluşturmak için ul'e ait title etiketinin değerini alıyoruz.
var spanBaslik = ul.attr('title');
//şimdi ise menümüzü oluşturuyoruz.
//öncelikle bir div oluşturup class,id ve onclick özelliklerini ayarlıyoruz.
//onclick'de accordionAc diye bir fonksiyonu tetikliyoruz.
//En son olarak da menümüzün başlığını bu dive içerik olarak ekliyoruz.
var menu = '<div class="accordionBaslik" id="menu'+ulSayi+'" onclick="accordionAc('+ulSayi+');">'+spanBaslik+'</div>';
//başlık divinin altına bir div daha ekleyerek onada menümüzü içerik olarak göstereceğiz.
//burada dikkatinizi çekmek istediğim bir nokta var;
//az önce hazırladığımız ulHtml, ul etiketlerinin içerisinde kalan li ve a etiketlerini alıyor sadece
//bu yüzden yeni bir ul etiketi yazmak zorundayız.
menu += '<div id="ul'+i+'" class="acilanDiv"><ul class="accordion">'+ulHtml+'</ul></div>';
//yeni bir menu elementimiz hazır olduğuna göre bunu menuHtml değişkenine ekleyebiliriz.
menuHtml += menu;
}
Şu anda menümüz hazır ancak kullanılabilir değil. Sebebiyse tabii ki accordionAc fonksiyonunu henüz yazmamış olmamız. Bu fonksiyonumuzuda
yazarak pluginimizi tamamlayalım.
function accordionAc(id)
{
if(sonAcikUl!=id)//eğer açık dive tıkladı ise herhangi bir işlem yapmıyoruz.
{
if(sonAcikUl==-1)//buradada menüye ilk defa tıklanıp tıklanmadığını kontrol ediyoruz
{
$('div#div'+id).slideDown(250);//eğer ilk tıklama ise sadece açma işlemi yapıyoruz
}
else
{
$('div#div'+sonAcikUl).slideUp(250);//son açık olan divi kapatıyoruz
$('div#div'+id).slideDown(250);//tıklanan divi açıyoruz
}
sonAcikUl = id;
}
}
Artık menümüz kullanıma hazır.
Örnek uygulama için buraya tıklayabilirsiniz.
Örneği indirmek içinde buraya tıklayabilirsiniz.
Bir sonraki yazıda görüşmek dileğiyle hoşçakalın.
Benzer Yazılar
| Print article | This entry was posted by admin on 28/10/2008 at 7:14 pm, and is filed under Jquery. Follow any responses to this post through RSS 2.0. You can leave a response or trackback from your own site. |
Internet Explorer’da jQuery FadeIn sorunu ve çözümü
about 4 months ago - 1 comment
Internet Explorer 6′da her daim bize sorun oluşturan şeffaf(transparan) resimler ve arkaplanlar maalesef ki Internet Explorer 7′de de devam etmektedir. jQuery‘nin en çok kullanılan efektlerinden olan fadeIn ve fadeOut kullanıldığı zaman, IE 7 desteklediğini iddia ettiği transparanlığı hakkını vererek yerine getiremiyor. Efekt süresince şeffaflık yok. Eğer %50 şeffaf siyah bir grafiğiniz var ise bu grafik tamamen siyah More >
Ajax sayfalarda prettyPhoto sorunu ve çözümü
about 4 months ago - 1 comment
prettyPhoto‘yu bir ajax içinde çağrılan resimlere uygulamak isteyince bir takım sorunlar ortaya çıkarıyor. Nasıl diyecek olursanız, eğer bir sayfa içerisinde üç kez ajax ile çağırım yaparsanız resimlere üç kere tıklama ekliyor ve resimler birbirine giriyor. Sanırım bunu açıklamak için bir örnek vermek daha mantıklı olacak. Buradan birinci ve hiç çalışmayacak örneğimize bakabilirsiniz. Bu sayfamızda, sayfa More >
jQuery – each
about 1 year ago - 2 comments
Çok geçte olsada jQuery’i temelden ve elimden geldiği kadar anlatmaya karar verdim.(Eğer “jQuery ne” diye bir soru oluştu ise aklınızda erhan burhan‘ın sitesindeki güzel yazısını tavsiye ederim) Sanırım sadece yazı değil, yanında videolar ile anlatımlarımda olacak. jQuery dökümanları ile paralel olarak yazmaya çalısacağım ancak içerisinde atlayacağım alanlar olacak. Orta hatta ortanın üstü bir jQuery bilgisine More >
jQuery ile Validation
about 1 year ago - 1 comment
Jquery ile bir çok validation (doğrulama) plugin’i bulmamız mümkün. Ancak küçük ve orta boyutlu projelerde kendimize has ve daha küçük boyutlu doğrulama ihtiyaçlarımız doğabilir. Kendi yazdığımız kodlar her zaman için daha rahat kontrol altında tutulabilir diye düşünüyorum. Jquery ile bir formda yer alan input elemanlarından “type=text” yani tipi yazı olanları kapsayan bir script yazalım. Doğrulama More >
jQuery ile Animasyon(Animation) – II
about 1 year ago - No comments
Bir önceki yazımda jQuery ile animasyona giriş yapmıştık. Bu yazı ile zincirleme ve etkileşimli animasyonlar hazırlayacağız. Zincirleme derken neden bahsediyorum ; Bir divimiz var ve biz bunu önce genişlemesini sonrada yüksekliğinin değişmesini istiyoruz. İşte burada jQuery’nin en sevdiğim özelliklerinden birisi olan zincirleme devreye giriyor. Önce javascript kodlarımızı yazalım : function func1(id) { //id'sini parametre olarak More >
jQuery ile Animasyon (animate)
about 1 year ago - 4 comments
jQuery’nin işimizi kolaylaştırdığı tartışılamaz. Ancak bize sunmuş olduğu bazı imkanlar varki bunlar işimizi kolaylaştırmanın yanında işimizi zevkli kılıyor. Bunların başındada animate geliyor. Çok daha görsel sayfalar oluşturabilmek çok daha kolay. Animate jQuery’nin effect grubundan bir öğedir. Genel yazım şekli ; .animate( params, [duration], [easing], [callback] ); params : animasyonumu belirleyen parametrelerden oluşur. duration : anismasyonun More >
jQuery Accordion Plugin
about 1 year ago - 2 comments
Bir önceki yazımda jQuery ile accordion menü hazırlamayı anlatmıştım. Şimdi ise o functionun plugin halini sizlerle paylaşıyorum. Pluginin asıl amacı accordion menüler oluşturmak. Ancak ayarlardan daha değişik işlemler için kullanılabilir hale getirebilirsiniz. Kullanım şekli : $('div.accordion1').accordion(); İsterseniz kullanabileceğiniz 6 tane ayar barındırıyor içerisinde. Ayarlarının kullanım şekli : $('div.accordion1').accordion({ acik:1, baslik:'<div class="menuTitle">Fade – ul </div>', hiz:150, More >
Javascript ile basit QueryString
about 1 year ago - No comments
Tüm internet yazılım dillerinde kullandığımız Request.QueryString malesef Javascript‘de hali hazırda yok. Her zaman gerekmesede işinizin düştüğü zamanlar mutlaka olmuştur. Benim bir projede, proje tamamlandıktan sonra QueryString‘den bilgi çekmem gerekti. Yazılım tarafı tamamlandığı için bir şey yapılması uzun zaman alacağından yazılımcının can simidi olan Javascript’e başvurmayı denedim ve şimdilerde çok hoşuma giden bir script çıktı ortaya. More >
Jquery ile Livesearch
about 2 years ago - No comments
John Nunemaker‘ın ilk olarak sadece javascript ile yazdığı, daha sonra Jquery ile desteklediği LiveSearch uygulamasını, John Resig biraz optimize etmiş. LiveSearch John Nunemaker versiyonu, prototype versiyonu. John Resig’in modifiyeli versiyonu. Hangisi daha iyi, daha performanslı derseniz, şu an için hiç deneme şansım olmadı ve eldeki örneklerden ise bu daha iyi diyemeceğimiz için sytanxı düzgün olan More >
IPhone’da Jquery’i seçti
about 2 years ago - No comments
Iphone’u birçoğumuz biliyoruz, bilmeyenlerde Vodafone‘un kampanyası ile haberdar oldu sanırım. IPhone bildiğiniz gibi OS X mobile işletim sistemi kullanıyor. Hangi javascripti destekleyeceklerini en azından ben merakla bekliyordum. Bugün okuduğuma göre Jquery 1.1.3.1 ile IPhone‘un seçimi olmayı başarmış. Başarmış diyorum çünkü IPhone 2 piyasaya çıkalı 2 hafta olmadan 3-4 milyon arasında sattı bile. Yani piyasada gerçekten More >
about 1 year ago
Hi, good post. I have been pondering this topic,so thanks for sharing. I’ll probably be subscribing to your blog. Keep up the good posts
about 1 year ago
Thank alot
about 11 months ago
Gerçekten çok işime yaradı, güzel anlatımınız ve paylaşımınız için gerçekten çok teşekkür ederim… Çalışmalarınızda başarılar dilerim…
about 10 months ago
İyi günler öncelikle teşekkür ederim gerçekten çok küçük boyutlu ve kullanışlı bir accordion olmuş. Bir soru sormak istiyorum js konusunda pek bilgi sahibi değilim. Açılmış olan divlerde accordionBaslik sınıfına ek bir sınıf ekleyebilir miyiz? Yani açılmış olan başlığı vurgulamak istiyorum. Bunu <div class=”accordionBaslik selected” gibi bir sınıf atayarak yapabiliriz belki fakat bunu nasıl yapabiliriz?
about 8 months ago
I like this site really much.
This is really a outstanding web.
And it is not like other money orientated web, the message here is really helpful.
I am definitely bookmarking it as well as sharing it with my friends.
about 7 months ago
I am definitely bookmarking this page and sharing it with my friends.
about 7 months ago
Very extraordinary place.
The message here is very useful.
I will tell my friends.
Cheers
about 7 months ago
Dear Author weboutbox.com !
Now that’s something like it!
about 7 months ago
Very good concept, I like how you convey the msg.
about 5 months ago
Başlıkların yanına gif olarak ya da png olarak bir ikon koyma şansımız olabilir mi yani içine?
about 4 months ago
Mustafa bunu tabii ki yapabilirsin. accordion.js’yi açıp
var spanBaslik = ul.attr('title');satırını ;
var spanBaslik = '<img src="images/icon.jpg" />' + ul.attr('title');şeklinde değiştirebilirsin.
about 3 weeks ago
Blogunuzda nasıl yapıldığını öğrendiğim her şey için ve bu yazınız için teşekkür ederim, iyi işler.