我弄乱了一些库和东西,最终使用了这种响应式侦听器。它使用 CSS 媒体查询作为断点,使用 UnderscoreJS 作为节流器。我看到的优点是断点都是在 CSS 中定义的,而不是分散在各种脚本周围。
在 上使用的示例 CSS@media
断点::after
body
body:after {
content: 'widescreen';
display: none;
}
@media screen and (max-width: 1024px){
body:after {
content: "extra-large";
}
}
@media screen and (max-width: 768px){
body:after {
content: "large";
}
}
@media screen and (max-width: 640px){
body:after {
content: "medium";
}
}
@media screen and (max-width: 480px){
body:after {
content: "small";
}
}
@media screen and (max-width: 320px){
body:after {
content: "tiny";
}
}
示例侦听器脚本等待基于body:after
. 如您所见,在此示例中它被定义为 2 个范围,用于基于设备通用性的显示/隐藏/移动/创建小部件:
<script type ="text/javascript">
$(window).resize(_.debounce(function(e){
var size = window.getComputedStyle(document.body,':after').content.replace(/"|'/g, ''),
mobile = ["tiny", "small", "medium", "large"].indexOf(size),
desktop = ["extra-large", "widescreen"].indexOf(size);
$('.placehold').html('computed breakpoint: ' + size + '<br />mobile index = ' + mobile + '<br />desktop index = ' + desktop);
if (mobile != -1) {
$('.placehold2').html('mobile range');
} else if (desktop != -1) {
$('.placehold2').html('desktop range');
}
}, 100)).trigger('resize');
</script>
http://jsfiddle.net/Dhaupin/nw7qbdzx/ - 只需调整 jsfiddle 中的输出窗格大小即可对其进行测试。
编辑:显然浏览器通过不同的方式呈现 :after 内容window.getComputedStyle(document.body,':after').content
并插入单引号或双引号。添加了替换以清除它们。