cari
Rumahhujung hadapan webtutorial cssMengelakkan menatal halaman apabila modal dibuka

Mengelakkan menatal halaman apabila kotak modal dibuka

Pernahkah anda menemui keadaan ini: Buka kotak modal, tatal di dalamnya, tutupnya, dan halaman melompat ke lokasi lain?

Ini kerana kotak modal hanyalah elemen pada halaman, ia mungkin kekal di tempat, tetapi seluruh halaman masih berfungsi dengan baik.

Kadang -kadang ini tidak penting, seperti ketika ketinggian skrin sama persis dengan ketinggian viewport. Tetapi dalam kes lain, masalah menatal berlaku. Berita baiknya ialah kita dapat menghalangnya dengan beberapa helah CSS (dan JavaScript).

Mulakan dengan penyelesaian yang mudah

Kami dapat mengurangkan masalah menatal halaman apabila kotak modal dibuka dengan menetapkan ketinggian seluruh badan ke ketinggian pandangan penuh dan menyembunyikan limpahan menegak apabila kotak modal dibuka:

 <code>body.modal-open { height: 100vh; overflow-y: hidden; }</code>

Ini bagus, tetapi jika kita telah menatal melalui elemen halaman sebelum membuka kotak modal, akan ada penyusunan semula mendatar sedikit. Lebar viewport meningkat sebanyak kira -kira 15 piksel, yang betul -betul lebar bar skrol. Mari kita menyesuaikan badan yang betul sedikit untuk mengelakkan ini.

 <code>body { height: 100vh; overflow-y: hidden; padding-right: 15px; /* 避免宽度重排*/ }</code>

Perhatikan bahawa ketinggian kotak modal mestilah kurang daripada ketinggian viewport untuk kaedah ini berfungsi. Jika tidak, bar skrol pada badan akan diperlukan.

Apa yang perlu dilakukan di telefon bimbit?

Penyelesaian ini berfungsi dengan baik di kedua -dua desktop dan Android Mobile. Walau bagaimanapun, iOS safari memerlukan lebih banyak pemprosesan kerana badan masih menatal apabila kotak modal dibuka apabila mengklik dan bergerak pada skrin sentuh.

Kita boleh menetapkan badan ke kedudukan tetap sebagai penyelesaian:

 <code>body { position: fixed; }</code>

Tidak mengapa sekarang! Apabila menyentuh skrin, badan tidak akan bertindak balas. Walau bagaimanapun, masih terdapat masalah "kecil" di sini. Dengan mengandaikan pencetus kotak modal berada di bahagian bawah halaman, kami klik untuk membukanya. sangat bagus! Tetapi sekarang kita secara automatik menatal ke bahagian atas skrin, yang mengelirukan seperti tingkah laku menatal yang kita cuba selesaikan.

Alamak!

Oleh itu, kita perlu menggunakan JavaScript

Kita boleh menggunakan JavaScript untuk mengelakkan gelembung peristiwa sentuhan. Kita semua tahu bahawa perlu ada lapisan latar belakang apabila kotak modal dibuka. Malangnya, dalam iOS, stoppropagation agak janggal untuk bekerja dengan acara sentuhan. Tetapi pencegahanDefault berfungsi dengan baik. Ini bermakna kita perlu menambah pendengar acara kepada setiap nod DOM yang termasuk dalam kotak modal -bukan hanya pada latar belakang atau lapisan kotak modal. Berita baiknya ialah banyak perpustakaan JavaScript boleh melakukan ini, termasuk jQuery yang terbukti.

Satu lagi perkara: Bagaimana jika kita perlu menatal ke dalam kotak modal? Kami masih perlu mencetuskan tindak balas kepada acara sentuhan, tetapi kami masih perlu menghentikan menggelegak apabila ia mencapai bahagian atas atau bawah kotak modal. Ini kelihatan sangat rumit, jadi kami tidak menyelesaikan masalah sepenuhnya.

Kaedah badan tetap dipertingkatkan

Apa yang kita gunakan ialah:

 <code>body { position: fixed; }</code>

Jika kita tahu kedudukan atas menatal dan menambahkannya ke CSS kita, badan tidak menatal ke bahagian atas skrin, jadi masalahnya diselesaikan. Kita boleh menggunakan JavaScript untuk mengira bahagian atas tatal dan menambah nilai itu kepada gaya badan:

 // Apabila kotak modal dipaparkan, kita memerlukan badan tetap
