برنامه نویسی

ایجاد مسیرهای جاوا اسکریپت برای وب سایت وردپرس با نوار پیشرفت جریان CSS

توضیحات تصویر

در این مقاله، نحوه ایجاد مسیرهای جاوا اسکریپت برای یک وب سایت وردپرسی، امکان ناوبری صاف در سمت مشتری و پیاده سازی نوار پیشرفت جریان CSS را برای بهبود تجربه کاربر، یاد خواهیم گرفت. ما از جاوا اسکریپت بومی بدون هیچ چارچوب یا کتابخانه ای استفاده خواهیم کرد. در پایان این آموزش، شما درک کاملی از نحوه ساخت مسیرهای جاوا اسکریپت و پیاده سازی نوار پیشرفت جریان CSS در وب سایت وردپرس خود خواهید داشت.

پیش نیازها

برای دنبال کردن این مقاله، باید درک اولیه ای از HTML، CSS و جاوا اسکریپت داشته باشید. علاوه بر این، آشنایی با وردپرس و سیستم قالب بندی آن نیز مفید خواهد بود.

شروع شدن

قبل از اینکه به کدها بپردازیم، مطمئن شوید که یک وب سایت وردپرسی دارید و در حال اجرا هستید. یک دایرکتوری جدید در پوشه تم خود ایجاد کنید و نام آن را بگذارید js. درون js دایرکتوری، یک فایل جدید به نام ایجاد کنید main.js. این فایل اصلی جاوا اسکریپت ما خواهد بود که در آن مسیرهای جاوا اسکریپت و نوار پیشرفت CSS را اجرا می کنیم.

باز کن functions.php فایل قالب وردپرس خود را در صف قرار دهید main.js فایل. کد زیر را به خود اضافه کنید functions.php فایل:

function enqueue_custom_scripts() {
    wp_enqueue_script( 'custom-scripts', get_template_directory_uri() . '/js/main.js', array(), '1.0', true );
}
add_action( 'wp_enqueue_scripts', 'enqueue_custom_scripts' );
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این کد تضمین می کند که main.js فایل در قسمت جلوی وب سایت وردپرس شما بارگذاری می شود.

نوار پیشرفت جریان را تنظیم کنید

  1. فایل header.php قالب وردپرس خود را باز کنید.
  2. یک عنصر نوار پیشرفت جریان را به ساختار HTML اضافه کنید. مثلا:
<div class="progress-bar-container">
  <div class="progress-bar"></div>
</div>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پیاده سازی مسیرهای جاوا اسکریپت

اکنون، بیایید پیاده سازی مسیرهای جاوا اسکریپت را برای وب سایت وردپرس خود شروع کنیم. باز کن main.js فایل و کد زیر را اضافه کنید:

