viewer.js,其调用方法和使用都很简单。但是开始的时候对于其内部方法的调用,图片更新,插件冲突控制等原理都不是很理解。在这里分析一下viewer.js的框架,和大部分jQuery插件的封装类似,也有很多值得学习的部分。
先省略掉大部分的属性和方法,留下整体框架,再一步步分析结构。
(function (factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as anonymous module.
define('viewer', ['jquery'], factory);
} else if (typeof exports === 'object') {
// Node / CommonJS
factory(require('jquery'));
} else {
// Browser globals.
factory(jQuery);
}
})(function ($) {
'use strict';
// Constants
var NAMESPACE = 'viewer';
//globle function
function isUndefined(u) {
return typeof u === 'undefined';
}
function isNumber(n) {
return typeof n === 'number' && !isNaN(n);
}
function isString(s) {
return typeof s === 'string';
}
function toArray(obj, offset) {
var args = [];
if (isNumber(offset)) { // It's necessary for IE8
args.push(offset);
}
return args.slice.apply(obj, args);
}
//省略
//省略
function Viewer(element, options) {
this.$element = $(element);
this.options = $.extend({}, Viewer.DEFAULTS, $.isPlainObject(options) && options);
this.isImg = false;
this.isBuilt = false;
this.isShown = false;
this.isViewed = false;
this.isFulled = false;
this.isPlayed