Jquery ipuçları - 1 Jquery ipuçları - 2

jQuery ipuçlarını yayınlamaya devam ediyorum.

1- Dinamik oluşturulan elementlere live() ile olay atama

Sayfaya dinamik olarak eklenen içeriklerde veya ajax ile doldurduğumuz içeriklerdeki elemanlara bir olay atadığımızda(click, mouseover vd.) çalışmayacaktır. jQuery geliştiricileri bunun için live() fonksiyonunu geliştirmiş.

 $('a.acilSusam').live('mouseover',function() {
	// yapilacak islemler
});

2 - Tarayıcı Penceresinin Boyutlarını Değişmesini Yakalamak

Belki ara sıra lazım olacak bir kod ama bazen gerekiyor işte. Pencere boyutu her değiştiğine bazı işlemleri yapmak sistemimizi yorabilir diye setTimeout yardımı ile belli aralıklarla bunu yaptırıyoruz.

function pencereBoyutuDegisti() {
	alert("Değişti");
};

var resizeTimer = null;
$(window).bind('resize', function() {
    if (resizeTimer) clearTimeout(resizeTimer);
    resizeTimer = setTimeout(pencereBoyutuDegisti, 100);
});

3 - Element miktarını bulmak

Bir dokümanda seçilen elemandan kaç adet olduğu bulmak için;

$('element').size();

4 - Bir elemanın index değerini bulmak

index değerini bulmanın farklı bir yolu

("ul > li").click(function () {
	var index = $(this).prevAll().length;
});

5- Bir elemanın görünür olup olmadığını yakalamak

if($(".eleman").is(":visible")) {
    alert('Burda');
}

6- Kaç tane alt elemanı(çocuk elemanı) var

<div id="foo">
<div id="bar"></div>
<div id="baz">
<div id="biz">
</div>
<span><span>
</div>

//kac tane alt elemanı oldugunu bulmak icin
$("#foo > div").length

7- jQuery Kopya Kağıdı(Cheat Sheet)

jQuery’nini bir çok özelliği var ve bunları aklımızda tutma imkanımız yok. Bir kopya kağıdı işimize yaraya bilir.

-http://www.futurecolors.ru/jquery/-

Burada son sürümün kopya kağıdı mevcut. Bende css3 özelliklerini kullanarak biraz renklendirdim. Benim renklendirdiğim(CSS3 içerir, herisi göremez)

8 - Select Elemanı ipuçları

// secili olan ögenin metnini almak
$("#myselect option:selected").text();

// secili olan ögenin degerini almak icin
$("#myselect option:selected").val();

// secili ogenin index degeri
$("#myselect option").index($("#myselect option:selected"));

// indeksi 2 olan ögeyi seçili hale getirmek
$("#myselect option:eq(2)").attr("selected", "selected");

Kaynaklar

Bir sorun ile daha karşınızdayım. Evet yine ie ve yine sorun. Bir projeye başladığımda kodlamayı yaparken devamlı ie6 ile test ediyorum, ama bazı sorunları daha çözerim diye bırakıyorum, bunun güzel bir şey olduğunu biliyorum ama sorunlardan gına gelince kendimi rahatlatmak için böyle bir yola başvuruyorum. Daha sonra projenin sonlarına doğru bu sorunların üzerine eğiliyorum. İlk baktığımda bana çok zor gibi gelen bazı sorunları gidermek için bazen tek bir arama ile cevaba ulaşıyorum ve seviniyorum, korktuğum kadar beni uğraştırmadığı için.

Sorunu şöyle tanımlayabilirim; overflow kullandığım bir eleman içindeki bir elemana position:relative tanımladığımda relative verdiğim eleman overflow uyguladığım elemanın dışına çıkıyor ve scroll olmuyor.

Şöyle küçük bir örnek durumu daha iyi gösterecektir.

<div id="icerikAlani">
    <p>İlk paragaraf</p>
    <p class="relative">position:relative uygulanan kısım</p>
</div>

CSS kodu da şöyle

#icerikAlani{
    height:80px;
    overflow:auto;
    width:200px;
    height:80px;
    background-color:#ccc
}

.relative{
    position:relative;
    background-color:lightblue;
    width:150px;
}

Sonuca ie 6 ve 7 ile baktığımızda aşağıdaki gibi bir sorun ile karşılaşacağız.

