2015-05-26 2 views
0

Я хочу добавить и удалить класс css, когда ширина окна меньше 768 пикселей. Я использовал JavaScript, чтобы сделать это:Изменить класс css с помощью js

$(window).ready(function() { 
var $width = $(window).width(); 
    if ($width <= 768){ 
    $('header').addClass('hide'); 
    $('#menu-switch').removeClass('hide'); 
}; 
}); 

Проблема заключается в том, что я обновить эту страницу, так что он работает. Есть ли способ добавить и удалить класс без обновления страницы?

+0

Да, это называется мероприятием 'resize'! – adeneo

+0

есть использование 'resize' мероприятие. –

+0

Использовать событие изменения размера? – j08691

ответ

0

Путь JQuery будет

$(window).on('resize', function() { 
    if ($(window).width() <= 768){ 
     $('header').addClass('hide'); 
     $('#menu-switch').removeClass('hide'); 
    } 
    else { 
     $('#menu-switch').addClass('hide'); 
     $('header').removeClass('hide'); 
    } 
}); 

, но вы не должны использовать это, так как есть гораздо более производительный способ сделать это в CSS с помощью так называемых запросов СМИ. Ваше решение для USECASE вы показали, будет выглядеть следующим образом:

@media screen and (max-width: 768px) { 
    header { 
     display: none; 
    } 
    #menu-switch { 
     display: block; 
    } 
} 

@media screen and (min-width: 769px) { 
    header { 
     display: block; 
    } 
    #menu-switch { 
     display: none; 
    } 
} 
0

JavaScript:

window.onresize = function(event) { 
var $width = $(window).width(); 
    if ($width <= 768){ 
    $('header').addClass('hide'); 
    $('#menu-switch').removeClass('hide'); 
}; 
}; 
+0

Зачем вам использовать jQuery везде else * except * при привязке обработчика к событию onresize? Это, возможно, самая лучшая возможность использовать jQuery, потому что она позволяет избежать перезаписи существующего обработчика (или перезаписывать его позже). – JJJ

+0

Поскольку jQuery просто обертывает стандартное изменение размера DOM-события. – lmgonzalves

+0

... с дополнительными преимуществами, о которых я только что упомянул. – JJJ

0

Это можно сделать с помощью CSS для более гладкого рендеринга в окне изменения размера слушателя является довольно тяжелым для пользователей с низкими компьютерами Perfomance.

Try somethink так:

@media screen and (max-width: 767px) { 
header, #menu-switch { 
    display: none; 
} 
} 
0
jQuery(window).on('resize', function(){ .... 

Мы должны были использовать ту же идею, чтобы исправить CSS на изменение размера ранее. Мы также добавили некоторую задержку и инициировали событие изменения размера самостоятельно, а также готовый документ, чтобы быть уверенным.

setTimeout(function(){ 
    jQuery(window).trigger('resize'); 
}, 200); 
0

попробовать:

$(window).bind('load resize', function(){ 
 
var $width = $(window).width(); 
 
    if ($width <= 768){ 
 
    $('header').addClass('hide'); 
 
    $('#menu-switch').removeClass('hide'); 
 
}; 
 
});

+0

Обратите внимание, что использование 'bind (events, callback())' обескуражено в пользу 'on (events, callback())'. – connexo

0

Вы должны использовать:

jQuery(window).resize(function(){ 
    var $width = $(window).width(); 
    if ($width <= 768){ 
     $('header').addClass('hide'); 
     $('#menu-switch').removeClass('hide'); 
    }; 
}); 

Таким образом, он может поймать событие браузера изменения размеров и каждый раз, когда пользователь изменяет его браузер, ширина переменной получит новое значение.

0

Вы должны проверить, когда страница загрузки и когда размер или пролистайте:

var changeMe = function(){ 
    var $width = $(document).width(); 
    if ($width <= 768){ 
     $('header').addClass('hide'); 
     $('#menu-switch').removeClass('hide'); 
    }; 
}; 
/* On ready */ 
$(document).ready(function(){changeMe();}); 
/* On resize */ 
$(window).resize(function(){changeMe();}); 
/* On scroll */ 
$(document).scroll(function(){changeMe();}); 

Эта работа 100%.

Но вы можете использовать CSS3 для этой проблемы:

@media screen and (max-width: 768px) { 
    header { 
     display: none; 
    } 
    #menu-switch { 
     display: block; 
    } 
} 

Просто включите CSS switcers ПОСЛЕ основного стиля и изменить только то, что вам нужно.

Смежные вопросы