document.addEventListener("DOMContentLoaded", function () {
  const progressBar = document.getElementById("progress-bar");
  // Update the progress bar width based on the loading percentage
  function updateProgressBar(percentage) {
    progressBar.style.width = `${percentage}%`;
    progressBar.classList.add("filled");
    // hide progress bar when content is loaded
    if (percentage == 100) {
      setTimeout(() => {
        progressBar.classList.remove("filled");
        progressBar.style.width = 0;
      }, 300);
    }
  }
  // Fetch content based on the URL and update the page
  function fetchContent(url) {
    updateProgressBar(0); // Reset progress bar
    console.log(url);
    fetch(url, {
      headers: {
        "Content-Type": "text/html; charset=utf-8",
      },
      mode: "cors",
    })
      .then((response) => {
        const reader = response.body.getReader();
        const decoder = new TextDecoder("utf-8");
        const total = +response.headers.get("Content-Length");
        let loaded = 0;
        let html = "";
        function read() {
          reader.read().then(({ done, value }) => {
            if (done) {
              const parser = new DOMParser();
              const doc = parser.parseFromString(html, "text/html");
              // Extract the specific HTML element and their child's from the parsed document
              const primary = doc.querySelector("#primary");
              // take content element from current page
              const appContainer = document.getElementById("content");
              // Then, Remove all child elements
              while (appContainer.firstChild) {
                appContainer.removeChild(appContainer.firstChild);
              }
              // Append a new element
              appContainer.appendChild(primary);
              updateProgressBar(100); // Set progress bar to 100% when content is loaded
              return;
            }
            loaded += value.length;
            updateProgressBar((loaded / total) * 100);
            const chunk = decoder.decode(value, { stream: true });
            html += chunk;
            // Process the content here if needed
            // somthing like pelase wait or spinner..
            read(); // Continue reading the stream
          });
        }
        read();
      })
      .catch((error) => {
        console.error(error);
        updateProgressBar(0); // Reset progress bar in case of errors
      });
  }
  // Handle link clicks
  function handleLinkClick(event) {
    const target = event.target;
    // Check if the clicked element or its parent is an anchor element
    const anchor = target.closest("a");
    if (anchor) {
      event.preventDefault();
      // Get the href attribute of the anchor element
      const targetUrl = anchor.getAttribute("href");
      // Update the URL and push a new history state
      history.pushState(null, "", targetUrl);
      // Fetch and load the content for the clicked link
      fetchContent(targetUrl);
    }
  }
  // Attach click event listeners to all links
  const allLinks = document.querySelectorAll("a");
  allLinks.forEach((link) => {
    link.addEventListener("click", handleLinkClick);
  });
  // Handle the popstate event to update the page when the user navigates back/forward
  window.addEventListener("popstate", () => {
    fetchContent(window.location.href);
  });
});
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در کد بالا، ابتدا یک رویداد شنونده را به آن متصل می کنیم DOMContentLoaded رویداد برای اطمینان از اجرای کد جاوا اسکریپت ما پس از اتمام بارگیری صفحه.

را handleLinkClick تابع مسئول رهگیری کلیک‌های لینک، جلوگیری از رفتار پیش‌فرض، شروع انیمیشن نوار پیشرفت، و واکشی محتوا برای پیوند کلیک‌شده با استفاده از fetchContent تابع.

را fetchContent تابع یک درخواست GET را به URL هدف ارسال می کند، پاسخ را به صورت متن بازیابی می کند، انیمیشن نوار پیشرفت را متوقف می کند و ظرف محتوا را با HTML واکشی شده به روز می کند.

مطمئن شوید که یک فایل CSS به HTML خود پیوند داده شده است، جایی که می توانید سبک های انیمیشن نوار پیشرفت را تعریف کنید. در اینجا یک مثال اولیه CSS برای نوار پیشرفت آورده شده است:

.progress-bar-container {
  width: 100%;
  height: 2px;
  background-color: transparent;
  position: absolute;
  top: 0;
  display: block;
}

.progress-bar {
  width: 0;
  height: 100%;
  background-color: #f00;
  position: relative;
  transition: width 0.3s ease-in-out;
  opacity: 0;
}
.progress-bar.filled {
  opacity: 1;
}
/* Optional: Add animation to the progress bar */
@keyframes progress-animation {
  0% {
    width: 0;
  }
  100% {
    width: 100%;
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با این تنظیمات، هر زمان که روی یک لینک در وب سایت وردپرس شما کلیک می شود، کد جاوا اسکریپت رویداد کلیک را قطع می کند، انیمیشن نوار پیشرفت را شروع می کند، محتوا را برای پیوند کلیک شده واکشی می کند و ظرف محتوا را به طور یکپارچه به روز می کند.

به راحتی می توانید سبک های CSS را مطابق با طراحی وب سایت خود سفارشی کنید.

خودشه! شما مسیرهای جاوا اسکریپت را با نوار پیشرفت جریان CSS برای وب سایت وردپرس خود با موفقیت پیاده سازی کرده اید. کاربران اکنون پیمایش روان و جذاب بین صفحات مختلف را تجربه خواهند کرد.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا