Rumah > hujung hadapan web > tutorial js > Bagaimana saya membuat peralihan togol ke elemen

Bagaimana saya membuat peralihan togol ke elemen

DDD
Lepaskan: 2025-01-26 14:32:12
asal
759 orang telah melayarinya

How I made toggle transition to <details> elemen

Elemen HTML <details> menyediakan cara mudah untuk mencipta bahagian kandungan yang boleh dikembangkan dan boleh dilipat. Mari kita terokai cara untuk mempertingkatkan fungsi ini dengan peralihan CSS yang lancar dan menangani had penggunaan CSS sahaja.

Perlaksanaan <details> asas kelihatan seperti ini:

<details>
  <summary>Click to expand</summary>
  <p>This is the content.</p>
</details>
Salin selepas log masuk

Sementara ini berfungsi, menambah peralihan yang lancar menggunakan CSS sahaja terbukti mencabar. CSS berikut, sebagai contoh, tidak menghasilkan kesan yang diingini:

details#my-details {
  transition-duration: 300ms;
}
Salin selepas log masuk

Untuk mencapai peralihan togol yang lancar, JavaScript diperlukan.

Penyelesaian

Kuncinya ialah membungkus kandungan dalam elemen <details> dengan elemen lain (di sini, <div>). Ini membolehkan kami menyasarkan dan menghidupkan kandungan secara berasingan:

<details id="my-details">
  <summary>Click to expand</summary>
  <div>
    <p>This is the content.</p>
  </div>
</details>
Salin selepas log masuk

Kod JavaScript berikut kemudiannya mengendalikan animasi:

const details = document.getElementById("my-details");
const summary = details.firstElementChild;
const content = summary.nextElementSibling;
let isAnimating = false;

summary.onclick = (ev) => {
  ev.preventDefault();
  if (isAnimating) return;

  const contentHeight = content.getBoundingClientRect().height;
  isAnimating = true;

  // Closing <details>
  if (details.open) {
    return content
      .animate(
        { height: [contentHeight + 'px', '0px'] },
        { duration: 300 }
      )
      .finished
      .then(() => details.open = isAnimating = false);
  }

  // Opening <details>
  details.open = true;
  content.animate(
    { height: ['0px', contentHeight + 'px'] },
    { duration: 300 }
  ).finished.then(() => isAnimating = false);
};
Salin selepas log masuk

Kod JavaScript ini menggunakan kaedah animate() untuk mengawal peralihan ketinggian pembungkus kandungan. Ambil perhatian bahawa dalam sesetengah kes, menambah overflow: hidden; pada CSS pembungkus kandungan mungkin diperlukan untuk hasil yang optimum.

Penjelasan

Kod JavaScript menghalang kelakuan lalai <summary>, mendapatkan ketinggian kandungan, dan kemudian menggunakan kaedah animate() untuk melaraskan ketinggian dengan lancar berdasarkan sama ada <details> membuka atau menutup. Pembolehubah isAnimating menghalang berbilang animasi daripada berjalan serentak.

Pembolehubah `isAnimating`

Bendera isAnimating memastikan hanya satu animasi berjalan pada satu masa, menghalang konflik dan tingkah laku yang tidak dijangka jika pengguna mengklik berulang kali semasa animasi sedang dijalankan.

Kesimpulan

Teknik ini menyediakan peralihan yang lancar dan terkawal untuk elemen <details>. Walaupun contoh ini menggunakan animasi ketinggian, kaedah animate() boleh disesuaikan untuk menganimasikan sifat CSS yang lain, menawarkan pendekatan serba boleh untuk mencipta interaksi pengguna yang menarik. Ingat bahawa menyelam lebih mendalam ke dalam kaedah animate() dan keupayaannya disyorkan untuk animasi yang lebih maju.

Atas ialah kandungan terperinci Bagaimana saya membuat peralihan togol ke elemen . Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan