jQuery插件编写:Widget Factory实例(六)

来源:互联网 发布:农村金融数据来源 编辑:程序博客网 时间:2024/05/16 14:11

在第三篇文章中介绍了一个采用传统方法开发的jQuery子弹图插件实例。这里将使用Widget Factory来创建同样的插件。所用到的HTML模型和CSS都是相同的,以及插件的调用方法都是一样。唯一不同的就是插件的实现方式,即JS文件不同。下面仅仅给出新的JS文件,其他CSS文件和运行效果图请参阅本系列文章的第三篇:jQuery插件编写:对象级插件示例(三)。

/** * 子弹图插件,基于网上的一个控件改编而成 * 网上原插件地址:https://github.com/NETTUTS/An-In-Depth-Review-of-the-jQuery-Widget-Factory * http://net.tutsplus.com/tutorials/javascript-ajax/an-in-depth-review-of-jquerys-widget-factory/ * 2013-6-21 * @author 张书振 */(function($) {$.widget("nt.bulletchart", {    options : {      // 宽度为相对于容器的百分比: 0 - 100      size: 100,      //  [{ title: 'Sample Bar', value: 75, css: '' }],      bars: [],      //  [{ title: 'Sample Marker', value: 50, css: 'green' }],      markers: [],      // 刻度必须是百分比数值 : 0 - 100      ticks: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]    },    _create : function() {    var self = this;    this.element.addClass("bullet-chart");    // 设置size,即container的宽度    this.element.css("width", this.options.size + "%");        //添加legend    this._legend = $("<div class='legend'></div>").appendTo(this.element);    var legendIndex = 0;    $.each(this.options.bars, function() {    var $legendItem = $("<div class='legend-item'></div>")    .attr("data-index", legendIndex++) // 给每个legendItem添加索引,便于单击事件处理    .appendTo(self._legend);    var $legendSymbol = $("<span class='legend-symbol bar'></span>").appendTo($legendItem);    $legendSymbol.addClass(this.css);    var $legendLabel = $("<span class='legend-label'></span>").appendTo($legendItem);    $legendLabel.text(this.title);    });    $.each(this.options.markers, function() {    var $legendItem = $("<div class='legend-item'></div>")    .attr("data-index", legendIndex++)    .appendTo(self._legend);    var $legendSymbol = $("<span class='legend-symbol marker'></span>").appendTo($legendItem);    $legendSymbol.addClass(this.css);    var $legendLabel = $("<span class='legend-label'></span>").appendTo($legendItem);    $legendLabel.text(this.title);    });        //添加图表    this._container = $("<div class='chart-container'></div>").appendTo(this.element);    this._tickbar = $("<div class='tick-bar'></div>").appendTo(this._container);    //刻度    $.each(this.options.ticks, function() {    $("<span class='tick'></span>")    .css("left", this + "%")    .appendTo(self._tickbar);    $("<span class='tick-label'><span>")    .css("left", this + "%")    .text(this)    .appendTo(self._tickbar);    });    //绘制bar 和 marker    $.each(this.options.bars, function() {    $("<div class='bar'></div>")    .addClass(this.css)    .animate({ width : this.value + "%" })    .appendTo(self._container);    });    $.each(this.options.markers, function() {    $("<div class='marker'></div>")    .addClass(this.css)    .css("left", this.value + "%")    .appendTo(self._container);    });        },    _init : function() {    var self = this;    // 为legend添加事件    $(".legend-item", this.element).toggle(    function(event) {    var $legendItem = $(this);    $legendItem.addClass("fade");    $(".chart-container>.bar, .chart-container>.marker", self.element).eq($legendItem.attr("data-index"))    .fadeOut();    },    function(event) {    var $legendItem = $(this);    $legendItem.removeClass("fade");    $(".chart-container>.bar, .chart-container>.marker", self.element).eq($legendItem.attr("data-index"))    .fadeIn();    });    },    _setOption : function(key, value) {    this._super(key, value);    },    _destroy : function() {    this.element.removeClass("bullet-chart");    this._legend.remove();    this._container.remove();    }});})(jQuery);


原创粉丝点击