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);
- jQuery插件编写:Widget Factory实例(六)
- jQuery插件编写:Why use the Widget Factory(四)
- jQuery插件编写:How to use Widget Factory(五)
- 使用 jQuery UI Widget Factory 编写有状态的插件(Stateful Plugins)
- 使用 jQuery UI Widget Factory 编写有状态的插件(Stateful Plugins)
- 使用 jQuery UI Widget Factory 编写有状态的插件(Stateful Plugins)
- jQuery UI widget factory
- 编写jQueryUI插件(widget)
- 编写jQueryUI插件(widget)
- 编写jQueryUI插件(widget)
- 编写jQueryUI插件(widget)
- jQuery插件分类、编写及实例
- jQuery编写插件的小实例
- Android的Widget编写实例
- jquery插件介绍(六)
- poj2947--Widget Factory(高斯消元)
- [POJ2947]Widget Factory(高斯消元)
- jQuery UI 插件Datepicker Widget
- Javascript继承机制(call、apply、prototype)
- google 技巧
- iOS 想iOS模拟器中导入图片
- IIS基本性能优化方式
- Windows静态库和动态库的创建和使用
- jQuery插件编写:Widget Factory实例(六)
- mysql5.6.10 Replication 主从从提高性能
- CUDA Toolkit 5.5 Release Candidate (RC)
- SharedPreferences数据存储的读取、写入用法示例
- 用人民币汇率和热钱搞垮中国
- 《程序猿的搬砖生活》三、春节那些事
- SQL注意点
- css 文字自动换行并垂直居中div效果
- Android SDK/NDK问题集