Sobes.tech
Intern

Kuidas õpetada Vue-le sündmusi töötlema, kui interaktsioon on välja lülitatud?

sobes.tech AI

Vastus AI-lt

Vue-s ei ole võimalik otse töödelda sündmusi elementidel, mille stiil on pointer-events: none, kuna need ei osale hiire ja puutetundlike sündmuste töötlemises. Selle probleemi lahendamiseks kasutatakse alternatiivseid lähenemisviise:

  1. Sündmuse edastamine vanemelemendile: Paigutada mitteinteraktiivne element vanemelemendi sisse, mis kuulab sündmusi ja edastab neid.

    <template>
      <div @click="handleEvent">
        <div style="pointer-events: none;">Mitteinteraktiivne element</div>
      </div>
    </template>
    
    <script>
    export default {
      methods: {
        handleEvent(event) {
          // Sündmuse töötlemise loogika, näiteks event.target põhjal
          console.log('Sündmus tabatud vanemal', event.target);
        }
      }
    }
    </script>
    
  2. Overlay kasutamine: Paigutada interaktiivne, läbipaistev element mitteinteraktiivse elemendi peale.

    <template>
      <div style="position: relative;">
        <div style="pointer-events: none;">Mitteinteraktiivne element overlay all</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() {
          // Overlaini kliki töötlemise loogika
          console.log('Läbipaistev overlay klõps');
        }
      }
    }
    </script>
    
  3. Programmaatiline sündmuste imiteerimine: Kasutada JavaScripti, et määrata kursori või puudutuse asukoht ning kutsuda välja vastav loogika, imiteerides sündmuse töötlemist. See meetod on keerulisem ja nõuab täpseid elementide positsioonide arvutusi.

    // Näide pseudokoodist, mis määrab kliki mitteinteraktiivse elemendi kohal
    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('Programmiliselt määratud klikk mitteinteraktiivse elemendi kohal');
        // Teie töötlemisloogika
      }
    });
    

Valik sõltub konkreetse ülesande ja DOM-i struktuuri nõuetest. Sündmuse edastamine vanemelemendile on sageli kõige lihtsam ja eelistatuim lähenemisviis.