Saat ini , Twitter Bootstrap 3 memiliki breakpoint responsif berikut: 768px, 992px, dan 1200px, masing-masing mewakili perangkat kecil, sedang, dan besar.
Bagaimana saya bisa mendeteksi breakpoint ini menggunakan JavaScript?
Saya ingin mendengarkan JavaScript untuk semua acara terkait yang dipicu saat layar berubah. Dan untuk dapat mendeteksi apakah layar untuk perangkat kecil, menengah atau besar.
Apakah sudah ada yang dilakukan? Apa saran Anda?
javascript
twitter-bootstrap-3
dom-events
Rubens Mariuzzo
sumber
sumber
<div class="d-none d-?-block"></div>
visibilitas perubahan (masukkan breakpoint yang Anda inginkan). Kelas-kelas CSS itu untuk Bootstrap 4 ... gunakan apa pun yang berfungsi di Bootstrap 3. Jauh lebih hebat daripada mendengarkan acara pengubahan ukuran jendela.Jawaban:
Sunting: Perpustakaan ini sekarang tersedia melalui Bower dan NPM. Lihat github repo untuk detailnya.
JAWABAN TERBARU:
Penafian: Saya penulis.
Berikut adalah beberapa hal yang dapat Anda lakukan menggunakan versi terbaru (Responsive Bootstrap Toolkit 2.5.0):
Pada versi 2.3.0, Anda tidak memerlukan empat
<div>
elemen yang disebutkan di bawah ini.JAWABAN ASLI:
Saya tidak berpikir Anda memerlukan skrip atau perpustakaan besar untuk itu. Ini tugas yang cukup sederhana.
Masukkan elemen berikut sebelum
</body>
:Keempat div ini memungkinkan Anda memeriksa breakpoint yang sedang aktif. Untuk deteksi JS yang mudah, gunakan fungsi berikut:
Sekarang untuk melakukan tindakan tertentu hanya pada breakpoint terkecil yang dapat Anda gunakan:
Mendeteksi perubahan setelah DOM siap juga cukup sederhana. Yang Anda butuhkan hanyalah pendengar ukuran jendela yang ringan seperti ini:
Setelah dilengkapi, Anda dapat mulai mendengarkan perubahan dan menjalankan fungsi khusus breakpoint seperti:
sumber
Jika Anda tidak memiliki kebutuhan khusus, Anda bisa melakukan ini:
Sunting: Saya tidak melihat mengapa Anda harus menggunakan perpustakaan js lain ketika Anda bisa melakukan ini hanya dengan jQuery yang sudah termasuk dalam proyek Bootstrap Anda.
sumber
$(window).bind('resize')
... tetapi ada acara lain yang terkait dengan orientasi layar seluler yang memengaruhi dimensi layar..on('resize')
Sudahkah Anda melihat Response.js? Ini dirancang untuk hal semacam ini. Gabungkan Response.band dan Response.resize.
http://responsejs.com/
sumber
Anda bisa menggunakan ukuran jendela dan kode keras breakpoints. Menggunakan Angular:
sumber
Mendeteksi breakpoint responsif dari Twitter Bootstrap 4.1.x menggunakan JavaScript
The Bootstrap v.4.0.0 (dan versi terbaru Bootstrap 4.1.x ) memperkenalkan diperbarui pilihan jaringan , sehingga konsep lama deteksi mungkin tidak langsung diterapkan (lihat petunjuk migrasi ):
sm
tier kisi baru di bawah ini768px
untuk kontrol yang lebih terperinci. Kami sekarang memilikixs
,sm
,md
,lg
, danxl
;xs
kelas kisi telah dimodifikasi agar tidak memerlukan infiks.Saya menulis fungsi utilitas kecil yang menghormati nama kelas grid yang diperbarui dan tingkat grid baru:
Mendeteksi breakpoint responsif dari Bootstrap v4-beta menggunakan JavaScript
The Bootstrap v4-alpha dan Bootstrap v4-beta memiliki pendekatan yang berbeda pada breakpoints grid, jadi inilah cara warisan mencapai hal yang sama:
Saya pikir ini akan berguna, karena mudah diintegrasikan ke proyek apa pun. Ia menggunakan kelas tampilan asli responsif dari Bootstrap itu sendiri.
sumber
Di sini solusi sederhana saya sendiri:
jQuery:
VanillaJS:
sumber
Menggunakan pendekatan ini dengan Response.js lebih baik. Respons.resize pemicu pada setiap ukuran jendela di mana crossover hanya akan dipicu jika breakpoint diubah
sumber
Seharusnya tidak ada masalah dengan beberapa implementasi manual seperti yang disebutkan oleh @oozic.
Berikut adalah beberapa lib yang bisa Anda lihat:
Perhatikan bahwa lib ini dirancang untuk bekerja secara independen dari bootstrap, fondasi, dll. Anda dapat mengonfigurasi breakpoint Anda sendiri dan bersenang-senang.
sumber
Anda mungkin ingin menambahkan ini ke proyek bootstrap Anda untuk memeriksa breakpoint aktif secara visual
Inilah BOOTPLY
sumber
Membangun jawaban Maciej Gurban (yang fantastis ... jika Anda suka ini, silakan pilih suara jawabannya). Jika Anda membangun layanan untuk meminta Anda dapat mengembalikan layanan yang sedang aktif dengan pengaturan di bawah ini. Ini bisa menggantikan pustaka deteksi breakpoint lainnya sepenuhnya (seperti enquire.js jika Anda memasukkan beberapa peristiwa). Perhatikan bahwa saya telah menambahkan wadah dengan ID ke elemen DOM untuk mempercepat traversal DOM.
HTML
COFFEESCRIPT (AngularJS, tapi ini mudah dikonversi)
JAVASCRIPT (AngularJS)
sumber
Alih-alih menggunakan $ (dokumen) .width (), Anda harus menetapkan aturan CSS yang memberi Anda informasi ini.
Saya baru saja menulis artikel untuk mendapatkannya secara akurat. Lihat di sini: http://www.xurei-design.be/2013/10/how-to-accurately-detect-responsive-breakpoints/
sumber
Mengapa tidak menggunakan jQuery untuk mendeteksi lebar css saat ini dari kelas wadah bootstrap?
yaitu..
Anda juga dapat menggunakan $ (window) .resize () untuk mencegah tata letak Anda dari "mengotori tempat tidur" jika seseorang mengubah ukuran jendela browser.
sumber
Alih-alih memasukkan berkali-kali di bawah ini ke setiap halaman ...
Cukup gunakan JavaScript untuk memasukkannya secara dinamis ke setiap halaman (perhatikan bahwa saya telah memperbaruinya agar berfungsi dengan Bootstrap 3 dengan
.visible-*-block
:sumber
Saya tidak memiliki poin reputasi yang cukup untuk dikomentari tetapi bagi mereka yang memiliki masalah dengan "tidak dikenal" ketika mereka mencoba menggunakan ResponsiveToolKit Maciej Gurban, saya juga mendapatkan kesalahan itu sampai saya perhatikan bahwa Maciej benar-benar merujuk toolkit dari bawah. halaman di CodePen-nya
Saya mencoba melakukan itu dan tiba-tiba itu berhasil! Jadi, gunakan ResponsiveToolkit tetapi letakkan tautan Anda di bagian bawah halaman:
Saya tidak tahu mengapa itu membuat perbedaan tetapi itu terjadi.
sumber
Berikut adalah cara lain untuk mendeteksi viewport saat ini tanpa memasukkan nomor ukuran viewport di javascript Anda.
Lihat cuplikan css dan javascript di sini: https://gist.github.com/steveh80/288a9a8bd4c3de16d799
Setelah menambahkan cuplikan itu ke file css dan javascript Anda, Anda dapat mendeteksi viewport saat ini seperti ini:
Jika Anda ingin mendeteksi rentang viewport, gunakan seperti ini
sumber
CSS Bootstrap untuk
.container
kelas terlihat seperti itu:Jadi ini berarti kita dapat dengan aman mengandalkan
jQuery('.container').css('width')
untuk mendeteksi breakpoint tanpa kekurangan mengandalkannyajQuery(window).width()
.Kita dapat menulis fungsi seperti ini:
Dan kemudian mengujinya seperti
sumber
var cssWidth = parseInt( jQuery('.container').css('width') );
Kedua, gunakan rentangif ( cssWidth < 768) { return 'xs'; } else if (cssWidth >= 768 && cssWidth <= 992) { return 'sm'; } else if (cssWidth > 992 && cssWidth <= 1200) { return 'md'; } else { return 'lg'; }
Gunakan CSS
:before
dancontent
properti untuk mencetak keadaan breakpoint di<span id="breakpoint-js">
JavaScript sehingga hanya perlu membaca data ini untuk mengubahnya sebagai variabel untuk digunakan dalam fungsi Anda.(jalankan cuplikan untuk melihat contoh)
CATATAN: Saya menambahkan beberapa baris CSS untuk menggunakan
<span>
sebagai bendera merah di sudut atas browser saya. Pastikan untuk mengubahnya kembalidisplay:none;
sebelum mendorong barang Anda ke publik.sumber
Saya telah membuat metode jQuery asli untuk deteksi ukuran layar Bootstrap Twitter. Disini adalah:
JSFillde: https://jsfiddle.net/pstepniewski/7dz6ubus/
JSFillde sebagai contoh layar penuh: https://jsfiddle.net/pstepniewski/7dz6ubus/embedded/result/
sumber
Bagi siapa pun yang tertarik dengan ini, saya menulis deteksi breakpoint berdasarkan breakpoint CSS menggunakan TypeScript dan Observables. tidak terlalu sulit untuk membuat ES6 darinya, jika Anda menghapus tipenya. Dalam contoh saya saya menggunakan Sass, tetapi juga mudah untuk menghapus ini.
Ini JSFiddle saya: https://jsfiddle.net/StefanJelner/dorj184g/
HTML:
SCSS:
TypeScript:
Saya harap ini membantu seseorang.
sumber
Bootstrap4 dengan jQuery, solusi sederhana
sumber
Saya tidak benar-benar puas dengan jawaban yang diberikan, yang tampaknya terlalu rumit untuk digunakan kepada saya, jadi saya menulis solusi sendiri. Namun, untuk saat ini bergantung pada garis bawah / lodash untuk bekerja.
https://github.com/LeShrimp/GridSizeEvents
Anda bisa menggunakannya seperti ini:
Ini berfungsi di luar Kotak untuk Bootstrap 3, karena breakpoints dikodekan ke 768px, 992px dan 1200px. Untuk versi lain, Anda dapat dengan mudah mengadaptasi kode.
Secara internal ini menggunakan matchMedia () dan karenanya harus menjamin untuk menghasilkan hasil yang selaras dengan Bootstrap.
sumber
Mungkin itu akan membantu sebagian dari Anda, tetapi ada sebuah plugin yang membantu Anda untuk mendeteksi breakpoint Bootstrap v4 saat ini yang Anda lihat: https://www.npmjs.com/package/bs-breakpoints
Mudah digunakan (dapat digunakan dengan atau tanpa jQuery):
sumber
Inilah solusi saya (Bootstrap 4):
sumber
Bagi siapa pun yang menggunakan knockout.js , saya ingin beberapa properti yang bisa diamati knockout.js yang akan memberi tahu saya ketika breakpoints terkena. Saya memilih untuk menggunakan dukungan Modernizr untuk kueri media gaya css sehingga jumlahnya cocok dengan definisi bootstrap, dan untuk mendapatkan manfaat kompatibilitas modernizr. Model tampilan KO saya adalah sebagai berikut:
sumber
Berikut adalah cara yang baik untuk mendeteksinya (mungkin lucu, tetapi berfungsi) dan Anda dapat menggunakan elemen yang diperlukan sehingga kode menjadi jelas:
Contoh: css:
dan dalam dokumen oleh jQuery:
Tentu saja properti css ada.
sumber
Karena bootstrap 4 akan segera keluar saya pikir saya akan berbagi fungsi yang mendukungnya (xl sekarang menjadi hal) dan melakukan jQuery minimal untuk menyelesaikan pekerjaan.
sumber
Bootstrap 4
atau diperkecil
sumber
Jika Anda menggunakan Knockout , maka Anda dapat menggunakan pengikatan kustom berikut untuk mengikat breakpoint viewport saat ini (xs, sm, md atau lg) ke yang dapat diamati dalam model Anda. Yang mengikat ...
divs
denganvisible-??
kelas dalam div dengan iddetect-viewport
dan menambahkannya ke tubuh jika belum ada (sehingga Anda dapat menggunakan kembali ikatan ini tanpa menduplikasi div ini)sumber
Sudah lama sejak OP, tapi inilah solusi saya untuk ini menggunakan Bootstrap 3. Dalam kasus penggunaan saya, saya hanya menargetkan baris, tetapi hal yang sama dapat diterapkan pada wadah, dll.
Ubah saja. Pindahkan ke apa pun yang Anda inginkan.
sumber