Duyarlı Web Siteleri için Medyaya Bağlı JavaScript Animasyonlarını Düzeltme

JavaScript

Koşullu JavaScript Animasyonları Sorununu Anlamak

Duyarlı web tasarımı kullanılırken genellikle farklı cihaz türleri veya ekran boyutları için farklı davranışların birleştirilmesi gerekir. Bu durumda animasyonları medya sorgularına dayalı olarak kontrol etmek için JavaScript kullanmak zor olabilir. Her cihaz için bir tane olmak üzere iki animasyon beklendiği gibi aynı anda çalışmadığında bu yaygın bir sorundur.

Bu senaryoda iki JavaScript animasyonu kullanılır: biri "gezinme kaydırması" (daha büyük ekranlar için uygundur) ve diğeri daha küçük cihazlara yönelik "cta kaydırma" (harekete geçirici mesaj) için. Buradaki zorluk, çarpışmaları önlerken her animasyonun ekran genişliğine göre ayrı ayrı oynatılmasını sağlamakta yatmaktadır.

İki animasyon farklı komut dosyası etiketlerinde ayarlandığında ve bunlardan yalnızca biri düzgün çalıştığında bir sorun oluşur. Dikkatsizce uygulanırsa, bunları tek bir koşul altında birleştirmek veya komut dosyası etiketlerini birleştirmek, özellikle "window.matchMedia()" gibi medya sorguları kullanılırken başka sorunlara yol açabilir.

Bu yazıda, her animasyonun amaçlandığı gibi performans göstermesini sağlamak üzere JavaScript'inizi düzenlemek için medya koşullarının nasıl kullanılacağı ele alınacaktır. Mobil ve daha büyük ekranlar arasında kesintisiz geçiş sağlamak için uygun koşullu ifadelere ve medya sorgularına güçlü bir vurgu yapılacaktır.

Emretmek Kullanım örneği
window.matchMedia() JavaScript, medya sorgularını uygulamak için bu tekniği kullanır. Ekran boyutuna göre belgenin verilen CSS medya sorgusunu karşılayıp karşılamadığını belirler ve ilgili JavaScript işlemlerini başlatır. Bu komut dosyası, daha büyük ekranlara yönelik animasyonları mobil olanlara göre ayırt etmeyi kolaylaştırır.
addEventListener("change", callback) Bu komut, medya sorgusunun durumundaki değişiklikleri izler. Geri arama olarak sağlanan işlev, ekran genişliği önceden belirlenmiş bir eşiği (450 piksel gibi) aştığında gerçekleştirilir. Sayfa yenileme gerektirmeden dinamik yanıta izin verir.
removeEventListener("scroll", callback) Yanlış ekran boyutunda anlamsız olay işlemeyi ortadan kaldıran bu komut, artık gerekli olmadığında kaydırma olay dinleyicisini kaldırarak hızı optimize eder. Medya sorguları arasında geçiş yaparken bu zorunludur.
window.pageYOffset Belgede yukarı ve aşağı kaydırılan piksel miktarı bu özellik tarafından döndürülür. Kullanıcının yukarı mı yoksa aşağı mı kaydırdığını tespit etmek ve kaydırma konumunu takip etmek için kullanılır.
element.style.top Bu komut, bir öğenin sayfadaki dikey konumunu kontrol eden üst CSS özelliğini ayarlar. Burada, kullanıcının kaydırmasında gezinme çubuğunun nerede görüntüleneceğini veya gizleneceğini belirlemek için kullanılır.
element.style.left Bu komut, tıpkı element.style.top'un yaptığı gibi, sol CSS özelliğini ayarlayarak öğeleri yatay olarak taşır. Mobil cihazlarda, harekete geçirici mesaj düğmesini görünümün içine ve dışına kaydırmak için kullanılır.
mediaQuery.matches Bu özellik, medya sorgusunun ve belgenin artık eşleşip eşleşmediğini doğrular. Uygun animasyonun masaüstü bilgisayarların aksine mobil cihazlarda uygulandığından emin olmak için uygun animasyonların ekran genişliğine göre koşullu olarak çalıştırılması önemlidir.
prevScrollpos >prevScrollpos > currentScrollPos Kaydırma yönünü (yukarı veya aşağı) belirlemek için bu koşul, önceki ve mevcut yinelemelerdeki kaydırma konumlarını kontrol eder. Öğelerin kaydırmaya nasıl tepki vermesi gerektiğini belirlemek (örneğin, düğmeleri veya gezinme çubuklarını göstererek veya gizleyerek) çok önemlidir.
onscroll Kullanıcı tarafından kaydırılarak tetiklenen entegre bir olay işleyicisi. Önceki ve mevcut kaydırma konumlarını karşılaştırarak kaydırma tabanlı animasyonlar gerçekleştirir.

