通过 jQuery 根据浏览器宽度(调整大小)切换 Class onclick
Toggle Class on cilck based on browser width (resize) via jQuery
我有一个带有切换按钮 class 的按钮 - 只有当浏览器大小低于 1200 像素时,它才能工作。它在刷新后工作,但不知何故,当我调整 window 的大小时,它有时工作,有时不工作 - 看不到模式。我在开发工具上看到元素被高亮显示(所以 hte 脚本正在做某事)但我没有切换 class。试图将其更改为 addClass/removeClass 但结果是一样的。任何如何使它工作的建议将不胜感激。
代码笔:http://codepen.io/miunik/pen/oLWOLY
HTML:
<ul class="level-1">
<li class="btn">1 level item
<ul class="level-2">
<li>2 level item</li>
<li>2 level item</li>
<li>2 level item</li>
<li>2 level item</li>
</ul>
</li>
</ul>
CSS
ul.level-2 {
display: none;
}
ul.level-2.open {
display: block;
}
jQuery:
$(document).ready(function() {
function setNav() {
if (window.outerWidth < 1200) {
$('.btn').on({
click: function() {
$(this).children('.level-2').toggleClass('open');
}
});
}
}
setNav()
$(window).resize(function() {
setNav();
console.log(window.outerWidth);
});
});
你的代码的问题是,你绑定了很多事件处理程序:每次 window resize
事件发生时,每个 <li>
标签(不仅是级别 1) 得到一个新的。因此,如果 toggleClass()
实际切换或不切换,则取决于事件处理程序的数量。
我只会绑定一个处理程序,最好是在文档中与一个选择器结合使用,该选择器仅标识 .level-1
正下方的 <li>
标记,并在该处理程序中询问屏幕大小。您甚至不需要 resize
处理程序。
$(document).ready(function() {
$(document).on("click", ".btn", function () {
if (window.outerWidth < 1200) {
$(this).children('.level-2').toggleClass('open');
}
});
});
在此处查看工作示例:https://jsfiddle.net/wu1unvek/
如果 window 变大,您可能想要一个 resize()
处理程序来删除 open
class:
$(window).resize(function () {
if (window.outerWidth >= 1200) {
$(".level-2").removeClass("open");
}
});
编辑:适应修改后的问题代码:使用.btn
代替.level-1 > li
编辑 2:添加了 resize()
重置 open
class 的示例,如果 window 变大了
我有一个带有切换按钮 class 的按钮 - 只有当浏览器大小低于 1200 像素时,它才能工作。它在刷新后工作,但不知何故,当我调整 window 的大小时,它有时工作,有时不工作 - 看不到模式。我在开发工具上看到元素被高亮显示(所以 hte 脚本正在做某事)但我没有切换 class。试图将其更改为 addClass/removeClass 但结果是一样的。任何如何使它工作的建议将不胜感激。
代码笔:http://codepen.io/miunik/pen/oLWOLY
HTML:
<ul class="level-1">
<li class="btn">1 level item
<ul class="level-2">
<li>2 level item</li>
<li>2 level item</li>
<li>2 level item</li>
<li>2 level item</li>
</ul>
</li>
</ul>
CSS
ul.level-2 {
display: none;
}
ul.level-2.open {
display: block;
}
jQuery:
$(document).ready(function() {
function setNav() {
if (window.outerWidth < 1200) {
$('.btn').on({
click: function() {
$(this).children('.level-2').toggleClass('open');
}
});
}
}
setNav()
$(window).resize(function() {
setNav();
console.log(window.outerWidth);
});
});
你的代码的问题是,你绑定了很多事件处理程序:每次 window resize
事件发生时,每个 <li>
标签(不仅是级别 1) 得到一个新的。因此,如果 toggleClass()
实际切换或不切换,则取决于事件处理程序的数量。
我只会绑定一个处理程序,最好是在文档中与一个选择器结合使用,该选择器仅标识 .level-1
正下方的 <li>
标记,并在该处理程序中询问屏幕大小。您甚至不需要 resize
处理程序。
$(document).ready(function() {
$(document).on("click", ".btn", function () {
if (window.outerWidth < 1200) {
$(this).children('.level-2').toggleClass('open');
}
});
});
在此处查看工作示例:https://jsfiddle.net/wu1unvek/
如果 window 变大,您可能想要一个 resize()
处理程序来删除 open
class:
$(window).resize(function () {
if (window.outerWidth >= 1200) {
$(".level-2").removeClass("open");
}
});
编辑:适应修改后的问题代码:使用.btn
代替.level-1 > li
编辑 2:添加了 resize()
重置 open
class 的示例,如果 window 变大了