| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 |
- /**
- * HTML5上传插件
- * @author yangjian<yangjian102621@gmail.com>
- * @version 1.0.1
- * @site https://git.oschina.net/blackfox/ajaxUpload
- */
- (function($) {
- //判断浏览器是否支持html5
- if ( typeof FormData == "undefined" )
- throw new Error("您当前的浏览器不支持HTML5,请先升级浏览器才能使用该上传插件!");
- //image crop
- $.fn.imageCrop = function(__width, __height) {
- $(this).on("load", function () {
- var width, height, left, top;
- var orgRate = this.width/this.height;
- var cropRate = __width/__height;
- if ( orgRate >= cropRate ) {
- height = __height;
- width = __width * orgRate;
- top = 0;
- left = (width - __width)/2;
- } else {
- width = __width;
- height = __height / orgRate;
- left = 0;
- //top = (height - __height)/2;
- top = 0;
- }
- $(this).css({
- "position" : "absolute",
- top : -top + "px",
- left : -left + "px",
- width : width + "px",
- height : height + "px"
- });
- });
- }
- //make element draggable
- $.fn.draggable = function(options) {
- var defaults = {
- handler : null
- }
- options = $.extend(defaults, options);
- var __self = this;
- $(options.handler).mousedown(function(e) {
- var offsetLeft = e.pageX - $(__self).position().left;
- var offsetTop = e.pageY - $(__self).position().top;
- $(document).mousemove(function(e) {
- //清除拖动鼠标的时候选择文本
- window.getSelection ? window.getSelection().removeAllRanges():document.selection.empty();
- $(__self).css({
- 'top' : e.pageY-offsetTop + 'px',
- 'left' : e.pageX-offsetLeft + 'px'
- });
- });
- }).mouseup(function() {
- $(document).unbind('mousemove');
- });
- }
- if ( Array.prototype.remove == undefined ) {
- Array.prototype.remove = function(item) {
- for ( var i = 0; i < this.length; i++ ) {
- if ( this[i] == item ) {
- this.splice(i, 1);
- break;
- }
- }
- }
- }
- if ( Array.prototype.uinque == undefined ) {
- Array.prototype.uinque = function() {
- var result = [], hash = {};
- for ( var i = 0, item; (item = this[i]) != null; i++ ) {
- if ( !hash[item] ) {
- result.push(item);
- hash[item] = true;
- }
- }
- return result;
- }
- }
- window.FManager = function(options) {
- options = $.extend({
- lang : {},
- list_url : null,
- data_type : "json",
- fileType : "image", //文件类型,默认是图片,可选flash,media,file
- top : 20,
- callback : function(data) {
- console.log(data);
- }
- }, options);
- var o = {};
- o.dialog = null;
- o.selectedList = new Array(); //the file queue upload successfully
- o.page = 1; //服务器图片列表页码
- o.marker = null, //七牛云上传的分页标识
- o.noRecord = false;
- //close the dialog
- o.close = function () {
- o.dialog.remove();
- try {JDialog.lock.hide();} catch (e) {}
- if (typeof options.close == 'function') {
- options.close();
- }
- }
- //create dialog
- function createDialog() {
- var builder = new StringBuilder();
- builder.append('<div class="uedbody ke-animated"><div class="ued_title">');
- builder.append('<div class="uedbar"><span>'+options.lang.title+'</span></div><div class="close_btn icon" title="'+options.lang.closeText+'"></div>');
- builder.append('</div><div class="wrapper"><div class="wra_body wra_body_server">');
- builder.append('<div class="tab-panel online"><div class="imagelist"><ul class="list clearfix"></ul><div class="no-data"></div></div></div>');
- builder.append('<div class="loading-icon"></div></div></div><div class="wra-btn-group">');
- builder.append('<div class="tip-text">'+options.lang.loadMoreData+'</div>')
- builder.append('<span class="btn btn-primary btn-confirm">'+options.lang.confirmBtnText+'</span>')
- builder.append('<span class="btn btn-default btn-cancel">'+options.lang.cancelBtnText+'</span></div></div>');
- o.dialog = $(builder.toString());
- $("body").append(o.dialog);
- if (options.top == 0) {
- options.top = ($(window).height() - o.dialog.height())/2;
- }
- o.dialog.css({
- left : ($(window).width() - o.dialog.width())/2 + "px",
- top : options.top + "px"
- });
- //给对话框添加拖拽事件
- o.dialog.draggable({handler : o.dialog.find(".ued_title")});
- loadFilesFromServer();
- }
- //绑定元素事件
- function bindEvent() {
- //关闭对话框
- G(".close_btn").on("click", function() {
- o.close();
- });
- //点击确认|取消按钮事件
- G(".btn-confirm").on("click", function() {
- options.callback(o.selectedList);
- o.close();
- });
- G(".btn-cancel").on("click", function() {
- o.close();
- });
- //当滚动条滚到底部时自动去加载图片
- G(".imagelist").on("scroll", function() {
- if ( this.scrollTop + this.clientHeight >= this.scrollHeight ) {
- loadFilesFromServer();
- }
- });
- }
- //query
- function G(query) {
- return o.dialog.find(query);
- }
- //从服务器上获取图片地址
- function loadFilesFromServer() {
- if ( !options.list_url ) {
- G(".online .no-data").html('<span class="error">'+options.lang.noListUrl+'</span>').show();
- return false;
- }
- if ( o.noRecord ) return false;
- G(".loading-icon").show(); //显示加载图标
- $.get(options.list_url, {
- page : o.page,
- marker : o.marker,
- fileType : options.fileType
- }, function(res) {
- G(".loading-icon").hide(); //隐藏加载图标
- if ( res.code == "000" ) {
- if (!res.data[0]) {
- G(".online .no-data").html(options.lang.noDataText).show();
- return;
- }
- o.page++;
- o.marker = res.extra; //存储marker
- appendFiles(res.data);
- } else {
- G(".online .no-data").text(options.lang.noDataText).show();
- o.noRecord = true;
- }
- }, "json");
- }
- //追加元素到图片列表
- function appendFiles(data) {
- $.each(data, function(idx, item) {
- var builder = new StringBuilder();
- builder.append('<li>');
- var extension = getFileExt(item.thumbURL);
- if ( extension == '' ) extension = "default";
- extension = extension.toLowerCase();
- //如果不是图片,则根据文件的后缀名去加载对应的缩略图
- var imgSize = item.width+'x'+item.height; //图片尺寸
- if ( "jpg|jpeg|gif|png|bmp".indexOf(extension) == -1 ) {
- imgSize = formatFileSize(item.filesize); //如果是文件则显示文件大小
- builder.append('<span class="icon-placeholder icon-default icon-'+extension+'" data-src="'+item.oriURL+'"></span>');
- } else {
- builder.append('<img src="'+item.thumbURL+'" data-src="'+item.oriURL+'" border="0">');
- }
- builder.append('<span class="ic"><em class="img-size">'+imgSize+'</em></span></li>');
- var $image = $(builder.toString());
- //绑定选择图片事件
- $image.find(".ic").on("click", function() {
- var src = $(this).prev().attr("data-src");
- var oldSrc = $('.selected:eq(0)').prev().attr("data-src");
- //多选
- // if ( $(this).hasClass("selected") ) {
- // $(this).removeClass("selected");
- // o.selectedList.remove(src);
- // } else {
- // $(this).addClass("selected");
- // o.selectedList.push(src);
- // }
- //这里暂时改成单选
- $('.selected:eq(0)').removeClass("selected"); //移除之前的选中的图片
- o.selectedList.remove(oldSrc);
- $(this).addClass("selected");
- o.selectedList.push(src);
- //console.log(o.selectedList);
- });
- //裁剪显示图片
- $image.find("img").imageCrop(113, 113);
- G(".imagelist .list").append($image);
- });
- }
- //获取文件后缀名
- function getFileExt(filename) {
- if ( !filename ) return false;
- var position = filename.lastIndexOf('.')
- if ( position != -1 ) {
- return filename.substr(position+1).toLowerCase();
- }
- return false;
- }
- //format file size(格式化文件大小)
- function formatFileSize(size) {
- if ( size/1048576 > 1 ) {
- return (size/1048576).toFixed(2)+"MB";
- } else {
- return (size/1024).toFixed(2)+"KB";
- }
- }
- //initialize dialog
- createDialog();
- bindEvent();
- return o;
- }; //end of JUpload
- //string builder
- var StringBuilder = function() {
- var buffer = new Array();
- StringBuilder.prototype.append = function(str) {
- buffer.push(str);
- }
-
- StringBuilder.prototype.toString = function () {
- return buffer.join("");
- }
- }
- })(jQuery);
|