我正在使用enquire.js库将JavaScript媒体查询添加到我正在开发的网站中。
我最初加载网站时会出现问题。
有什么想法吗?
enquire.register("screen and (max-width:860px)", {
match : function()
{
nav_wrapper.removeClass('show').addClass('hide');
nav_toggle.click(function()
{
if((nav_wrapper).hasClass('hide'))
{
console.log('It\'s hidden');
nav_wrapper.removeClass('hide').addClass('show');
}
else
{
console.log('It\'s opened up');
nav_wrapper.removeClass('show').addClass('hide');
}
});
},
unmatch : function()
{
nav_wrapper.removeClass('hide').addClass('show');
},
});
答案 0 :(得分:2)
每次拨打match
时,您都会添加新 click
处理程序(再次执行nav_toggle.click(function(){ ... })
)。他们堆叠起来,他们每个人都会被召唤。因此,在第一次调用match
之后,您有一个并且可能获得您期望的行为。第二次调用match
后,你有两个,并开始得到错误的行为。在第三次致电match
之后,你有三个......
查看您的click
处理程序,没有理由这样做,只需将其连接一次(大概在match
之外)。
例如:
// Hook up click **once**
nav_toggle.click(function() {
if (nav_wrapper.hasClass('hide')) {
console.log('It\'s hidden bud');
nav_wrapper.removeClass('hide').addClass('show');
} else {
console.log('It\'s opedn up mate');
nav_wrapper.removeClass('show').addClass('hide');
}
});
// Respond to screen width changes
enquire.register("screen and (max-width:860px)", {
match: function() {
nav_wrapper.removeClass('show').addClass('hide');
},
unmatch: function() {
nav_wrapper.removeClass('hide').addClass('show');
},
});
附注:我删除了()
中nav_wrapper
周围不必要的if((nav_wrapper).hasClass('hide'))
。