Sobes.tech
Intern

Vue'ga voqealarni qanday ishlashni o'rgatish mumkin, interaksiya o'chirilgan bo'lsa?

sobes.tech AI

AIdan javob

Vue'da, pointer-events: none ilə olan elementlərdə birbaşa hadisələri idarə etmək mümkün deyil, çünki onlar siçan və toxunma hadisələrində iştirak etmirlər. Bu problemi aşmaq üçün alternativ yanaşmalar istifadə olunur:

  1. Hadisəni valideyn elementə ötürmək: Valideyn daxilində qarşılıqlı əlaqəsiz element yerləşdirmək, bu element hadisələri dinləyəcək və yönləndirəcək.

    <template>
      <div @click="handleEvent">
        <div style="pointer-events: none;">Əlaqəsiz element</div>
      </div>
    </template>
    
    <script>
    export default {
      methods: {
        handleEvent(event) {
          // Hadisənin işlənməsi üçün məntiq, məsələn, event.target əsasında
          console.log('Valideyn üzərində hadisə tutuldu', event.target);
        }
      }
    }
    </script>
    
  2. Overlay istifadə etmək: Əlaqəsiz elementin üzərinə qarşılıqlı əlaqəli və şəffaf element yerləşdirmək.

    <template>
      <div style="position: relative;">
        <div style="pointer-events: none;">Overlay altında əlaqəsiz element</div>
        <div style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0); cursor: pointer;" @click="handleOverlayClick"></div>
      </div>
    </template>
    
    <script>
    export default {
      methods: {
        handleOverlayClick() {
          // Overlay üzərində klik üçün məntiq
          console.log('Şəffaf overlay üzərində klik');
        }
      }
    }
    </script>
    
  3. Proqram təminatı ilə hadisələrin simulasyonu: JavaScript istifadə edərək kursor və ya toxunuşun mövqeyini müəyyənləşdirin və müvafiq məntiqi çağırın, hadisənin işlənməsini təqlid edin. Bu metod daha mürəkkəbdir və elementlərin mövqelərinin dəqiq hesablanmasını tələb edir.

    // Əlaqəsiz element üzərində klik aşkarlamaq üçün pseudokod nümunəsi
    document.addEventListener('click', function(event) {
      const element = document.getElementById('my-non-interactive-element');
      const rect = element.getBoundingClientRect();
    
      if (event.clientX >= rect.left && event.clientX <= rect.right &&
          event.clientY >= rect.top && event.clientY <= rect.bottom) {
        console.log('Proqram təminatı ilə müəyyən edilmiş klik, əlaqəsiz element üzərində');
        // Sizin məntiqiniz
      }
    });
    

Seçim, konkret tapşırıq və DOM strukturundan asılıdır. Hadisəni valideyn elementə ötürmək ən sadə və üstün tutulan yanaşmadır.