【发布时间】:2016-07-04 05:44:25
【问题描述】:
我有一个 jQuery 脚本,它在满足某些条件时插入和删除一些 CSS 类。它用于增强网页顶部的粘性菜单。
虽然代码没有错误,但我不知道如何添加一个条件,以便在调整浏览器窗口大小时重新执行相同的代码。例如,如果最初检测到浏览器宽度为 1366px,即使我将其调整为 800px,也不会执行应申请 $(window).width() <= 960 的代码。如果刷新已经设置 800px 宽度的页面,一切正常。
我用$(window).resize() 尝试了几件事,但到目前为止没有任何效果。
我用来修改 CSS 的代码如下:
function updateContainer() {
$(window).scroll(function() {
if ( $(window).width() > 960 ) {
if( $(window).scrollTop() > 40 && $(document).height() - $(window).height() > 79 ) {
$(".site-header").addClass("site-header-scrolled");
} else if ($(window).scrollTop() <= 40) {
$(".site-header").removeClass("site-header-scrolled");
}
} else {
if( $(window).scrollTop() > 40 && $(document).height() - $(window).height() > 160 ) {
$(".title-area").hide(200);
$(".nav-menu").addClass("nav-menu-scrolled").hide(200);
if ( !$(".mobile-nav").length ) {
$(".title-area").before('<div class="mobile-nav"><p>Navigation ☰</p></div>');
} else {
return false;
}
$(".mobile-nav").click(function(){
$(".nav-menu").slideToggle(200);
});
} else if ($(window).scrollTop() <= 40) {
$(".title-area").show(200);
$(".nav-menu").removeClass("nav-menu-scrolled").show(200).removeAttr("style");
$(".mobile-nav").remove();
}
}
});
我也将同样的代码包装在:
$(document).ready(function() {
"use strict";
});
我不确定这是否绝对必要。
我尝试了这里找到的前两个解决方案:jQuery on window resize。而
$(document).ready(function () {
updateContainer();
$(window).resize(function() {
updateContainer();
});
});
}
对我来说有点用,一切都变得有问题。同时应用两种情况( 960px)的代码。
提前感谢您的帮助!!
【问题讨论】:
-
不要将两个不同的函数绑定到
scroll事件(调整窗口大小时需要取消绑定),您可以这样做$(window).scroll(function() { if(width<=960){...}else{...} }); -
谢谢,我会的。最初,我将代码放在两个不同的位置,我只是将它组合起来,并没有考虑简化它。
-
updateContainer();代码在哪里? -
updateContainer();取自 stackoverflow.com/questions/9828831/jquery-on-window-resize 中的示例。它基本上是那里的所有代码。我会做出改变,所以它可能会变得更清楚。 -
我认为问题的一部分是,例如
$(".site-header").removeClass("site-header-scrolled");没有在窗口调整大小时执行。
标签: javascript jquery html css