javascript - 模块模式 JavaScript - 滚动事件不起作用

标签 javascript jquery html

我正在尝试在 JS 中实现模块模式,但滚动事件未触发,代码有什么问题,请按照示例进行

var modBrandHeader = (function ($) {
    'use strict';
  
    var $con;
  
    /* GENERIC */
    var init = function () {
      $con = $('.brand-header');
      if (!$con.length) {
        return;
      }
    };

    var scroll = function (scrollTop) {
      if (scrollTop > $('.brand-header').height()) {
          console.log("Scroll");
      } else {
        console.log("Scroll removed");
      }
    };

    return {
      init: init,
      scroll: scroll
    };
  })(jQuery);
  
.brand-header {
  height:70px;
  width:100%;
  float:left;
  background-color:#ddd;
  border-bottom:1px solid #ccc;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="brand-header">This is header</div>

最佳答案

这里有一些问题(或者至少是不理想的)。首先,您没有将任何内容与滚动事件绑定(bind)。您似乎认为当该事件触发时,您的 scroll 函数将被调用,但事实并非如此。您需要添加类似以下内容:

$(document).on("scroll", scroll);

您可以将其放置在您想要的位置(无论如何在定义滚动函数之后),但通常建议将其放置在您的 init 函数中,包装在 $(document).ready 阻止。

接下来,实际上没有任何东西调用您的 init 函数,尽管这可能是由此处未显示的代码调用的。您需要以一种或另一种方式调用它;它不会自动发生。

最后,你的 init 函数有一个毫无意义的 if/return block ;如果没有 $con 你会返回,但你还是会这样做,因为那里没有更多的功能。

最后一个提示:滚动事件通常不受浏览器速率限制。 (或者至少,没有达到您可能期望的程度。)此事件将触发很多,您可能希望为您调用的任何事件添加自己的速率限制结果。如果不这样做,性能可能会下降,尤其是在较长的页面上。

关于javascript - 模块模式 JavaScript - 滚动事件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53822423/

相关文章:

jquery - 如何使用 Jest 正确模拟第三方库(例如 jQuery 和 Semantic UI)?

javascript - 屏幕调整大小时重置切换(多种样式)

javascript - PHP 返回 jquery/ajax 不工作

javascript - 如何在IE8中动态创建CSS类

jquery - 插入html后重新计算div高度

javascript - 使用或单击输入时不允许拖动

javascript - Magento:bundle.js 中捆绑产品的 'Bug' 的等级定价 "Price as Configured"

javascript - 如何使用 classList 获取 React 组件引用以更改其类?

javascript - 使 HTML 内容不对搜索使用react (Ctrl+F)

javascript - 除非硬编码或在 setTimeout 中设置为 0,否则不显示 Base64 图像