(function(factory) { if(typeof define === 'function' && define.amd) { define(['jquery'], factory); } else if(typeof exports === 'object') { // Node / CommonJS factory(require('jquery')); } else { factory(jQuery); } })(function($) { 'use strict'; var console = window.console || { log: function() {} }; /** * 图片裁剪 * @param $element * @param aspectRatio 支持等比 1 4/3 16/9 * @constructor */ function CropAvatar($element, aspectRatio) { this.$container = $element; this.$avatarView = this.$container.find('.avatar-view'); this.$avatar = this.$avatarView.find('img'); this.$avatarModal = $("body").find('#avatar-modal'); this.$loading = $("#page-wrapper").find('.loading'); this.$avatarForm = this.$avatarModal.find('.avatar-form'); this.$avatarUpload = this.$avatarForm.find('.avatar-upload'); this.$avatarSrc = this.$avatarForm.find('.avatar-src'); this.$avatarData = this.$avatarForm.find('.avatar-data'); this.$avatarInput = this.$avatarForm.find('.avatar-input'); this.$avatarSave = this.$avatarForm.find('.avatar-save'); this.$avatarBtns = this.$avatarForm.find('.avatar-btns'); this.$avatarWrapper = this.$avatarModal.find('.avatar-wrapper'); this.$avatarPreview = this.$avatarModal.find('.avatar-preview'); this.$aspectRatio = aspectRatio; this.init(); } CropAvatar.prototype = { constructor: CropAvatar, support: { fileList: !!$('').prop('files'), blobURLs: !!window.URL && URL.createObjectURL, formData: !!window.FormData }, init: function() { this.support.datauri = this.support.fileList && this.support.blobURLs; if(!this.support.formData) { this.initIframe(); } this.initTooltip(); this.initModal(); this.addListener(); }, addListener: function() { this.$avatarView.on('click', $.proxy(this.click, this)); this.$avatarInput.on('change', $.proxy(this.change, this)); this.$avatarForm.on('submit', $.proxy(this.submit, this)); this.$avatarBtns.on('click', $.proxy(this.rotate, this)); }, initTooltip: function() { this.$avatarView.tooltip({ placement: 'bottom' }); }, initModal: function() { this.$avatarModal.modal({ show: false }); }, initPreview: function() { var url = this.$avatar.attr('src'); // this.$avatarPreview.empty().html(''); }, initIframe: function() { var target = 'upload-iframe-' + (new Date()).getTime(), $iframe = $('