Örneği görmek içni tıklayınız.

Sorunun çözümü ise çok basit. overflow uyguladığımız elemana position:relative tanımı yaparak sorunu giderebilirsiniz.

[sourcecode language=”css” highlight=”7”] #icerikAlani{ height:80px; overflow:auto; width:200px; height:80px; background-color:#ccc; position:relative; } .relative{ position:relative; background-color:lightblue; width:150px; }

Kaynaklar

Bu makaleyi çok önce yazmayı planlıyordum, ancak üzerinden zaman geçmesine rağmen hala sIFR kullanılan bir yöntem olduğu için yinede yazıyı yazmaya karar verdim. Her nekadar font-face kull anımı bize bu tip alternatiflerden alıkoymak için çıktı ise de daha öncede bahsettiğimiz gibi tasarımdaki anti-aliasing özelliğini sağlayamıyor maalesef. Bundan dolayı hala eski yönte mleri kullanmaya devam etmekteyiz.

Aslında ben sIFR kullanımını daha önce anlattım.  Metin Yerine Resim/Flash Ekleme Teknikleri (Image Replacement) yazısının içinde sIFR kullanımını anlattım. Burada sIFR’ın yeni sürümünü ve ipuçlarını yazacağım. 

sIFR3’ün son sürümünü http://dev.novemberborn.net/sifr3/nightlies adresinden en üstteki bağlantıdan son sürümü indirebilirsiniz.

Metin Yerine Resim/Flash Ekleme Teknikleri (Image Replacement) yazısında genel olarak sIFR’ın nasıl ekleneceği konusunda bilgi verdik. Bu nedenle işin bu kısmını geçip sIFR3 ile yeni ne geldi onu göstereceğiz ve artı ipuçları vereceğiz.

sFIR 2 ile sIFR 3 eklenen dosya farkları

İlk olarak sIRF 2’den farklı olarak sIFR 3 eklene dosyalar farklıdır ve özellik tanımları için ek olarak sifr-config.js dosyası ile daha bir düzen getirilmiştir.

sIFR için sayfamıza eklememiz gereken dosyalar.

  • style/sIFR-print.css
  • style/sIFR-screen.css
  • js/sifr-config.js
  • js/sifr.js
  • swf/humanist.swf (Sizin oluşturduğunuz swf dosya ismi)

sifr-debug.js dosyasını sadece deneme yaparken kolay hata yakalamak için kullanmamız içindir, yayına atarken bu dosyayı eklemeye gerek yok.

sIFR örneklerimizi kendi bilgisayarımızda çalıştırmaya çalıştığımızda görünmeyecektir, sadece web sunucusu kurulu makinelerde çalışacaktır. Bu daha önceden meydana gelen bazı sorunları gidermek için eklenmiş bir özelliktir.

<link rel="stylesheet" href="style/sIFR-screen.css" type="text/css" media="screen" />
<link rel="stylesheet" href="style/sIFR-print.css" type="text/css" media="print" />
<script type="text/javascript" src="js/sifr.js"></script>
<script type="text/javascript" src="js/sifr-config.js"></script>

Yukarıdaki bir ekleme ile sIFR harici dosyalarını sayfamıza eklemeliyiz.

Bu dosyaları yerlerine koyup sayfamıza kodu ekledikten sonra yapacağımız ilk şey sifr-config.js dosyasını açıp swf dosyamızın yerini doğru bir şekilde eklemek olmalıdır.

var yazi_tipi = {
     src: '/dosya_yolu/yazi_tipi.swf'
};
sIFR.activate(yazi_tipi);
sIFR.replace(yazi_tipi, {
       selector: 'h2'
});

Şeklinde örnek aldığımız kodlardan yazi_tipi adı geçen yerlere kendi dosya ismimizi yazmalıyız.

sIFR metnine Stil Vermek

sIFR ile eklediğimiz metinlere css kodları ile özellik tanımı yapabiliriz. Alışık olduğumuz CSS özellik tanımlarını kullanma olanağı vererek bize çok büyük avantaj sağlıyor.

sIFR.replace(yazi_tipi, {
      selector: 'h2',
      css: [
      '.sIFR-root { font-size:36px; font-weight:bold; color:#ff0000; letter-spacing: -1.5}'
      ]
});

