Bro*_*die 10 javascript css jquery
我很好奇是否有一个事件监听器或者一种方法来构造一个在CSS发生变化时会触发的方法?
我的样式表使用媒体查询,我想知道是否有一种方法可以附加一个监听器,以查看这些媒体查询何时启动和退出.例如,我有一个媒体查询,隐藏某个屏幕宽度的按钮
@media screen and (max-width: 480px) {
#search-button {
display: none;
}
}
Run Code Online (Sandbox Code Playgroud)
我将使用什么事件监听器来检测该显示何时发生变化?我现在正在这样做:
$(window).resize(function() {
if($('#search-button').css("display") == "none") {
//do something
} else {
//do something else
}
});
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,但每次用户更改屏幕时都会调用监听器,而我只是在按钮的css发生变化时才激活它.我希望这是有道理的.
例如,这就是我想要的
$('#search-button').cssEventListenerOfSomeKind(function() {
alert('the display changed');
});
Run Code Online (Sandbox Code Playgroud)
绑定到window.resize是你最好的选择(我相信)。当您更改元素的 CSS 时,不会触发任何事件。但是,您可以通过缓存所使用的选择器来进行一些优化:
var $searcButton = $('#search-button');
$(window).resize(function() {
if($searcButton.css("display") == "none") {
//do something
} else {
//do something else
}
});
Run Code Online (Sandbox Code Playgroud)
或者您可以使用$(window).width()检查视口的宽度:
var $window = $(window);
$window.resize(function() {
if($window.width() <= 480) {
//do something
} else {
//do something else
}
});
Run Code Online (Sandbox Code Playgroud)
更新
您始终可以限制自己的事件处理程序:
var $window = $(window),
resize_ok = true,
timer;
timer = setInterval(function () {
resize_ok = true;
}, 250);
$window.resize(function() {
if (resize_ok === true) {
resize_ok = false;
if($window.width() <= 480) {
//do something
} else {
//do something else
}
}
});
Run Code Online (Sandbox Code Playgroud)
这将防止事件处理程序中的代码resize每四分之一秒运行一次以上。