我有以下的标记(Plunker Example):定义功能的jQuery插件使用
<div class="slides">
<div class="slide" id="slide-01">
<img src=""
</div>
<div class="slide" id="slide-02">
Slide 02 Content
</div>
<ul class="navigation">
<li><a href="#slide-01"></a></li>
<li><a href="#slide-02"></a></li>
</ul>
</div>
我创建一个简单的滑块插件:
$("div.slides").slider();
这将工作如下:
添加“主动”类第一滑动和在导航第一锚;
8秒钟后改变活性类下一幻灯片和下锚定件; 所以在这种情况下,我想显示下一张幻灯片并隐藏前一张幻灯片。
如果锚定被点击导航表示滑动,其id是一样的,在锚减去#的HREF值。
基本上就是它了......所以,我试过如下:
$(function() {
$("div.slides").slider();
});
(function ($) {
$.fn.slider = function (options) {
var defaults = {
delay: 800,
speed: 200
};
var options = $.extend({}, defaults, options);
$(this).each(function() {
var $this = $(this);
var $items = $this.children("div.slide");
var $pages = $this.children("ul.pager li a");
$items.first().addClass("active");
$pages.first().addClass("active");
var timer;
start();
$pages.on("click", function (e) {
e.preventDefault();
console.log("here");
show(this.attr("href").replace("#", ""));
});
var start = function start() {
timer = setTimeout(next, 8000);
};
var stop = function stop() {
clearTimeout(timer);
};
var next = function next() {
var item = $items.find(".active").next();
if (!item.length)
item = $items.find(".active").first();
show(item.attr("id"));
};
var show = function show(id) {
if ("#" + id == $this.children("ul.pager li a.active").attr("href"))
return;
clearTimeout(timer);
$items.removeClass("active").hide();
$items.find("#id").first().addClass("active").fadeIn("slow");
$pages.removeClass("active");
$pages.find("a[href*=" + id + "]").first().addClass("active");
start();
}; // show
});
return this;
};
})(jQuery);
我有一些问题,使这项工作。一个是我的错误:
jQuery.Deferred exception: start is not a function $.fn.slider
这发生在我所有的功能...
在调用之前是否尝试着放置Start定义函数? – GGO
你应该使用'var start = function(){...}'或'function start(){...}',而不是它们的组合。 – Terry
@Terry'var start = function(){...}'会有相同的结果,因为当start()被调用上面的某些行时,start仍然是undefined。 '函数start(){...}'因为提升会起作用。 –