Örnek olması için yukarıda kodları yazdım, ancak bu kısma istediğimiz kodları ekleyebiliriz. letter-spacing tanımı ile harfler arası mesafeyi ayarlayabiliriz. Değeri verirken birimini yazmıyoruz. Benzer şekilde bir çok özellik ekleyebiliriz.

Satır yüksekliğini ayarlamak

sIFR.replace(yazi_tipi, {
      selector: 'h2',
      css: [
      '.sIFR-root { font-size:36px; font-weight:bold; leading: 1; letter-spacing: -1.5}'
      ]
});

leading: 1 tanımı satır yüksekliğini(line-height tanımı yerine kullanılır) ayarlamak için kullanılır. Değer verilirken birim kullanılmaz. Eksi değer alabilir.

sIFR metinlerine bağlantı eklemek ve stil tanımlarını yapmak

sIFR uygulana metinlere bağlantı() ekleyebiliriz, bağlantı eklediğimizde bunun için birde stil tanımı yapmalıyız.

HTML kodu

<h2>
	<a href="#">Başlık</a>
</h2>

sifr-config.js dosyasında

sIFR.replace(yazi_tipi, {
  selector: 'h2'
  ,css: [
    '.sIFR-root { text-align: center; font-weight: bold; }'
    ,'a { text-decoration: none; }'
    ,'a:link { color: #000000; }'
    ,'a:hover { color: #CCCCCC; }'
  ]
});

Yukarıdaki tanımlama ile eklediğimiz bağlantının farklı durumları içinde tanım yapabiliyoruz. 

Benzer şekilde sIFR uyguladığımız eleman içindeki elemanlarada stil ekleyebiliriz. Örneğin

sIFR.replace(yazi_tipi, {
       selector: 'h2',
       css: [
       '.sIFR-root { font-size:24px; font-weight:normal; color:#9f0000; }',
       'em { font-style:italic; }',
       'strong { font-weight:bold; color:#333333; }'
       ]
});

Böylece sIFR içindeki her elemana farklı renk tanımı yapabiliriz.

Saydam(transparent) Özelliği Vermek

sIFR ile eklediğimiz metnin altında kalan alanlar nedeni ile bazen saydam olarak eklemek isteriz.  Yapmamız gereken çok basittir. Bir satır kod ile ardalanı saydam yapabiliriz.

sIFR.replace(yazi_tipi, {
      selector: 'h2',
      css: [
      '.sIFR-root { font-size:36px; font-weight:bold; color:#ff0000; }'
      ],
wmode: 'transparent'
});

wmode: ‘transparent’eklemesi işimizi görecektir.

Dinamik Oluşturulan İçerikteki Metinlere sFIR Uygulamak

Örneğin sekmeli bir içeriğin içindeki başlıklara sIFR uyguladığımızda sFIR sayfa yüklendiğinde uygulandığından diğer sekmelerdeki metinlere uygulanmayacaktır. Diğer sekmelerdeki metinlerede uygulamak için her sekme için uygulanan sFIR fonksiyonu çağırmalıyız.

$(tabs).click(function () {
    // her sekme icin uygulana tanimlar
    //diger eylemler

    // uygulana sFIR fonksiyonunun tetikliyoruz.
    sIFR.replace(baslik, {
        selector: 'h1'
        ,wmode: 'transparent'
        ,css: [
          '.sIFR-root { margin:0; color: #009200; font-size:20px;}'
        ]
    });

});

Sonuç

Birçok projemde kullandım sFIR metodunu. Gördüklerim buraya yazmayaçalıştım. Eğer sizinde eklemek istediğiniz ipuçları varsa yorum kısmınaeklerseniz güzel bir dokümantasyon oluşturmuş oluruz.

Kaynaklar

  • http://v4.designintellection.com/this-is-how-you-get-sifr-to-work
  • [http://net.tutsplus.com/tutorials/javascript-ajax/how-to-implement-sifr3-into-your-website/][]
"http://v4.designintellection.com/this-is-how-you-get-sifr-to-work/"   [http://net.tutsplus.com/tutorials/javascript-ajax/how-to-implement-sifr3-into-your-website/]: http://net.tutsplus.com/tutorials/javascript-ajax/how-to-implement-sifr3-into-your-website/
"http://net.tutsplus.com/tutorials/javascript-ajax/how-to-implement-sifr3-into-your-website/"