// 图片上传 jQuery(document).ready(function() { $('.js-upload-image,.js-upload-images,.js-upload-imagess').each(function () { var $input_file = $(this).find('input'); var $input_file_name = $input_file.attr('name'); // 是否多图片上传 var $multiple = $input_file.data('multiple'); // 允许上传的后缀 var $ext = $input_file.data('ext'); // 图片限制大小 var $size = 5*1024*1024; // 图片列表 var $file_list = $('#file_list_' + $input_file_name); // 优化retina, 在retina下这个值是2 var ratio = window.devicePixelRatio || 1; // 缩略图大小 var thumbnailWidth = 100 * ratio; var thumbnailHeight = 100 * ratio; // 实例化上传 var uploader = WebUploader.create({ // 选完图片后,是否自动上传。 auto: true, // 去重 duplicate: true, // 不压缩图片 resize: false, compress: false, // swf图片路径 swf: uploadUrl.WebUploader_swf, // 图片接收服务端。 server: uploadUrl.image_upload_url, // 选择图片的按钮。可选。 // 内部根据当前运行是创建,可能是input元素,也可能是flash. pick: { id: '#picker_' + $input_file_name, multiple: $multiple, label:"上传图片" }, // 图片限制大小 fileSingleSizeLimit: $size, // 只允许选择图片文件。 accept: { title: 'Images', extensions: $ext, mimeTypes: 'image/jpg,image/jpeg,image/bmp,image/png,image/gif' } }); // 当有文件添加进来的时候 uploader.on( 'fileQueued', function( file ) { var $li = $( '' ), $img = $li.find('img'); if ($multiple) { $file_list.append( $li ); } else { $file_list.html( $li ); $input_file.val(''); } // 创建缩略图 // 如果为非图片文件,可以不用调用此方法。 // thumbnailWidth x thumbnailHeight 为 100 x 100 uploader.makeThumb( file, function( error, src ) { if ( error ) { $img.replaceWith('不能预览'); return; } $img.attr( 'src', src ); }, thumbnailWidth, thumbnailHeight ); // 创建进度条 //$('
').appendTo( $li ); }); // 文件上传过程中创建进度条实时显示。 uploader.on( 'uploadProgress', function( file, percentage ) { //$.prompt('正在上传'+percentage * 100 + '%','info'); //var $percent = $( '#'+file.id ).find('.progress-bar'); //$percent.css( 'width', percentage * 100 + '%' ); }); // 文件上传成功 uploader.on( 'uploadSuccess', function( file, response ) { var $li = $( '#'+file.id ); if (response.result == 1) { if ($multiple) { if ($input_file.val()) { $input_file.val($input_file.val() + ',' + response.id); } else { $input_file.val(response.id); } $li.find('.remove-picture').attr('data-id', response.id); } else { $input_file.val(response.id); } } //$.prompt(response.msg); //$('
').text(response.info).appendTo( $li ); //$li.find('a.img-link').attr('href', response.path); }); // 文件上传失败,显示上传出错。 uploader.on( 'uploadError', function( file ) { //var $li = $( '#'+file.id ); //$('
上传失败
').appendTo( $li ); $.prompt('上传失败'); }); // 文件验证不通过 uploader.on('error', function (type) { switch (type) { case 'Q_TYPE_DENIED': $.prompt('图片类型不正确,只允许上传后缀名为:'+$ext+',请重新上传!'); break; case 'F_EXCEED_SIZE': $.prompt('图片不得超过'+ ($size/1024) +'kb,请重新上传!'); break; } }); // 完成上传完了,成功或者失败,先删除进度条。 uploader.on( 'uploadComplete', function( file ) { setTimeout(function(){ $( '#'+file.id ).find('.progress').remove(); }, 500); }); // 删除图片 $file_list.delegate('.remove-picture', 'click', function(){ if ($multiple) { var id = $(this).data('id'), ids = $input_file.val().split(','); if (id) { for (var i = 0; i < ids.length; i++) { if (ids[i] == id) { ids.splice(i, 1); break; } } $input_file.val(ids.join(',')); } } else { $input_file.val(''); } $(this).closest('.file-item').remove(); }); }); // 图片裁剪 $('.js-jcrop-interface').each(function () { var jcrop_api = ''; var $self = $(this); var $jcrop = $self.find('.js-jcrop'); var $options = $jcrop.data('options') || {}; var $jcrop_cut_btn = $self.find('.js-jcrop-cut-btn'); var $jcrop_upload_btn = $self.find('.js-jcrop-upload-btn'); var $jcrop_file = $self.find('.js-jcrop-file'); var $jcrop_cut_info = $self.find('.js-jcrop-cut-info'); var $jcrop_preview = $self.find('.jcrop-preview'); var $jcrop_input = $self.find('.js-jcrop-input'); //var $remove_picture = $self.find('.remove-picture'); var $thumbnail = $self.find('.thumbnail'); //var $img_link = $self.find('.img-link'); var $modal = $self.find('.modal-popin'); var $pic_height = ''; // 设置预览图监听 $options.onChange = showPreview; $options.onSelect = showPreview; $options.boxWidth = 750; $options.boxHeight = 750; $options.saveWidth = $options.saveWidth || null; $options.saveHeight = $options.saveHeight || null; $options.aspectRatio = $options.aspectRatio || ($options.saveWidth / $options.saveHeight); // 点击上传按钮,选择图片 $jcrop_upload_btn.click(function () { $jcrop_file.trigger('click'); }); // 加载图片(用于判断图片是否加载完毕) function loadImage(url, callback) { var img = new Image(); //创建一个Image对象,实现图片的预下载 img.src = url; if(img.complete) { // 如果图片已经存在于浏览器缓存,直接调用回调函数 callback.call(img); return; // 直接返回,不用再处理onload事件 } img.onload = function () { //图片下载完毕时异步调用callback函数。 callback.call(img);//将回调函数的this替换为Image对象 }; } // 实时显示预览图 function showPreview(coords) { var ratio = coords.w / coords.h; // 选区比例 var rx,ry; var preview_width = ''; var preview_height = ''; if ((100 / ratio) > $pic_height) { preview_width = $pic_height * ratio; preview_height = $pic_height; } else { preview_width = 100; preview_height = 100 / ratio; } rx = preview_width / coords.w; ry = (preview_width / ratio) / coords.h; if (jcrop_api) { $jcrop_preview.css({ width: Math.round(rx * jcrop_api.ui.stage.width) + 'px', height: Math.round(ry * jcrop_api.ui.stage.height) + 'px', marginLeft: '-' + Math.round(rx * coords.x) + 'px', marginTop: '-' + Math.round(ry * coords.y) + 'px' }).parent().css({ width: preview_width + 'px', height: preview_height + 'px' }); } var jcrop_info = [coords.w, coords.h, coords.x, coords.y, $options.saveWidth, $options.saveHeight]; $jcrop_cut_info.val(jcrop_info.join(',')); } // 选择图片后 $jcrop_file.change(function () { var files = this.files; var file; if (files && files.length) { file = files[0]; if (/^image\/\w+$/.test(file.type)) { // 创建FormData对象 var data = new FormData(); // 为FormData对象添加数据 data.append('file', file); // 上传图片 $.ajax({ url: uploadUrl.jcrop_upload_url, type: 'POST', cache: false, contentType: false, //不可缺 processData: false, //不可缺 data: data, success: function (res) { if (res.code == 1) { $jcrop.attr('src', res.src).data('id', res.id).show(); $jcrop_preview.attr('src', res.src).parent().show(); loadImage(res.src, function () { if (jcrop_api != '') { jcrop_api.destroy(); } $jcrop.Jcrop($options, function () { jcrop_api = this; $pic_height = Math.round(jcrop_api.getContainerSize()[1]); $modal.modal('show'); }); }); } else { $.prompt('上传失败,请重新上传'); } } }).fail(function() { $.prompt('服务器错误~'); }); $jcrop_file.val(''); } else { $.prompt('请选择一张图片'); } } }); // 关闭裁剪框 $modal.on('hidden.bs.modal', function (e) { $jcrop_cut_info.val(''); }); /*// 删除图片 $remove_picture.click(function () { $(this).parent().hide(); $jcrop_input.val(''); });*/ // 裁剪图片 $jcrop_cut_btn.click(function () { var $cut_value = $jcrop_cut_info.val(); if ($jcrop.attr('src') == '') { $.prompt('请上传图片'); return false; } if ($cut_value != '') { var $data = { path: $jcrop_preview.attr('src'), cut: $cut_value }; $.ajax({ url: uploadUrl.jcrop_upload_url, type: 'POST', dataType: 'json', data: $data }) .done(function(res) { if (res.code == '1') { $thumbnail.show().find('img').attr('src', res.thumb || res.src); $jcrop_input.val(res.id); //$img_link.attr('href', res.src); $jcrop_cut_info.val(''); $modal.modal('hide'); } else { $.prompt(res.msg); } }) .fail(function() { $.prompt('请求失败'); }); } else { $.prompt('请选择要裁剪的大小'); } }); }); });