Saya mencoba menonaktifkan html / body scrollbar dari orang tua ketika saya menggunakan lightbox. Kata utama di sini adalah disable . Saya tidak ingin menyembunyikannya overflow: hidden;
.
Alasan untuk ini adalah yang overflow: hidden
membuat situs melompat dan mengambil area tempat gulungan itu.
Saya ingin tahu apakah mungkin untuk menonaktifkan scrollbar sementara masih menunjukkannya.
javascript
jquery
html
css
Dejan.S
sumber
sumber
Jawaban:
Jika halaman di bawah overlayer dapat "diperbaiki" di bagian atas, saat Anda membuka overlay yang dapat Anda atur
Anda masih harus melihat scrollbar kanan tetapi kontennya tidak dapat digulir. Saat Anda menutup overlay, kembalikan properti ini dengan
Saya hanya mengusulkan cara ini hanya karena Anda tidak perlu mengubah acara gulir
Memperbarui
Anda juga bisa melakukan sedikit perbaikan: jika Anda mendapatkan
document.documentElement.scrollTop
properti melalui javascript tepat sebelum pembukaan lapisan, Anda bisa secara dinamis menetapkan nilai itu sebagaitop
properti elemen tubuh: dengan pendekatan ini halaman akan berdiri di tempatnya, tidak masalah jika Anda ' kembali di atas atau jika Anda sudah menggulir.Css
JS
sumber
$('body').css('top', -($('body').scrollTop()) + 'px').addClass('noscroll');
Empat tambahan kecil untuk solusi yang dipilih:
Solusi lengkap yang tampaknya berfungsi untuk sebagian besar browser:
CSS
Nonaktifkan gulir
Aktifkan gulir
Terima kasih kepada Fabrizio dan Dejan karena menempatkan saya di jalur yang benar dan ke Brodingo untuk solusi bilah gulir ganda
sumber
afterLoad()
danafterClose
panggilan balik. Dapat bermanfaat bagi orang lain yang mencari pertanyaan ini.scrollTop
sehingga baris 2 dari kode 'Nonaktifkan gulir' dapat dinyatakan sebagai$( window ).scrollTop()
.if (scrollTop < 0) { scrollTop = 0; }
. Berikut adalah kode lengkap untuk menonaktifkan gist.github.com/jayd3e/2eefbbc571cd1668544b .Dengan jQuery yang disertakan:
nonaktifkan
memungkinkan
pemakaian
sumber
Saya OP
Dengan bantuan jawaban dari fcalderan saya dapat membentuk solusi. Saya meninggalkan solusi saya di sini karena membawa kejelasan tentang cara menggunakannya, dan menambahkan detail yang sangat penting,
width: 100%;
Saya menambahkan kelas ini
ini bekerja untuk saya dan saya menggunakan Fancyapp.
sumber
Ini bekerja sangat baik untuk saya ....
bungkus saja dua baris kode dengan apa pun yang memutuskan kapan Anda akan mengunci pengguliran.
misalnya
sumber
Anda tidak dapat menonaktifkan acara gulir, tetapi Anda dapat menonaktifkan tindakan terkait yang mengarah ke gulir, seperti roda mouse dan roda sentuh:
sumber
Anda dapat menyembunyikan bilah gulir badan dengan
overflow: hidden
dan mengatur margin pada saat yang sama sehingga konten tidak melompat:Dan kemudian Anda dapat menambahkan scrollbar yang dinonaktifkan ke halaman untuk mengisi celah:
Saya melakukan ini untuk implementasi lightbox saya sendiri. Tampaknya bekerja dengan baik sejauh ini.
sumber
Ini adalah solusi yang kami gunakan. Cukup simpan posisi gulir saat hamparan dibuka, gulir kembali ke posisi simpanan setiap kali pengguna mencoba menggulir halaman, dan matikan pendengar saat hamparan ditutup.
Ini agak gelisah di IE, tetapi bekerja seperti pesona di Firefox / Chrome.
sumber
z-index
dari.overlay-shown
lebih besar dari header tetap. (Saya memiliki kode ini berjalan dalam produksi di situs dengan tajuk yang tetap dan berfungsi dengan baik.)body
tag. Saya bereksperimen dengan kode Anda kemarin dan saya memiliki tajuk yang tetap di bagian atas halaman saya. Jika saya menangani pengguliran melaluibody
tag, scrollbar akan berada di bawah header tetap.$("body")
, kami menggunakan$(window)
. Dan alih-alihz-index: -1
pada hamparan untuk menyembunyikannya, Anda dapat menggunakanvisibility: hidden
atau serupa. Lihat jsfiddle.net/8p2gfeha untuk tes cepat untuk melihat apakah itu berhasil. Header tetap tidak lagi muncul di atas scrollbar. Saya akhirnya akan mencoba memasukkan perubahan ini ke dalam jawabannya.Saya memiliki masalah yang sama: menu sebelah kiri yang, ketika muncul, mencegah bergulir. Begitu ketinggian diatur ke 100vh, bilah gulir menghilang dan konten tersentak ke kanan.
Jadi, jika Anda tidak keberatan mengaktifkan bilah gulir (tetapi mengatur jendela ke ketinggian penuh sehingga tidak akan benar-benar menggulir ke mana pun) maka kemungkinan lain adalah mengatur margin bawah yang kecil, yang akan membuat bilah gulir ditampilkan:
sumber
overflow:hidden
mencegah margin dari pengaruhnya?Anda dapat terus meluap: disembunyikan tetapi mengelola posisi gulir secara manual:
sebelum menampilkan jejak gulir posisi aktual:
itu harus bekerja
sumber
Cara kasar tetapi berfungsi adalah memaksa gulungan kembali ke atas, sehingga secara efektif menonaktifkan pengguliran:
Saat Anda membuka lightbox, angkat bendera dan saat menutupnya, turunkan bendera.
Kasing uji langsung .
sumber
Saya suka tetap menggunakan metode "overflow: hidden" dan hanya menambahkan padding-right yang sama dengan lebar scrollbar.
Dapatkan fungsi lebar scrollbar, dengan sumber hilang .
Saat menampilkan overlay, tambahkan kelas "noscroll" ke html dan tambahkan padding-right ke body:
Saat bersembunyi, lepaskan kelas dan padding:
Gaya noscroll hanya ini:
Perhatikan bahwa jika Anda memiliki elemen dengan posisi: diperbaiki, Anda perlu menambahkan padding ke elemen-elemen itu juga.
sumber
<div id="lightbox">
ada di dalam<body>
elemen, jadi ketika Anda menggulir lightbox Anda juga menggulir tubuh. Solusinya adalah untuk tidak memperpanjang<body>
elemen lebih dari 100%, untuk menempatkan konten lama di dalamdiv
elemen lain dan menambahkan scrollbar jika diperlukan dengandiv
elemen inioverflow: auto
.Sekarang, menggulir kotak cahaya (dan
body
juga) tidak memiliki efek, karena bodi tidak lebih dari 100% dari tinggi layar.sumber
Semua sistem berbasis modal / lightbox javascript menggunakan overflow saat menampilkan modal / lightbox, pada tag html atau tag tubuh.
Saat lightbox ditampilkan, js mendorong limpahan yang disembunyikan pada html atau tag tubuh. Ketika lightbox disembunyikan, beberapa menghapus yang tersembunyi lainnya mendorong auto overflow pada html atau tag tubuh.
Pengembang yang bekerja di Mac, tidak melihat masalah scrollbar.
Ganti saja yang disembunyikan dengan yang tidak disetel untuk tidak melihat konten yang tergelincir di bawah modal penghapusan scrollbar.
Lightbox terbuka / tampilkan:
Tutup / sembunyikan Lightbox:
sumber
Jika halaman di bawah overlayer dapat "diperbaiki" di bagian atas, saat Anda membuka overlay yang dapat Anda atur
berikan kelas ini ke badan yang dapat digulir, Anda masih harus melihat bilah gulir kanan tetapi kontennya tidak dapat digulir.
Untuk mempertahankan posisi halaman lakukan ini dalam jquery
Saat Anda menutup overlay, kembalikan properti ini dengan
Saya hanya mengusulkan cara ini hanya karena Anda tidak perlu mengubah acara gulir
sumber
CSS
JS
Sekarang yang perlu Anda lakukan adalah memanggil fungsi
sumber
Anda dapat melakukannya dengan Javascript:
Dan kemudian nonaktifkan ketika lightbox Anda ditutup.
Tetapi jika lightbox Anda berisi bilah gulir, Anda tidak akan dapat menggulir saat itu terbuka. Ini karena
window
mengandung keduanyabody
dan#lightbox
. Jadi, Anda harus menggunakan arsitektur seperti yang berikut:Dan kemudian terapkan
onscroll
acara hanya pada#global
.sumber