Sobes.tech
Intern

Kā iemācīt Vue apstrādāt notikumus, kad interakcija ir izslēgta?

sobes.tech AI

Atbilde no AI

Vue tieši nevar apstrādāt notikumus elementos ar pointer-events: none stila, jo tie neiesaistās peles un skārienu notikumu apstrādē. Šo problēmu var risināt ar šādām alternatīvām pieejām:

  1. Notikuma pārsūtīšana vecākiem elementam: Novietot neinteraktīvu elementu iekšā vecāka elementa, kas klausīsies notikumus un deleģēs tos.

    <template>
      <div @click="handleEvent">
        <div style="pointer-events: none;">Neinteraktīvs elements</div>
      </div>
    </template>
    
    <script>
    export default {
      methods: {
        handleEvent(event) {
          // Notikuma apstrādes loģika, piemēram, balstoties uz event.target
          console.log('Notikums noķerts uz vecāka', event.target);
        }
      }
    }
    </script>
    
  2. Pārklājuma izmantošana: Novietot interaktīvu, caurspīdīgu elementu virs neinteraktīvā.

    <template>
      <div style="position: relative;">
        <div style="pointer-events: none;">Neinteraktīvs elements zem pārklājuma</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() {
          // Pārklājuma klikšķa apstrādes loģika
          console.log('Caurspīdīga pārklājuma klikšķis');
        }
      }
    }
    </script>
    
  3. Programmatiska notikumu imitācija: Izmantot JavaScript, lai noteiktu kursora vai pieskāriena pozīciju un izsauktu atbilstošu loģiku, imitējot notikuma apstrādi. Šī metode ir sarežģītāka un prasa precīzus elementu pozīciju aprēķinus.

    // Pseido-koda piemērs, lai noteiktu klikšķi uz neinteraktīva elementa
    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('Programmiski noteikts klikšķis uz neinteraktīva elementa');
        // Jūsu apstrādes loģika
      }
    });
    

Izvēle ir atkarīga no konkrētās uzdevuma un DOM struktūras. Notikuma pārsūtīšana vecāka elementam bieži ir vienkāršākais un vēlams pieejas veids.