JavaScript Animasyonlarını Ekran Boyutuna Göre Yönetme

JavaScript komut dosyalarının önceki örnekleri, biri masaüstü, diğeri mobil cihazlar için olmak üzere iki farklı animasyona sahip olma sorununu çözmek için yapılmıştı. Cihazın ekran genişliğine bağlı olarak her animasyonun yalnızca ihtiyaç duyulduğunda başladığından emin olmak en önemli zorluktur. Bunu başarmak için, kodun belirli medya sorgu koşullarının karşılandığı örnekleri tanımlamasını sağlayan teknik kullanılır. Komut dosyaları, masaüstü (min-genişlik: 450 piksel) ve mobil (maks-genişlik: 450 piksel) için farklı koşullar kullanarak her animasyonun ekran boyutuna göre ayrı ayrı çalışmasını sağlar.

Gezinme çubuğu için daha büyük ekran kaydırma davranışı ilk komut dosyasında ele alınır. Kaydırma yönüne bağlı olarak, Kullanıcı yukarı veya aşağı kaydırdığında çubuk ya görünür kalır ya da kaybolur. kullanarak Ve değişkenler, bu önceki ve mevcut kaydırma konumlarının karşılaştırılmasıyla yönetilir. Yukarı kaydırma, gezinme çubuğunun üst konumunu 0'a ayarlayarak yeniden görünmesine neden olur ve aşağı kaydırma, negatif bir üst değerle görünüm dışına kaydırılarak kaybolmasına neden olur.

İkinci komut dosyası, mobil cihazlardaki "harekete geçirici mesaj" (CTA) düğmesiyle ilgilidir. Tüm ekran boyutlarında CTA düğmesi görüntülenir, ancak yalnızca ekran genişliği 450 pikselden az olduğunda animasyon uygulanır. Kullanıcı ekranı yukarı kaydırdığında düğme ekranın sol tarafından içeri doğru kayar; aşağı kaydırdıklarında düğme görünümden kaybolur. Gezinme çubuğuyla aynı kaydırma konumu karşılaştırma mantığıyla bu davranış karşılaştırılabilir. Ancak, üst değeri değiştirmek yerine düğmenin sol konumunu değiştirerek kaydırma yönüne göre görünmesine veya kaybolmasına neden olur.

İki betiğin birbirinden ayrı çalışması amaçlanıyor. Ancak bunlar, çakışmaları önlemek amacıyla ekran genişliğini doğrulayan koşullu ifadelerle kapsüllenir. İle , medya sorguları doğrudan JavaScript'te kullanılabilir ve bu, komut dosyalarının birbirine müdahale etmeden iki animasyon arasında dinamik olarak geçiş yapmasına olanak tanır. Bu modüler yaklaşım, gereksiz animasyonları belirlenen ekran genişlikleri dahilinde tutarak verimliliği artırır ve masaüstü ve mobil cihazlarda sorunsuz çalışmayı garanti eder.

JavaScript ile Medya Sorgularına Dayalı Koşullu Animasyonları İşleme

Bu çözüm, JavaScript'i aşağıdakilerle birlikte kullanarak ekran genişliğine bağlı koşullu animasyonları yönetir: window.matchMedia işlev.

var prevScrollpos = window.pageYOffset;
var mediaQueryNav = window.matchMedia("(min-width: 450px)");
var mediaQueryCta = window.matchMedia("(max-width: 450px)");

window.onscroll = function() { scrollFunction(); };

function scrollFunction() {
  var currentScrollPos = window.pageYOffset;
  if (mediaQueryNav.matches) {
    // Navigation scroll for larger screens
    if (prevScrollpos > currentScrollPos) {
      document.getElementById("navigation").style.top = "0";
    } else {
      document.getElementById("navigation").style.top = "-90px";
    }
  }
  if (mediaQueryCta.matches) {
    // CTA scroll for mobile screens
    if (prevScrollpos > currentScrollPos) {
      document.getElementById("header-button").style.left = "0.25in";
    } else {
      document.getElementById("header-button").style.left = "-10in";
    }
  }
  prevScrollpos = currentScrollPos;
}

