MQBE
Media Query Breakpoint Events on JQuery
Install / Use
/learn @carloscabo/MQBEREADME
MQBE. Media Query Breakpoint Events
This small function creates JQuery events that are fired when you enter or leave a CSS media query state, for instance from desktop to tablet... etc. It's useful when you need to start or stop some JS functionallity depending on MediaQuery changes / states.
Installation
1a. Use as Rails gem
Simply include in your gemfile:
gem 'mqbe'
and run bundle install
Then add in your application.js (its recommend to be included just after JQuery)
//= require mqbe
1b. Use standalone
If you want to add it to your project by hand, copy dist/mqbe.js or dist/mqbe.min.js (minified) in your project and be sure that its included in the pages after JQuery.
2. Include CSS
The functionallity of MQBE depends on a little piece of CSS, where you can define your media query breakpoints. You must add an string to identify that state from the JS. It's easier that it sounds. Take a look to the code below.
Use only [a-zA-Z_] chars to define the string, and don't use hyphens -
/* DESKTOP */
body:after {
content: 'desktop'; /* <- string that defines this state */
display: none;
}
/* SMALL DESKTOP */
@media only screen and (max-width: 1200px) {
body:after {
content: 'small_desktop'; /* <- string that defines this state */
}
}
/* TABLET */
@media only screen and (max-width: 1024px) {
body:after {
content: 'tablet'; /* <- string that defines this state */
}
}
@media only screen and (max-width: 767px) {
body:after {
content: 'mobile'; /* <- string that defines this state */
}
}
For the lazy ones, you can just include dist/mqbe.min.css which defines this 4 media queries and customize the breakpoints values to your project's needs.
3. Usage: Add events
Define you events related to your CSS breakpoint names on domready.
You have two events available for each Media Query state: enter, and leave.
enter its also fired when the page loads the first time.
Below you have an example.
$(document)
.on('enter.mobile.mqbe', function() {
// Especial flexsliders
$('.flexslider-mobile-only').flexslider({
animation: "slide",
controlNav: false
});
// Filter groups
$('.list-filters > .title').on('click', function() {
$(this).parent().toggleClass('expanded');
});
})
.on('leave.mobile.mqbe', function() {
flexdestroy('.flexslider-mobile-only');
});
All events are in the namespace mqbe so you can add a generic listener than will be triggered on every breakpoint.
$(document).on('mqbe', function() {
// Do whatever you need on every defined breakpoints
});
You can clean the events from any state using the jquery off method.
$(document).off('enter.desktop.mqbe');
Also you can disable all mqbe events
$(document).off('mqbe');
Take a look to the example
You have an example in the demo directory, I recommend you to take a look to it to fully understand the idea.
Demo / Dist
MQBE uses gulp to serve a demo/test server and build dist versions.
Prerequisites
First you need to have node and gulp-cli installed on your environment.
Then install all dependencies, in repo's root:
$ npm install
Demo
To test and develop you can start a connect server watching src/*.js and src/*.scss at http://localhost:3000/.
$ gulp server
## or just
$ gulp
To build minified versions of MQBE in dist/ you must run.
$ gulp dist
Fixes / Changelog
-
V.2.0.3 First Rails Gem release.
-
V.2.0.2 Changing ot max-width and breakpoints in px.
-
V.2.0.1 Changing max-width to max-device-width in mediaqueries due to browser zoom issues.
-
V.2.0.0 Delegate events on jquery instead custom queues. Namespace
.mqbe. Add generic event.mqbeon every breakpoint. -
V.1.0.5 Added gulp to generate minified and demo files.
-
V.1.04 Renamed to MQBE.v.js. Added debounced resize. Now library initializes itself.
-
V.1.03 Added event queue, and nex syntax. Added off method, and method chainning.
-
V.1.01 Chrome 43 returns state with single quotes "'desktop'", added regex to clean that extra quotes
Related Skills
node-connect
351.8kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
110.9kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
351.8kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
351.8kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
