У меня есть решение вашей точной проблемы, которое я использую сам.
По сути, вы не можете напрямую определять точки останова с помощью JavaScript, но вы можете обнаружить изменения в элементах, вызванные точками останова..css-js_ref-*
div станут видимыми, когда будет достигнута их соответствующая точка останова.
<div class="css-js_ref">
<div class="css-js_ref-sm" data-bp="sm"></div>
<div class="css-js_ref-md" data-bp="md"></div>
</div>
И затем вы можете использовать JS, чтобы определить, какой последний видимый элемент:
function currentBreakpoint() { return $('.css-js_ref > *:visible').first().attr('data-bp') };
Возвращаетимя точки останова, которое вы вводите в разметку .css-js_ref
, т.е. sm
.
Рабочий пример:
function currentBreakpoint() { return $('.css-js_ref > *:visible').first().attr('data-bp') };
var breakpointLength = $('.css-js_ref > *:visible').length;
$(window).on('resize', function () {
var newBreakpointLength = $('.css-js_ref > *:visible').length;
if (newBreakpointLength < breakpointLength) {
breakpointLength = newBreakpointLength;
$(window).trigger('breakpoint:up', [currentBreakpoint()]);
}
if (newBreakpointLength > breakpointLength) {
breakpointLength = newBreakpointLength;
$(window).trigger('breakpoint:down', [currentBreakpoint()]);
}
});
$(window).on('breakpoint:down', function(event, bp){
console.log(bp);
});
.css-js_ref * {
display: none;
}
@media screen and (max-width: 500px) {
.css-js_ref-sm {
display: block;
max-width: 500px;
}
}
@media screen and (max-width: 900px) {
.css-js_ref-md {
display: block;
max-width: 900px;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="css-js_ref">
<div class="css-js_ref-sm" data-bp="sm"></div>
<div class="css-js_ref-md" data-bp="md"></div>
</div>
Использование:
// bp is the breakpoint that was reached
$(window).on('breakpoint:down', function(event, bp){
if(bp === 'md') {
// do stuff on below medium sized devices
}
});
$(window).on('breakpoint:up', function(event, bp){
if(bp === 'md') {
// do stuff on above medium sized devices
}
});
Это решение немного трудоемкое, но чрезвычайно универсальное.Это также означает, что вам нужно определять свои контрольные точки только в одном месте, что отлично подходит для DRY соответствия.