使用matchmedia.js在断点上删除/添加css类

时间:2015-04-25 13:20:14

标签: javascript css responsive-design matchmedia

我有以下代码,当屏幕尺寸为javax.inject及以下(由断点确定)时效果正常:

770px

问题是当窗口调整为 var handleMatchMedia = function (mediaQuery) { if (mediaQuery.matches) { $j(".view-all a").removeClass("button"); $j(".view-all").removeClass("view-all"); } else { $j(".view-all a").addClass("button"); $j(".view-all").addClass("view-all"); } }, mql = window.matchMedia('all and (max-width: 770px)'); handleMatchMedia(mql); mql.addListener(handleMatchMedia); 时,我失去了我的课程。

如何在窗口调整大小时更改类?

4 个答案:

答案 0 :(得分:2)

您需要缓存选择器。另见jsfiddle

var viewAll = $j(".view-all")
  , buttons = $j(".view-all a")
  , handleMatchMedia = function (mediaQuery) {
     if (mediaQuery.matches) {
       buttons.removeClass("button");
       viewAll.removeClass("view-all");
    } else {
       buttons.addClass("button");
       viewAll.addClass("view-all");
    }
  }
  , mql = window.matchMedia('all and (max-width: 770px)');

handleMatchMedia(mql); 
mql.addListener(handleMatchMedia); 

答案 1 :(得分:1)

通过添加课程,猜测您的目标是在媒体更改时更改设计页面。

只需使用css和媒体查询就可以实现这一目标:

@media all and (max-width: 770px) {
  .viewall a {
    color: blue;
  }
}

但如果您真的希望它也可以通过javascript处理,我建议您使用其他类作为标记,例如.adapt并将代码更改为:

var handleMatchMedia = function (mediaQuery) {
    if (mediaQuery.matches) {
       $j(".adapt a").removeClass("button");
       $j(".adapt").removeClass("view-all");
    } else {
       $j(".adapt a").addClass("button");
       $j(".adapt").addClass("view-all");
    }
},

mql = window.matchMedia('all and (max-width: 770px)');

handleMatchMedia(mql); 
mql.addListener(handleMatchMedia); 

答案 2 :(得分:0)

我建议将所需的类保存在data-770-classes属性中。

if (mediaQuery.matches) {
   buttons.removeClass(buttons.attr('data-770-classes'));
   viewAll.removeClass(viewAll.attr('data-770-classes'));
} else {
   buttons.addClass(buttons.attr('data-770-classes'));
   viewAll.addClass(viewAll.attr('data-770-classes'));
}

我认为$j会创建一个jQuery对象。

HTML看起来像:

<div class="view-all" data-700-classes="view-all">...</div>

答案 3 :(得分:0)

您可以使用element.className += "button"添加类,使用.className = ""删除类,这是您需要的代码:

var viewAll = document.getElementsByClassName("view-all")[0];
var buttons = viewAll.getElementsByTagName("a");
var handleMatchMedia = function (mediaQuery) {
  if (mediaQuery.matches) {
     buttons.className += "button";
     viewAll.className = "";
  } else {
     buttons.className += "button";
     viewAll.className += "view-all";
  }
}
var mql = window.matchMedia('all and (max-width: 770px)');

handleMatchMedia(mql); 
mql.addListener(handleMatchMedia);