اذهب إلى المحتوى
  • 0

تغيير كلاسات tailwind بإستخدام جافاسكريبت

ابراهيم الخليل سماني

السؤال

السلام عليكم,

لتطبيق قائمة جانبية تتوسع بالضغط على زر معيين وتعود بالضغط عليه مرة أخرى قمت بالتالي :


const toggleBtn = document.getElementById("toggle");
const navMenu = document.querySelector('aside');
const container = document.getElementById('container');
function toggleOn(){
    if(toggleBtn.classList.contains('toggle-on')){
        toggleBtn.classList.remove('toggle-on');
        toggleBtn.classList.add('toggle-off');
        navMenu.classList.remove('w-[75px]');
        navMenu.classList.remove('rounded-[40px]');
        navMenu.classList.add('w-[250px]');
        navMenu.classList.add('rounded-[20px]');
        container.classList.remove('left-[70px]');
        container.classList.add('left-[250px]');
    }else{
        toggleBtn.classList.remove('toggle-off');
        toggleBtn.classList.add('toggle-on');
        navMenu.classList.remove('w-[250px]');
        navMenu.classList.add('w-[75px]');
        navMenu.classList.remove('rounded-[20px]');
        navMenu.classList.add('rounded-[40px]');
        container.classList.remove('left-[250px]');
        container.classList.add('left-[70px]');
    }

لاحظوا أنني أكثرت الإستعلامات هل هاذا يؤدي إلى بطئ الموقع وهل هناك فكرة أخرى بديلة لتطبيقها

ولاحظوا أيضا أنني قمت بغيير عرض الحاوية من left-[70px] عندما تكون القائمة الجانبية غير موسعة أي تبدأ الحاوية من 70px يسار أما عندما تتوسع القائمة الجانبية وتاخد 250px جعلتها جعلت الحاوية تبدأ من اليسار ب250px left-[250]

        container.classList.remove('left-[70px]');
        container.classList.add('left-[250px]');

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

بداية، يمكنك اختصار الشيفرات التالية: 

function toggleOn(){
    if(toggleBtn.classList.contains('toggle-on')){
        toggleBtn.classList.remove('toggle-on');
        toggleBtn.classList.add('toggle-off');
        navMenu.classList.remove('w-[75px]');
        navMenu.classList.remove('rounded-[40px]');
        navMenu.classList.add('w-[250px]');
        navMenu.classList.add('rounded-[20px]');
        container.classList.remove('left-[70px]');
        container.classList.add('left-[250px]');
    }else{
        toggleBtn.classList.remove('toggle-off');
        toggleBtn.classList.add('toggle-on');
        navMenu.classList.remove('w-[250px]');
        navMenu.classList.add('w-[75px]');
        navMenu.classList.remove('rounded-[20px]');
        navMenu.classList.add('rounded-[40px]');
        container.classList.remove('left-[250px]');
        container.classList.add('left-[70px]');
    }

لتصبح:

function toggleOn(){
    if(toggleBtn.classList.contains('toggle-on')){
        toggleBtn.classList.remove('toggle-on');
        toggleBtn.classList.add('toggle-off');
      
        navMenu.classList.remove('w-[75px]' ,'rounded-[40px]');
        navMenu.classList.add('w-[250px]' ,'rounded-[20px]');

        container.classList.remove('left-[70px]');
        container.classList.add('left-[250px]');
    }else{
        toggleBtn.classList.remove('toggle-off');
        toggleBtn.classList.add('toggle-on');

        navMenu.classList.remove('w-[250px]' ,'rounded-[20px]');
        navMenu.classList.add('w-[75px]' ,'rounded-[40px]');

        container.classList.remove('left-[250px]');
        container.classList.add('left-[70px]');
    }

ثم ما الحاجة من كل هاته التلاعبات بشجرة الوثيقة؟ لما لا يكفي تغيير صنف واحد وليكن هو حاوي قائمة التصفح. قم بتبديل صنف واحد مثلا وليكن is-enabled

function toggleOn(){
    if(toggleBtn.classList.contains('toggle-on')){
        navMenu.classList.add('is-enabled')
    }else{
        navMenu.classList.remove('is-enabled')
    }

أو حتى:

function toggleOn(){
    navMenu.classList.toggle('is-enabled')

ثم تعامل مع الباقي عن طريق الـ css و tailwindCSS:

.nav-menu {
   
    // اي تنسيقات

}

.nav-menu .toggle-btn{
   
    // اي تنسيقات

}

.nav-menu .container{
   
    // اي تنسيقات

}

.nav-menu.is-enabled {
   
    // اي تنسيقات

}

.nav-menu.is-enabled .toggle-btn{
   
    // اي تنسيقات

}

.nav-menu.is-enabled .container{
   
    // اي تنسيقات

}

او عن طريق sass:

.nav-menu {
   
    // اي تنسيقات
    
    .toggle-btn{
         // اي تنسيقات
    }
    
    .container{
       // اي تنسيقات
    }
   

    &.is-enabled {
   
       // اي تنسيقات
       .toggle-btn{
         // اي تنسيقات
       }
    
       .container{
         // اي تنسيقات
       }

    }
}

يوجد قاعدة تسعى لتحسين تجربة الاستخدام تسمى Less Javascript, more HTML and CSS أي "اقل جافاسكربت ، اكثر HTML و CSS". حاول التقليل من الاعتماد على جافاسكربت كليا في اشياء يمكن القيام بها عن طريق css (رغم انها قادرة).

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...