123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307 |
- /**
- * HTML5上传插件
- * @author yangjian<yangjian102621@gmail.com>
- * @version 1.0.1
- * @site https://git.oschina.net/blackfox/ajaxUpload
- */
- (function ($) {
- //判断浏览器是否支持html5
- // if ( !window.applicationCache )
- // 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,
- multiple: false,
- 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 (options.multiple) {
- //多选
- if ($(this).hasClass("selected")) {
- $(this).removeClass("selected");
- o.selectedList.remove(src);
- } else {
- $(this).addClass("selected");
- o.selectedList.push(src);
- }
- } else {
- //这里暂时改成单选
- $('.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);
|