Saya ingin membuat div, yang terletak di bawah blok konten tetapi setelah halaman telah cukup digulir untuk menghubungi batas atasnya, menjadi tetap di tempatnya dan menggulir dengan halaman.
javascript
jquery
css
scroll
positioning
Evanr
sumber
sumber
position: sticky; top:0;
berfungsi di sebagian besar browser pada Januari 2017.position: sticky;
benda itu ajaib.Jawaban:
Anda bisa menggunakan cukup css, memposisikan elemen Anda sebagai tetap :
Sunting: Anda harus memiliki elemen dengan posisi absolut, setelah offset gulir telah mencapai elemen, itu harus diubah menjadi tetap, dan posisi teratas harus ditetapkan ke nol.
Anda dapat mendeteksi offset gulir atas dokumen dengan fungsi scrollTop :
Ketika offset gulir mencapai 200, elemen akan menempel di bagian atas jendela browser, karena ditempatkan sebagai tetap.
sumber
if ($(this).scrollTop() < 200 && $el.css('position') == 'fixed') { $('.fixedElement').css({'position': 'static', 'top': '0px'}); }
new example
link yang Anda berikan begitu banyak bersih dan jelas bahwa saya bahkan tidak bisa melihatnya! -_-Anda telah melihat contoh ini di halaman masalah Google Code dan (hanya baru-baru ini) di halaman edit Stack Overflow.
Jawaban CMS tidak mengembalikan posisi ketika Anda menggulir mundur. Inilah kode yang dicuri tanpa malu-malu dari Stack Overflow:
Dan demo langsung yang sederhana .
Alternatif baru yang bebas skrip adalah
position: sticky
yang didukung di Chrome, Firefox, dan Safari. Lihat artikel tentang HTML5Rocks dan demo , dan dokumen Mozilla .sumber
offset
pasti berhenti menerima objek sebagai input api.jquery.com/offset . @ Eddie Modifikasi Anda harus aman dengan jQuery saat ini.var d = $("#scroller-anchor").offset().top;
denganvar d = $("#sidebar").offset().top;
dan membuang div scroller-anchor kosong bersama-sama? Ini garpu saya untuk menunjukkan apa yang saya bicarakan.Pada Januari 2017 dan rilis Chrome 56, sebagian besar browser yang umum digunakan mendukung
position: sticky
properti di CSS.melakukan trik untuk saya di Firefox dan Chrome.
Di Safari Anda masih perlu menggunakan
position: -webkit-sticky
.Polyfill tersedia untuk Internet Explorer dan Edge; https://github.com/wilddeer/stickyfill tampaknya bagus.
sumber
Saya memiliki masalah yang sama dengan Anda dan akhirnya membuat plugin jQuery untuk mengatasinya. Ini benar-benar memecahkan semua masalah yang orang-orang sebutkan di sini, plus itu menambahkan beberapa fitur opsional juga.
Pilihan
https://github.com/donnyv/sticky-panel
demo: http://htmlpreview.github.io/?https://github.com/donnyv/sticky-panel/blob/master/jquery.stickyPanel/Main.htm
sumber
code
// lepaskan panel node.css ({"margin": 0, "left": nodeLeft, "top": newNodeTop, "position": "fixed", "width": node.width ()});code
Dan inilah caranya tanpa jquery (PEMBARUAN: lihat jawaban lain di mana Anda sekarang dapat melakukan ini hanya dengan CSS)
sumber
Ini adalah bagaimana saya melakukannya dengan jquery. Ini semua dirakit dari berbagai jawaban pada stack overflow. Solusi ini cache penyeleksi untuk kinerja yang lebih cepat dan juga memecahkan masalah "melompat" ketika sticky div menjadi lengket.
Lihat di jsfiddle: http://jsfiddle.net/HQS8s/
CSS:
JS:
sumber
Berikut ini pilihan lain:
JAVASCRIPT
Anda
#myElementToStick
harus mulai denganposition:absolute
properti CSS.sumber
Seperti yang dikatakan Josh Lee dan Colin 't Hart , Anda dapat menggunakan saja
position: sticky; top: 0;
melamar ke div yang Anda inginkan ...Plus, satu-satunya hal yang harus Anda lakukan adalah menyalin ini ke bagian atas halaman Anda atau memformatnya agar sesuai dengan lembar CSS eksternal:
Ganti saja
#sticky_div's_name_here
dengan nama div Anda, yaitu jika div<div id="example">
Anda yang akan Anda masukkan#example { position: sticky; top: 0; }
.sumber
Solusi saya sedikit bertele-tele, tetapi menangani penentuan posisi variabel dari tepi kiri untuk tata letak terpusat.
sumber
Berikut ini satu versi lagi untuk dicoba bagi yang memiliki masalah dengan yang lain. Ini menggabungkan teknik yang dibahas dalam pertanyaan duplikat ini , dan menghasilkan DIV pembantu yang diperlukan secara dinamis sehingga tidak diperlukan HTML tambahan.
CSS:
JQuery:
Untuk membuat elemen lengket, lakukan:
Ketika elemen menjadi lengket, kode mengelola posisi konten yang tersisa agar tidak melompat ke celah yang ditinggalkan oleh elemen lengket. Ini juga mengembalikan elemen lengket ke posisi non-lengket aslinya ketika menggulir kembali di atasnya.
sumber
Ini adalah versi yang diperluas untuk jawaban Josh Lee. Jika Anda ingin div berada di bilah sisi ke kanan, dan mengapung dalam kisaran (yaitu, Anda perlu menentukan posisi jangkar atas dan bawah). Ini juga memperbaiki bug ketika Anda melihatnya di perangkat seluler (Anda perlu memeriksa posisi gulir kiri jika div tidak akan pindah layar).
sumber
Saya menemukan ini ketika mencari hal yang sama. Saya tahu ini pertanyaan lama tapi saya pikir saya akan menawarkan jawaban yang lebih baru.
Scrollorama memiliki fitur 'pin it' yang memang saya cari.
http://johnpolacek.github.io/scrollorama/
sumber
Info yang diberikan untuk menjawab pertanyaan lain ini mungkin dapat membantu Anda, Evan:
Periksa apakah elemen terlihat setelah bergulir
Anda pada dasarnya ingin memodifikasi gaya elemen untuk mengaturnya agar tetap hanya setelah memverifikasi bahwa nilai document.body.scrollTop sama dengan atau lebih besar dari bagian atas elemen Anda.
sumber
Jawaban yang diterima berfungsi tetapi tidak kembali ke posisi sebelumnya jika Anda menggulir di atasnya. Itu selalu menempel di atas setelah ditempatkan di sana.
Tanggapan jleedev akan berhasil, tetapi saya tidak dapat membuatnya bekerja. Halaman contohnya juga tidak berfungsi (untuk saya).
sumber
Anda dapat menambahkan 3 baris tambahan sehingga ketika pengguna menggulir kembali ke atas, div akan menempel di tempatnya yang lama:
Ini kodenya:
sumber
Saya memiliki pengaturan tautan dalam div sehingga ini adalah daftar vertikal tautan surat dan angka.
Saya kemudian mengatur fungsi jQuery yang berguna ini untuk menyimpan posisi yang dimuat dan kemudian mengubah posisi untuk diperbaiki ketika menggulir di luar posisi itu.
CATATAN: ini hanya berfungsi jika tautannya terlihat pada pemuatan halaman !!
sumber
Saya menggunakan beberapa pekerjaan di atas untuk membuat teknologi ini. Saya memperbaikinya sedikit dan berpikir saya akan membagikan pekerjaan saya. Semoga ini membantu.
Kode jsfuddle
Ini sedikit lebih dinamis dari cara melakukan scroll. Memang perlu beberapa pekerjaan dan saya pada suatu titik akan mengubahnya menjadi pluging tapi tapi ini adalah apa yang saya dapatkan setelah jam kerja.
sumber
Dalam javascript Anda dapat melakukan:
sumber
Bukan solusi tepat tetapi alternatif yang bagus untuk dipertimbangkan
CSS ini HANYA Bagian atas bilah gulir layar . Memecahkan semua masalah dengan HANYA CSS , TANPA JavaScript, TANPA JQuery, Tanpa Otak bekerja ( lol ).
Selamat menikmati biola saya : D semua kode sudah termasuk di sana :)
CSS
Letakkan konten cukup lama sehingga Anda dapat melihat efeknya di sini :) Oh, dan referensi ada di sana juga, untuk kenyataan ia layak mendapatkan kreditnya
CSS ONLY Bagian atas bilah gulir layar
sumber
Berikut ini contoh yang menggunakan plugin jquery-visible: http://jsfiddle.net/711p4em4/ .
HTML:
CSS:
JS (termasuk plugin jquery-visible):
sumber
sticky hingga footer mengenai div:
sumber