document.body.style.position = 'tetap';
document.body.style.top = `-$ {window.scrolly} px`;

// Apabila kotak modal tersembunyi, kita perlu menyimpannya di bahagian atas dokumen kedudukan tatal.body.style.position = '';
document.body.style.top = '';

Ini berfungsi, tetapi masih terdapat sedikit kebocoran selepas kotak modal ditutup. Khususnya, apabila kotak modal dibuka dan badan ditetapkan untuk ditetapkan, halaman nampaknya telah kehilangan kedudukan menatalnya. Jadi kita perlu mengambil lokasi. Mari kita ubah JavaScript kami untuk menyelesaikan masalah ini.

 // Apabila kotak modal tersembunyi ...
const scrolly = document.body.style.top;
document.body.style.position = '';
document.body.style.top = '';
window.scrollTo (0, parseInt (scrolly || '0') * -1);

dipaku! Badan tidak lagi menatal apabila kotak modal dibuka dan kekal dalam kedudukan tatal apabila kotak modal dibuka dan ditutup. Long Live!

Mengelakkan menatal halaman apabila modal dibuka

Atas ialah kandungan terperinci Mengelakkan menatal halaman apabila modal dibuka. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
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
Simulasi pergerakan tetikusSimulasi pergerakan tetikusApr 22, 2025 am 11:45 AM

Sekiranya anda pernah memaparkan animasi interaktif semasa ceramah langsung atau kelas, maka anda mungkin tahu bahawa ia tidak selalu mudah untuk berinteraksi dengan slaid anda

Powering Carian dengan Tindakan Astro dan Fuse.jsPowering Carian dengan Tindakan Astro dan Fuse.jsApr 22, 2025 am 11:41 AM

Dengan Astro, kami dapat menjana sebahagian besar laman web kami semasa membina kami, tetapi mempunyai sedikit kod pelayan yang dapat mengendalikan fungsi carian menggunakan sesuatu seperti fuse.js. Dalam demo ini, kami akan menggunakan fius untuk mencari melalui satu set "penanda buku" peribadi

Undefined: Nilai Boolean KetigaUndefined: Nilai Boolean KetigaApr 22, 2025 am 11:38 AM

Saya ingin melaksanakan mesej pemberitahuan dalam salah satu projek saya, sama seperti apa yang anda lihat dalam Dokumen Google semasa dokumen menyimpan. Dengan kata lain, a

Dalam mempertahankan pernyataan ternaryDalam mempertahankan pernyataan ternaryApr 22, 2025 am 11:25 AM

Beberapa bulan yang lalu, saya berada di berita penggodam (seperti yang dilakukan) dan saya berlari melintasi artikel (kini dipadam) tentang tidak menggunakan jika kenyataan. Sekiranya anda baru dengan idea ini (seperti saya

Menggunakan API Ucapan Web untuk terjemahan berbilang bahasaMenggunakan API Ucapan Web untuk terjemahan berbilang bahasaApr 22, 2025 am 11:23 AM

Sejak awal fiksyen sains, kami telah fantasized tentang mesin yang bercakap dengan kami. Hari ini adalah perkara biasa. Walaupun begitu, teknologi untuk membuat

Blok Jetpack GutenbergBlok Jetpack GutenbergApr 22, 2025 am 11:20 AM

Saya masih ingat ketika Gutenberg dibebaskan ke teras, kerana saya berada di Wordcamp kami pada hari itu. Beberapa bulan telah berlalu sekarang, jadi saya bayangkan semakin banyak kita

Membuat komponen penomboran yang boleh diguna semula di VueMembuat komponen penomboran yang boleh diguna semula di VueApr 22, 2025 am 11:17 AM

Idea di sebalik kebanyakan aplikasi web adalah untuk mengambil data dari pangkalan data dan membentangkannya kepada pengguna dengan cara yang terbaik. Apabila kita berurusan dengan data di sana

Menggunakan 'bayang-bayang kotak' dan laluan klip bersamaMenggunakan 'bayang-bayang kotak' dan laluan klip bersamaApr 22, 2025 am 11:13 AM

Let ' s melakukan sedikit langkah demi langkah keadaan di mana anda tidak boleh melakukan apa yang kelihatannya masuk akal, tetapi anda masih boleh melakukannya dengan penipuan CSS. Dalam ini

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini