Menggunakan jQuery, saya ingin menonaktifkan scrolling dari body:
Ide saya adalah:
- Set
body{ overflow: hidden;}
- Tangkap arus
scrollTop();/scrollLeft()
- Bind ke acara body scroll, atur scrollTop / scrollLeft ke nilai yang diambil.
Apakah ada cara yang lebih baik?
Memperbarui:
Silakan lihat contoh saya, dan alasannya, di http://jsbin.com/ikuma4/2/edit
Saya sadar seseorang akan berpikir "mengapa dia tidak hanya menggunakan position: fixed
panel?".
Tolong jangan menyarankan ini karena saya punya alasan lain.
Jawaban:
Satu-satunya cara yang saya temukan untuk melakukan ini mirip dengan apa yang Anda gambarkan:
Lalu ketika Anda siap untuk mengizinkan pengguliran lagi, batalkan semua itu.
Sunting: tidak ada alasan saya tidak bisa memberikan kode karena saya kesulitan untuk menggalinya ...
sumber
auto
, itu akan ditimpa. Saya perlu mempertahankan pengaturan yang ada, sehingga menambah beberapa overhead juga.html
danbody
denganoverflow: hidden
tidak cukup? Kami masih membutuhkan event handler.Ini sepenuhnya akan menonaktifkan pengguliran:
Untuk mengembalikan:
Mengujinya di Firefox dan Chrome.
sumber
height: 100%
secara efektif mengunci gulir pada posisi saat ini tanpa melompat - pada Chrome terbaru, setidaknya.coba ini
sumber
$('#element').off('scroll touchmove mousewheel');
body
gulir namun memungkinkan gulir dalam elemen anak lain yang dimilikioverflow: scroll
?Saya hanya menyediakan sedikit penyetelan untuk solusi dengan TFE . Secara khusus, saya menambahkan beberapa kontrol tambahan untuk memastikan bahwa tidak ada pergeseran konten halaman (alias pergeseran halaman ) ketika bilah gulir diatur ke
hidden
.Dua fungsi Javascript
lockScroll()
danunlockScroll()
dapat didefinisikan, masing-masing, untuk mengunci dan membuka kunci gulir halaman.di mana saya berasumsi bahwa
<body>
tidak memiliki margin awal.Perhatikan bahwa, sementara solusi di atas bekerja di sebagian besar kasus praktis, itu tidak definitif karena perlu beberapa penyesuaian lebih lanjut untuk halaman yang mencakup, misalnya, header dengan
position:fixed
. Mari kita masuk ke kasus khusus ini dengan sebuah contoh. Misalkan punyadengan
Kemudian, seseorang harus menambahkan fungsi berikut ini
lockScroll()
danunlockScroll()
:Akhirnya, berhati-hatilah dengan beberapa nilai awal yang mungkin untuk margin atau bantalan.
sumber
marginRight
danmarginLeft
:)Anda dapat menggunakan kode ini:
sumber
Untuk mematikan, gulir, cobalah ini:
untuk mengatur ulang:
sumber
Saya telah menulis plugin jQuery untuk menangani ini: $ .disablescroll .
Ini mencegah bergulir dari roda mouse, touchmove, dan acara menekan tombol, seperti Page Down.
Ada demo di sini .
Pemakaian:
sumber
Anda dapat melampirkan fungsi untuk menggulir acara dan mencegah perilaku defaultnya.
https://jsfiddle.net/22cLw9em/
sumber
Satu liner untuk menonaktifkan scroll termasuk tombol tengah mouse.
sunting : Tidak perlu untuk jQuery, di bawah sama seperti di atas di vanilla JS (itu berarti tidak ada kerangka kerja, hanya JavaScript):
this.documentElement.scrollTop - standar
this.body.scrollTop - kompatibilitas IE
sumber
$("body").css("overflow", "hidden");
$("body").css("overflow", "initial");
sumber
Tidak bisakah Anda mengatur tinggi badan menjadi 100% dan melimpah disembunyikan? Lihat http://jsbin.com/ikuma4/13/edit
sumber
Seseorang mem-posting kode ini, yang memiliki masalah tidak mempertahankan posisi gulir ketika dipulihkan. Alasannya adalah bahwa orang cenderung menerapkannya ke html dan tubuh atau hanya tubuh tetapi harus diterapkan ke html saja. Dengan cara ini ketika dikembalikan posisi gulir akan disimpan:
Untuk mengembalikan:
sumber
'overflow': 'auto',
digunakan'overflow': 'initial',
Ini mungkin atau mungkin tidak berfungsi untuk tujuan Anda, tetapi Anda dapat memperluas jScrollPane untuk mem - flash fungsionalitas lain sebelum melakukan gulir. Saya baru saja menguji ini sedikit, tetapi saya dapat mengonfirmasi bahwa Anda dapat melompat masuk dan mencegah pengguliran sepenuhnya. Yang saya lakukan adalah:
<script type="text/javascript" src="script/jquery.jscrollpane.js"></script>
positionDragY(destY, animate)
fungsiJalankan events.html, dan Anda akan melihat kotak yang biasanya bergulir karena intervensi pengkodean Anda tidak akan bergulir.
Anda dapat mengontrol seluruh scrollbar browser dengan cara ini (lihat fullpage_scroll.html).
Jadi, mungkin langkah selanjutnya adalah menambahkan panggilan ke beberapa fungsi lain yang padam dan melakukan sihir penahan Anda, kemudian memutuskan apakah akan melanjutkan dengan gulir atau tidak. Anda juga mendapat panggilan API untuk mengatur scrollTop dan scrollLeft.
Jika Anda ingin bantuan lebih lanjut, poskan di tempat Anda bangun!
Semoga ini bisa membantu.
sumber
Saya memberikan jawaban yang mungkin membantu di sini: jQuery simplemodal disable scrolling
Ini menunjukkan cara mematikan bilah gulir tanpa menggeser teks di sekitar. Anda dapat mengabaikan bagian tentang simplemodal.
sumber
Jika Anda hanya ingin menonaktifkan gulir dengan navigasi papan ketik, Anda dapat mengesampingkan acara keydown.
sumber
Coba kode ini:
sumber
Anda dapat menutupi jendela dengan div yang dapat digulir untuk mencegah pengguliran konten pada halaman. Dan, dengan menyembunyikan dan menunjukkan, Anda dapat mengunci / membuka kunci gulir Anda.
Lakukan sesuatu seperti ini:
sumber
Untuk orang-orang yang memiliki tata letak terpusat (via
margin:0 auto;
), berikut ini adalah gabungan dariposition:fixed
solusi bersama dengan solusi yang diajukan oleh @tfe .Gunakan solusi ini jika Anda mengalami gertakan halaman (karena bilah gulir menampilkan / menyembunyikan).
... dikombinasikan dengan ...
... dan akhirnya, CSS untuk
.modal-noscroll
...Saya berani mengatakan ini adalah lebih dari memperbaiki yang tepat daripada solusi lain di luar sana, tapi saya belum diuji yang menyeluruh belum ...: P
Sunting: harap dicatat bahwa saya tidak tahu seberapa buruk hal ini (baca: meledakkan) pada perangkat sentuh.
sumber
Anda juga dapat menggunakan DOM untuk melakukannya. Katakanlah Anda memiliki fungsi yang Anda panggil seperti ini:
Dan hanya itu yang ada untuk itu! Semoga ini bisa membantu selain semua jawaban lain!
sumber
Inilah yang akhirnya saya lakukan:
CoffeeScript:
Javascript:
sumber
Tidak yakin apakah ada yang mencoba solusi saya. Yang ini berfungsi pada seluruh tubuh / html tetapi tidak diragukan lagi itu dapat diterapkan ke elemen apa pun yang mengaktifkan acara gulir.
Cukup setel dan hapus set scrollLock sesuai kebutuhan.
Inilah contoh JSFiddle
Semoga yang ini membantu seseorang.
sumber
Saya pikir solusi terbaik dan bersih adalah:
Dan dengan jQuery:
Pendengar acara tersebut harus memblokir gulir. Hapus saja untuk mengaktifkan kembali gulir
sumber