命名空间未定义

时间:2015-01-28 03:23:02

标签: javascript html css html5 css3

我正在构建一个javaScript插件,并在我的插件中定义一个命名空间;但是,网页找不到它。请尽量明确答案;因为我学习更好地检查代码,观看视频,有人在做实时编码和测试

这是我的HTML:

    ...  
   <article class="slider_cnt">
        <div class="slider">
          <img src="img/slide1.jpg" />
          <img src="img/slide2.jpg" />
          <img src="img/slide3.jpg" />
        </div>
    </article>
  </div>

  <script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
  <script type="text/javascript" src="js/modernizr-2.6.2.min.js"></script>
  <script type="text/javascript" src="js/elegant2_slider.js"></script>

    <script type="text/javascript">
        $(document).ready(function () {
            elegantNamespace.initialize($('.slider'),'img');  // options setup
        });
    </script>
</body>

和我的javaScript:

(function ($) {
    this.elegantNamespace = this.elegantNamespace || {};
    var ns = this.elegantNamespace;

    // settings
    var $slider; // class or id of carousel slider
    var $slide; // could also use 'img' if you're not using a li
    var $transition_time = 1000; // 1 second
    var $time_between_slides = 2300; // 2.3 seconds
    var $interval;

    ns.initialize = function(fram, slide){  // options setup
        $slider = fram;
        $slide = slide;
        startloop();
    }

    slides = function() {
        return $slider.find($slide);
    }

    slides().fadeOut();

    // set active classes
    slides().first().addClass('active');
    slides().first().fadeIn($transition_time);

    // auto scroll 
    startloop = function () {
        $interval = setInterval(

        function () {
            var $i = $slider.find($slide + '.active').index();

            slides().eq($i).removeClass('active');
            slides().eq($i).fadeOut($transition_time);

            if (slides().length == $i + 1) $i = -1; // loop to start
            slides().eq($i + 1).addClass('active');
            slides().eq($i + 1).fadeIn($transition_time+ 2000);
        }, $transition_time + $time_between_slides);
    }
    pauseLoop = function() {
        window.clearInterval($interval);
    }

    $slider.hover(

    function () {
        pauseLoop(); // pause the loop
    },

    function () {
        startloop(); //scroll()
    });
})();

1 个答案:

答案 0 :(得分:1)

浏览器可以很好地识别您的命名空间。你的程序被窃听了。
您创建了变量 $ slider $ slide 您可以使用 initialize 函数为这些变量赋值:

ns.initialize = function(fram, slide){  // options setup
    $slider = fram;
    $slide = slide;
    startloop();
}

这里有一个使用这些变量的函数:

 slides = function() {
    return $slider.find($slide);
}

为了使此功能起作用,必须初始化变量。这意味着您必须在调用滑块功能之前调用初始化功能。

这就是你的问题所在。通过调用滑块功能,您尝试使用尚未初始化的 $ slider 。结果你的脚本中断了:

slides().fadeOut();
slides().first().addClass('active');
slides().first().fadeIn($transition_time);

在您的脚本结束时,您还尝试使用 $ slider

$slider.hover(

function () {
    pauseLoop(); // pause the loop
},

function () {
    startloop(); //scroll()
});

要将此代码移动到初始化函数中。这样它应该工作。像这样:

ns.initialize = function(fram, slide){

    $slider = fram;
    $slide = slide;

    slides().fadeOut();
    slides().first().addClass('active');
    slides().first().fadeIn($transition_time);

    $slider.hover(

    function () {
        pauseLoop();
    },

    function () {
        startloop();
    });

    startloop();

}