javascript - 揭示模块模式变量问题

标签 javascript jquery web revealing-module-pattern

我是网络开发新手,最近发现了揭示模块模式。但我在将其实现到我的 JS 中时遇到问题。

 var navigation = (function(){
    //chache DOM
    var $navBar = $('.navBar');
    var $navBtn = $('.navBar .btn');
    var $section = $('.section');
    var mobileNav = $('.navBarMobile');

    //bind events
    $('.navBar .btn').on('click', sectionScroll());
    //$navBtn.on('click', sectionScroll()); wouldn't run


    //select section via scroll pos.
    function selectScroll(){
        var windscroll = $(window).scrollTop();
        if (windscroll >= 10) 
        {
            $('.section').each(function(i)
            {            
                if ($(this).offset().top -200 <= (windscroll)) 
                {
                    $navBtn.removeClass('selected');
                    $navBtn.eq(i+6).addClass('selected');
                    $navBtn.eq(-i+5).addClass('selected');
                }
            });
        } 
     }

    //scroll to section via click
    function sectionScroll(e){
        e.preventDefault();

        var target = $(this).find('a').attr('data-scroll');
        var offset = $('[data-anchor=' + target +']').offset().top - 100;
        TweenMax.to($('html, body').stop(), 1, {scrollTop: offset, delay:     .36});  
    }

    return {
        selectScroll: selectScroll
    };

    })();

    var main = function () 
    {
        $(window).scroll(function() { navigation.selectScroll(); }).scroll();
    }; 
    $(document).ready(main);

在我的 selectScroll 函数中,除非我将“$navBtn”替换为“$('.navBar .btn')”,否则它无法正确运行。我声明变量时做错了什么吗?

如果我更换 $navBtn.on('click', sectionScroll());$('.navBar .btn').on('click', sectionScroll()); sectionScroll 函数一直给我这个错误:无法读取未定义的属性“preventDefault”

编辑: 感谢@Bergi,我在 this page 上发现了这个问题。现在我的问题是使用此解决方案以及揭示模块模式的最佳方法是什么?是否将 defer 属性放在 JS 上:
<script type="text/javascript" src="js/app.js" defer></script> 或者使用显示模块模式时是否有更好的解决方案?

最佳答案

问题是sectionScroll()。它应该是不带括号的 sectionScroll。 使用括号,您可以调用 sectionScroll ,然后传递它的返回值 到。当您在不带参数的情况下调用它时,sectionScroll 的参数 e 的值为 undefined 并且您收到错误。 试试这个:$('.navBar .btn').on('click',sectionScroll);

关于javascript - 揭示模块模式变量问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31978184/

相关文章:

linux - 静态目录和文件设置755,是否可以上传执行恶意脚本?

javascript - 检查是否选择了某个选项并编辑 HTML 标记

javascript - 更改 :hover to click/tap function on mobile/touch devices not working

javascript - jQuery - 计时器不会延迟

jquery - 使用 jquery 获取元素列表的偏移量

ruby-on-rails - 如何将网站上的所有页面转换为 pdf 格式?

java - Play 模板系统的正确使用是什么

javascript - 在 vuejs 中放置一个事件处理程序?

javascript - knockout JS : How to subscribe to changes in code similar to how binding handlers work

javascript - 暂停部分并在 div 内滚动