Farklı Ekran Boyutları için Ayrı Olay Dinleyicileri Kullanan Modüler Yaklaşım

Bu sürüm, her medya sorgusu için farklı kaydırma olay dinleyicileri kullandığından daha verimli ve modülerdir.

var prevScrollpos = window.pageYOffset;
var mediaQueryNav = window.matchMedia("(min-width: 450px)");
var mediaQueryCta = window.matchMedia("(max-width: 450px)");

mediaQueryNav.addEventListener("change", handleNavScroll);
mediaQueryCta.addEventListener("change", handleCtaScroll);

function handleNavScroll(e) {
  if (e.matches) {
    window.addEventListener("scroll", navScrollFunction);
  } else {
    window.removeEventListener("scroll", navScrollFunction);
  }
}

function handleCtaScroll(e) {
  if (e.matches) {
    window.addEventListener("scroll", ctaScrollFunction);
  } else {
    window.removeEventListener("scroll", ctaScrollFunction);
  }
}

function navScrollFunction() {
  var currentScrollPos = window.pageYOffset;
  if (prevScrollpos > currentScrollPos) {
    document.getElementById("navigation").style.top = "0";
  } else {
    document.getElementById("navigation").style.top = "-90px";
  }
  prevScrollpos = currentScrollPos;
}

function ctaScrollFunction() {
  var currentScrollPos = window.pageYOffset;
  if (prevScrollpos > currentScrollPos) {
    document.getElementById("header-button").style.left = "0.25in";
  } else {
    document.getElementById("header-button").style.left = "-10in";
  }
  prevScrollpos = currentScrollPos;
}

// Initial call to apply the correct event listeners
handleNavScroll(mediaQueryNav);
handleCtaScroll(mediaQueryCta);

Medya Sorguları için Birleşik Kaydırma İşleyicisine Koşullu Mantığı Uygulama

Bu yöntem, her iki animasyonu da işlemek için medya sorgularına bağlı olarak koşullu kontrollere sahip tek bir kaydırma olay dinleyicisi kullanır.

var prevScrollpos = window.pageYOffset;
var mediaQuery = window.matchMedia("(max-width: 450px)");

window.onscroll = function() { scrollHandler(); };

function scrollHandler() {
  var currentScrollPos = window.pageYOffset;
  if (mediaQuery.matches) {
    // CTA scroll for mobile
    if (prevScrollpos > currentScrollPos) {
      document.getElementById("header-button").style.left = "0.25in";
    } else {
      document.getElementById("header-button").style.left = "-10in";
    }
  } else {
    // Navigation scroll for larger screens
    if (prevScrollpos > currentScrollPos) {
      document.getElementById("navigation").style.top = "0";
    } else {
      document.getElementById("navigation").style.top = "-90px";
    }
  }
  prevScrollpos = currentScrollPos;
}

Duyarlı Animasyonlar için JavaScript'i Optimize Etme

Duyarlı web siteleri geliştirmenin önemli bir bileşeni, geçişlerin ve animasyonların farklı boyuttaki cihazlarda farklı tepki vermesini sağlamaktır. Medya sorguları ve JavaScript ile çalışırken, özellikle de animasyonların yalnızca belirli ekran boyutlarında başlatılması amaçlandığında, etkili durum yönetimi çok önemlidir. Burası dinamik olay dinleyicilerinin ve oyuna gel. Bu araçların yardımıyla geliştiriciler, animasyonların yalnızca belirli kriterler karşılandığında başlatılmasını sağlayarak hem masaüstü hem de mobil platformlarda kullanıcı deneyimini ve performansını iyileştirebilir.

Aynı anda çalışan çok sayıda animasyonun işlenmesi, ortama bağlı JavaScript animasyonları için başka bir zorluk oluşturur. İşlevselliği daha yönetilebilir, modüler olay dinleyicilerine bölmek bu durumda harikalar yaratabilir. Tüm komut dosyalarını aynı anda yürütmek yerine, çeşitli işlevleri ayırmak ve bunları belirli medya sorgularına göre etkinleştirmek daha verimlidir. Bu, her komut dosyasının uygun cihazda amaçlandığı şekilde çalışmasını sağlar ve gereksiz tarayıcı yükünden tasarruf etmenize yardımcı olur.

Mobil cihazlar için performans optimizasyonu özellikle duyarlı animasyonlarla çalışırken çok önemlidir. Mobil cihazlar genellikle masaüstü bilgisayarlara göre daha düşük işlem gücüne sahip olduğundan, mobil cihazların performansı, komut dosyası karmaşıklığı azaltılarak geliştirilebilir. Bu kullanım örneği olay işleyici, cihazın kaynaklarını yormadan "cta kaydırma" gibi mobil cihazlara özel animasyonların sorunsuz çalışmasını etkili bir şekilde garanti eder. Ayrıca, daha büyük cihazların animasyonları yalnızca ekran boyutuyla orantılı olarak yüklemesini garanti eder.

  1. Medya sorgularını JavaScript'te nasıl kullanırım?
  2. JavaScript, medya sorgularını uygulamanıza olanak tanır . Ekranın genişliğine göre farklı komut dosyalarını çalıştırmak için bu yolu kullanabilirsiniz.
  3. Animasyonları ekran boyutuna göre nasıl kontrol ederim?
  4. Kullanmak Animasyonları kontrol etmek amacıyla ekran genişliğini belirlemek için. Daha sonra gerektiği şekilde olay dinleyicilerini ekleyin veya kaldırın. Bu, ekran boyutuna bağlı olarak yalnızca ilgili animasyonun oynatılacağını garanti eder.
  5. Kaydırma animasyonlarını optimize etmenin en iyi yolu nedir?
  6. Scroll olayı içerisinde gerçekleştirilen işlem sayısını azaltarak, kaydırma animasyonu optimizasyonunda daha etkili kullanılabilir. Bir kaydırma algılandığında ancak o zaman gerekli animasyon mantığı yürütülür.
  7. JavaScript'te birden fazla animasyonu nasıl kullanırım?
  8. Birden fazla animasyon, farklı koşullara ve olay dinleyicilerine bölünerek yönetilebilir. Bu, her animasyon ayrı ayrı çalıştığından çakışma olasılığını azaltır.
  9. ne işe yarar Ve kaydırma animasyonunda ne yapmalısınız?
  10. Bu değişkenler kullanıcının kaydırma yaptığı yeri izler. Önceki kaydırma konumu şurada saklanır: ve geçerli kaydırma konumu şurada saklanır . Bunları karşılaştırarak kullanıcının yukarı mı yoksa aşağı mı kaydırdığını anlamak mümkündür.

Sonuç olarak duyarlı bir web sitesinin oluşturulması, çeşitli cihazlar için JavaScript animasyonlarının yönetilmesini gerektirir. Geliştiriciler, aşağıdaki gibi araçların kullanımı yoluyla ekran genişliğine göre belirli animasyonları tetikleyerek en uygun kullanıcı deneyimini sağlayabilirler. .

Doğru şekilde uygulandığında web siteleri, çeşitli cihazlardaki görsel davranışlarını ve performanslarını geliştirebilir. Bunu yapmanın bir yolu, kaydırma animasyonlarını seçici olarak uygulamak ve bunları izole etmektir. Bu yöntem, masaüstü ve mobil animasyonlar arasında kusursuz geçişleri garanti eder ve komut dosyası çakışmalarının önlenmesine yardımcı olur.

  1. Bu makale, duyarlı web tasarımı ve JavaScript kullanımına ilişkin en iyi uygulamalardan ilham alınarak hazırlanmıştır. Mozilla Geliştirici Ağı (MDN) . MDN, MDN'nin nasıl etkili bir şekilde kullanılacağına dair ayrıntılı belgeler sağlar. ve JavaScript'teki diğer medya sorgulama teknikleri.
  2. Kaydırma tabanlı animasyonları optimize etmeye yönelik ek kaynaklar şuradan toplandı: CSS Püf Noktaları nasıl yapıldığına dair bilgiler sunarak çalışır ve farklı ekran boyutları için özelleştirilebilir.
  3. Farklı cihazlarda JavaScript'i yönetmeye yönelik performans optimizasyonu ipuçları ve stratejileri şu adresten alınmıştır: Çarpıcı Dergi duyarlı web uygulamaları için modüler komut dosyalarının önemini vurgulamaktadır.