Langkau ke kandungan

Interaksi ​

Panggil balik berbanding peristiwa ​

Panggil balik (onclick, onhover, callback) ialah nama fungsi global yang dicari pada window apabila peristiwa berlaku. Takrifkannya sebelum adegan dimuatkan — kesilapan ejaan menyebabkan tiada tindakan tanpa amaran.

html
<a-sxr-button value="Press me" onclick="handleClick"></a-sxr-button>

<script>
  function handleClick(event) {
    console.log('clicked', event)
  }
</script>

Integrasi moden boleh mengelakkan fungsi global sepenuhnya dan mendengar peristiwa widget itu sendiri:

js
document.querySelector('a-sxr-button')
  .addEventListener('click', (event) => console.log('clicked', event))
PeristiwaButiranDikeluarkan oleh
clickPeristiwa DOM/A-Frame asalSemua widget interaktif
input{ value } semasa nilai berubaha-sxr-input (penyuntingan asli)
change{ value } apabila disahkana-sxr-input (penyuntingan asli)
hovergui / leaveguiKursor masuk/keluara-sxr-cursor

Tandatangan panggil balik ​

WidgetTandatangan
Peluncur(event, percent)
Peluncur Menegak(percent) — untuk pengaktifan penuding dan papan kekunci
Pemasa Bulatan() apabila kira detik tamat

Nama peristiwa pengaktifan ​

Sifat on menamakan peristiwa yang mencetuskan tindakan onclick. Ia boleh diubah selepas permulaan dan pendengar diikat semula kepada nama baharu.

Pintasan papan kekunci ​

Setiap widget interaktif menerima pintasan:

SifatTujuan
keyKekunci pintasan teks yang mengaktifkan widget (cth. e)
key-codeKekunci pintasan angka lama (cth. 32 untuk Space)
  • Pengaktifan papan kekunci didaftarkan bagi setiap widget; mengikat kekunci sama kepada beberapa widget mengaktifkan semuanya.
  • Pintasan diabaikan semasa pengguna menaip dalam medan teks, semasa komposisi IME dan bagi tekanan kekunci berulang automatik.
  • key="e" berfungsi secara bebas daripada key-code="32" angka lama. Apabila kekunci pintasan widget sepadan dengan tekanan kekunci yang difokuskan, hanya pintasan diaktifkan (tiada pengaktifan berganda).

Operasi papan kekunci (desktop) ​

Apabila widget mempunyai fokus DOM (klik padanya, atau gunakan Tab):

WidgetKekunci
ButangEnter / Space mengaktifkan
SuisEnter / Space menukar keadaan (widget yang dinyahaktifkan mengabaikannya)
Butang radioSpace memilih; kekunci anak panah bergerak melalui kumpulan
Peluncur←/→ (dan ↑/↓) mengubah sebanyak keyboard-step; Home/End melompat ke 0/1
Peluncur menegak↑/↓ (dan ←/→) mengubah sebanyak keyboard-step; Home/End melompat ke 0/1
InputEnter / Space mengaktifkan; penyuntingan asli memerlukan native-editing="true"

Kursor ​

a-sxr-cursor menyediakan penuding untuk berinteraksi dengan elemen GUI. Ia mempunyai empat reka bentuk — dot, ring, cross dan reticle.

html
<a-entity id="cameraRig" position="0 1.6 0">
  <a-camera look-controls wasd-controls position="0 0 0">
    <a-sxr-cursor id="cursor"
                  fuse="true" fuse-timeout="2000"
                  color="#ECEFF1"
                  hover-color="#CFD8DC"
                  active-color="#607D8B"
                  design="ring">
    </a-sxr-cursor>
  </a-camera>
</a-entity>

Primitif menyertakan raycaster dengan skop yang ditetapkan secara lalai (objects: [sxr-interactable], interval: 100), jadi raycast kursor hanya menyemak widget interaktif dan bukannya seluruh adegan. Gantikannya dengan atribut raycaster="..." jika anda memerlukan sasaran lain.

html
<a-sxr-cursor
  raycaster="objects: [sxr-interactable]"
  fuse="false">
</a-sxr-cursor>

Pengawal VR ​

Widget terus berfungsi dengan raycaster berasaskan pengawal A-Frame — peristiwa click pengawal membawa persilangan sinar, jadi peluncur dan input bertindak balas pada titik tepat:

html
<a-entity id="leftHand" laser-controls="hand: left"
          raycaster="objects: [sxr-interactable]"></a-entity>
<a-entity id="rightHand" laser-controls="hand: right"
          raycaster="objects: [sxr-interactable]"></a-entity>

Gunakan komponen raycaster-origin A-Frame pada entiti pengawal untuk mengalihkan asal sinar (cth. ke hujung model pengawal).

Mengapa [sxr-interactable]?

Setiap widget interaktif membawa komponen sxr-interactable. Menghadkan raycaster kepada pemilih tersebut mengekalkan prestasi penuding VR tanpa bergantung pada kerumitan adegan.