التخلص بلا رحمة من Layout Shift على netlify.com

تحية طيبة. إليكم ترجمة لمقال  "القضاء بلا رحمة على تغيير التخطيط على Netlify.com" الذي نشره المؤلف زاك ليثرمان في 25 نوفمبر 2020.





على موقع Netlify ، لدينا لافتة صغيرة تظهر في الجزء العلوي لتوجيه حركة المرور إلى أشياء جديدة ومثيرة للاهتمام تحدث في عالم Netlify.





يتكون هذا الشعار من جزأين:





  1. ميزة HTML متقدمة يعرفها مطورو المدرسة القديمة فقط: الارتباط التشعبي.





  2. ( )





, :





  1. . ⚠️⚠️⚠️ . JavaScript JavaScript .





  2. JavaScript localStorage



    , , . - URL- , , . - .





  3. , . , HTML ().





2 3 . 1 2 ~600 .





(, ) JavaScript 2 3 <body>



, :





? . . JavaScript , .





1, . JavaScript JavaScript .





JavaScript- : , , - .





Update: GitHub .





HTML  CSS

opacity



, , JavaScript.





.banner--hide announcement-banner,
announcement-banner[hidden] {
  display: none;
}
[data-banner-close] {
  opacity: 0;
  pointer-events: none;
}
.banner--show-close [data-banner-close] {
  opacity: 1;
  pointer-events: auto;
}
      
      



<announcement-banner>
  <a href="https://www.netlify.com/sustainability/">Read about our Sustainability</a>
  <button type="button" data-banner-close>Close</button>
</announcement-banner>
      
      



JavaScript

banner-helper.js



,  <head>



:





//  CTA ,     JSON 
let ctaUrl = "https://www.netlify.com/sustainability/";
let savedCtaUrl = localStorage.getItem("banner--cta-url");

if(savedCtaUrl === ctaUrl) {
  document.documentElement.classList.add("banner--hide");
}
      
      



banner.js



, ( - ):





class Banner extends HTMLElement {
  connectedCallback() {
    //   ,   ,    , 
    //       -     
    //      .
    this.classList.add("banner--show-close");

    let button = this.getButton();
    if(button) {
      button.addEventListener("click", () => {
        this.savePreference();
        this.close();
      });
    }
  }

  getButton() {
    return this.querySelector("[data-banner-close]");
  }

  savePreference() {
    let cta = this.querySelector("a[href]");
    if(cta) {
      let ctaUrl = cta.getAttribute("href");
      localStorage.setItem("banner--cta-url", ctaUrl);
    }
  }

  close() {
    this.setAttribute("hidden", true);
  }
}

window.customElements.define("announcement-banner", Banner);
      
      



, -, .





, ! , JavaScript .





, Layout Shift .





ونظرًا لأننا أدخلنا نص إعادة العرض في <head>



، عندما يخفي المستخدم الشعار وينتقل إلى صفحة جديدة ، فسيتم إخفاء الشعار أيضًا قبل العرض الأول.





جيد جدا لمثل هذه التغييرات الصغيرة!





سيكون الهدف التالي هو تحسين عرض خطوط الويب.








All Articles