Akan sangat bagus jika Anda bisa melakukannya, tetapi saat ini tidak memungkinkan dan saya rasa tidak akan pernah (e. g. bagaimana Anda menghidupkan ke "display. meja"?). Tapi ada cara untuk mengatasinya, dan saya akan menyajikan satu cara di sini Show Mengapa Perlu Menghidupkan "tampilan"?Kebutuhan untuk menganimasikan properti
Untuk alasan ini, menganimasikan Mari kita lihat bagaimana Anda dapat mencoba memecahkan masalah ini, selangkah demi selangkah Gunakan Opacity dan TampilanHal pertama yang mungkin ingin Anda lakukan adalah menggunakan properti <div id="box" class="box"> </div> <button>TOGGLE VISIBILITY</button> Dan CSS mungkin terlihat seperti ini .box { background: goldenrod; width: 300px; height: 300px; margin: 30px auto; transition: all 2s linear; display: block; } .hidden { display: none; opacity: 0; }_ Perhatikan saya memiliki .box { background: goldenrod; width: 300px; height: 300px; margin: 30px auto; transition: all 2s linear; display: block; } .hidden { display: none; opacity: 0; }0 dan .box { background: goldenrod; width: 300px; height: 300px; margin: 30px auto; transition: all 2s linear; display: block; } .hidden { display: none; opacity: 0; }1 di kelas "tersembunyi" saya. Jika Anda mengaktifkan kelas "tersembunyi" ini menggunakan JavaScript, Anda mungkin memiliki kode yang terlihat seperti ini let box = document.getElementById('box'), btn = document.querySelector('button'); btn.addEventListener('click', function () { box.classList.toggle('hidden'); }, false);_ Tetapi jika Anda melakukannya, Anda tidak akan melihat transisi (didefinisikan dalam blok deklarasi .box { background: goldenrod; width: 300px; height: 300px; margin: 30px auto; transition: all 2s linear; display: block; } .hidden { display: none; opacity: 0; }2) berlaku. Sebaliknya, Anda akan melihat ini Lihat Pena Klik tombol 'beralih visibilitas' berulang kali dan Anda akan melihat kotak menghilang dan muncul tiba-tiba, tanpa transisi Untuk memperbaikinya, Anda dapat mencoba memisahkan properti .hidden { display: none; } .visuallyhidden { opacity: 0; }_ Kemudian Anda dapat mengaktifkan kedua kelas var box = $('#box'); $('button').on('click', function () { box.toggleClass('visuallyhidden'); box.toggleClass('hidden'); }); Tapi ini tidak akan berhasil, seperti yang ditunjukkan pada demo di bawah ini Lihat Pena Apa yang kita inginkan adalah elemen menghilang secara visual, kemudian dihapus dari halaman setelah selesai menghilang secara visual, dengan cara yang mirip dengan fungsi callback (Sebagai poin tambahan di sini, bahkan jika Anda menggabungkan .box { background: goldenrod; width: 300px; height: 300px; margin: 30px auto; transition: all 2s linear; display: block; } .hidden { display: none; opacity: 0; }1 dengan .box { background: goldenrod; width: 300px; height: 300px; margin: 30px auto; transition: all 2s linear; display: block; } .hidden { display: none; opacity: 0; }6, itu akan dianimasikan dengan baik tetapi elemen akan tetap menempati ruang di halaman setelah menghilang, jadi itu juga tidak akan berhasil. ) Mengapa Ini Tidak Berhasil?Sebelum membahas solusi saya, saya hanya akan menjelaskan mengapa Anda tidak dapat melakukan ini hanya dengan mengubah kelas satu per satu. Pertama, jika Anda menambahkan kelas seperti pada contoh di atas, meskipun transisi berhasil, Anda harus menyiapkan bagian terpisah untuk menghapus kelas dan membalikkan cara melakukannya (i. e. jika kotak mulai tersembunyi, Anda harus menyetelnya terlebih dahulu ke .box { background: goldenrod; width: 300px; height: 300px; margin: 30px auto; transition: all 2s linear; display: block; } .hidden { display: none; opacity: 0; }7, lalu ubah opasitasnya) Tapi itu tidak penting, karena bagaimanapun juga itu tidak berhasil. JavaScript mengeksekusi baris demi baris, tetapi tidak menunggu semua hal yang terkait dengan satu baris selesai sebelum mengeksekusi baris berikutnya. (Dengan kata lain, jika Anda menjalankan animasi atau peristiwa asinkron lainnya di baris 1, baris 2 akan dilanjutkan meskipun animasi belum selesai) Apa yang terjadi adalah bahwa 'opasitas' berusaha untuk segera dianimasikan, dan bahkan jika sepersekian milidetik mulai dianimasikan, Anda tidak akan melihatnya karena bagian .box { background: goldenrod; width: 300px; height: 300px; margin: 30px auto; transition: all 2s linear; display: block; } .hidden { display: none; opacity: 0; }0 akan berlaku dengan cepat Kita dapat meringkas masalah yang ingin kita selesaikan sebagai berikut
Solusi yang MungkinMungkin ada cara lain untuk melakukan ini, dan saya senang mendengar bagaimana Anda memecahkan masalah ini. Tapi inilah solusi saya CSS-nya sama (dengan dua kelas 'tersembunyi' masih terpisah), tetapi JavaScript akan terlihat seperti ini let box = document.getElementById('box'), btn = document.querySelector('button'); btn.addEventListener('click', function () { if (box.classList.contains('hidden')) { box.classList.remove('hidden'); setTimeout(function () { box.classList.remove('visuallyhidden'); }, 20); } else { box.classList.add('visuallyhidden'); box.addEventListener('transitionend', function(e) { box.classList.add('hidden'); }, { capture: false, once: true, passive: false }); } }, false); Dan inilah aksinya Lihat Pena Berikut ringkasan tentang apa yang dilakukan kode saat kotak terlihat
Karena Anda tidak dapat mendeteksi peristiwa let box = document.getElementById('box'), btn = document.querySelector('button'); btn.addEventListener('click', function () { box.classList.toggle('hidden'); }, false);_4 pada properti display , Anda harus menggunakan metode lain ketika kotak tidak terlihat
Keterlambatannya sangat kecil (20 milidetik), tetapi karena .box { background: goldenrod; width: 300px; height: 300px; margin: 30px auto; transition: all 2s linear; display: block; } .hidden { display: none; opacity: 0; }7 terjadi secara instan, Anda tidak memerlukan banyak penundaan sama sekali, cukup untuk memungkinkan elemen menempati tempat penuhnya di halaman sebelum menganimasikan opacity. Anda mungkin harus mengutak-atik pengaturan waktu dalam beberapa kasus, mungkin turun hingga satu milidetik Dan jika Anda ingin memulai dengan kotak yang tersembunyi dan membuatnya muncul, Anda hanya perlu memastikan bahwa kelas let box = document.getElementById('box'), btn = document.querySelector('button'); btn.addEventListener('click', function () { box.classList.toggle('hidden'); }, false);9 dan let box = document.getElementById('box'), btn = document.querySelector('button'); btn.addEventListener('click', function () { box.classList.toggle('hidden'); }, false);1 ada di kotak saat dimulai. Ini demonya Lihat Pena Jika Anda tidak menyertakan kedua kelas tersebut, tampilan awal tidak akan dianimasikan Bagaimana Anda Akan Melakukannya?Seperti yang disebutkan, mungkin ada cara lain untuk melakukan ini, atau mungkin ada beberapa peningkatan yang dapat dilakukan pada kode saya Secara pribadi, saya merasa penggunaan .hidden { display: none; } .visuallyhidden { opacity: 0; }_5 agak timpang dan hacky. Tapi hei, itu berhasil, dan menurut saya itu tidak akan menyebabkan masalah apa pun kecuali Anda memiliki banyak animasi serupa di halaman. Tapi itu akan menjadi masalah lain sama sekali Ada beberapa kemungkinan solusi untuk ini di StackOverflow, tetapi saya menemukan sebagian besar, jika tidak semua, solusi yang diusulkan tidak benar-benar menyelesaikan masalah yang ada. Bagaimana Anda memindahkan elemen dari layar di CSS?Posisi absolut
. Oleh karena itu, elemen dengan posisi absolut dapat dipindahkan ke luar layar dengan kiri. -999px atau serupa. HTML.
Bisakah Anda menjeda animasi di CSS?Satu-satunya cara untuk benar-benar menjeda animasi di CSS adalah menggunakan properti animation-play-state dengan nilai yang dijeda . Dalam JavaScript, propertinya adalah "camelCased" sebagai animationPlayState dan diatur seperti ini. elemen. gaya.
Bagaimana cara memicu animasi pada scroll CSS?Memicu animasi CSS pada scroll adalah jenis animasi yang dipicu scroll. . Gunakan Intersection Observer API Ukur offset elemen saat pengguna menggulir Gunakan pustaka JavaScript pihak ketiga yang mengimplementasikan #1 atau #2 |