I’m curious is there an event listener or perhaps a way to construct a method that will trigger when a CSS change happens?
My stylesheet uses media queries and I want to know if there’s a way to attach a listener to see when those media queries kick in and out. For example I have a media query that hides a button at certain screen widths
@media screen and (max-width: 480px) {
#search-button {
display: none;
}
}
What event listener would I use to detect when that display changes? I’m currently doing this:
$(window).resize(function() {
if($('#search-button').css("display") == "none") {
//do something
} else {
//do something else
}
});
Which works fine, but it calls the listener every time the user changes the screen and I’d rather just have it fire only when the css of the button changes. I hope that makes sense.
for example this is what I’d like
$('#search-button').cssEventListenerOfSomeKind(function() {
alert('the display changed');
});
Binding to the
window.resizeis your best option (I believe). There isn’t any event fired when you change an element’s CSS. You can however optimize a bit by caching the selector used:Or you can use
$(window).width()to check the width of the viewport:UPDATE
You can always throttle your own event handler:
This will prevent the code in your
resizeevent handler from running more than once every quarter second.