javascript - $(window).width() if 语句在不应该运行的时候运行

标签 javascript jquery

大家好,我在 jQuery 中遇到 $(window).width if 语句的问题。由于某种原因,即使窗口宽度小于 991 像素,我的函数也会运行,但是我的 if 语句指出,如果窗口宽度大于 ,它就应该运行991.

function ctaFixTop() {
  var mn = $("#new-car-offer-cta");
  var offerHead = $('#new-car-offer-head');
  mns = "new-car-offer-cta-active";
  var hdr = 0;
  var ctaHeight = $("#new-car-offer-cta").height();
  $('.header-wrapper, #top-bar, #new-car-back, #new-car-offer-head').each(function() {
      hdr += $(this).outerHeight();
  });
  if ($(window).width() > 991) {
    $(window).scroll(function() {
        if ($(this).scrollTop() > hdr) {
            offerHead.css('margin-bottom', ctaHeight);
            mn.addClass(mns);
        } else {
            offerHead.css('margin-bottom', 0);
            mn.removeClass(mns);
        }
    });
  }
}
$(window).resize(ctaFixTop);
ctaFixTop();

正如您所看到的,ctaFixTop 函数被调用两次,一次是在初始加载时,一次是在窗口大小调整时。当我最初加载窗口宽度低于 991px 的页面时,该函数应该如何工作,但是如果我随后将窗口大小增加到超过 911px 并将其大小缩小到 911px 以下,则 $(window).scroll 函数即使它被包装在 if 语句中,该语句声明它仅在窗口宽度大于 991 时才运行,也会被调用。

知道为什么会发生这种情况,因为我已经尝试解决这个问题,并且根本无法理解为什么即使有 if 语句围绕它,也会调用该函数。

谢谢

最佳答案

这是因为 scroll 事件已附加到窗口,并且您没有将其删除。你需要做的就是把

  if ($(window).width() > 991) {

.scroll() 方法中,如下所示。

 $(window).scroll(function() {
  if ($(window).width() > 991) {
    if ($(this).scrollTop() > hdr) {
        offerHead.css('margin-bottom', ctaHeight);
        mn.addClass(mns);
    } else {
        offerHead.css('margin-bottom', 0);
        mn.removeClass(mns);
    }
}});

关于javascript - $(window).width() if 语句在不应该运行的时候运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37699178/

相关文章:

javascript - 如何更改 .css 类属性 - 背景 : url ('' ) for each item javascript/typescript

javascript - 构建 HTML5 音频流 Chrome 扩展 - 如何停止缓冲流

javascript - jQuery UI - 对话框将自定义效果选项传递到对话框以进行显示和隐藏

javascript - 处理异步函数

javascript - Bootstrap 3 - 从另一个模态打开模态

javascript - 如何在点击次数后隐藏元素?

javascript - 将 HTML 下拉列表中的值传递给按钮以启动模式

javascript - Jquery 设置元素值不适用于长值(guids)

javascript - 将值从 javascript 传递到另一个 js 文件

javascript - 在 link-knockout.js 中包含值