AjaxUpLoad.js实现文件上传
网络编程 2021-07-04 17:33www.168986.cn编程入门
这篇文章主要为大家详细介绍了AjaxUpLoad.js实现文件上传的具体代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
AjaxUpload.js文件的代码,供大家参考,具体内容如下
/ AJAX Upload ( http://valums./ajax-upload/ ) Copyright (c) Andris Valums Licensed under the MIT license ( http://valums./mit-license/ ) Thanks to Gary Haran, David Mark, Corey Burns and others for contributions / (function () { / global window / / jslint browser: true, devel: true, undef: true, nomen: true, bitwise: true, regexp: true, newcap: true, immed: true / / Wrapper for FireBug's console.log / function log() { if (typeof(console) != 'undefined' && typeof(console.log) == 'function') { Array.prototype.unshift.call(arguments, '[Ajax Upload]'); console.log(Array.prototype.join.call(arguments, ' ')); } } / Attaches event to a dom element. @param {Element} el @param type event name @param fn callback This refers to the passed element / function addEvent(el, type, fn) { if (el.addEventListener) { el.addEventListener(type, fn, false); } else if (el.attachEvent) { el.attachEvent('on' + type, function () { fn.call(el); }); } else { throw new Error('not supported or DOM not loaded'); } } / Attaches resize event to a window, limiting number of event fired. Fires only when encounteres delay of 100 after series of events. Some browsers fire event multiple times when resizing http://.quirksmode./dom/events/resize.html @param fn callback This refers to the passed element / function addResizeEvent(fn) { var timeout; addEvent(window, 'resize', function () { if (timeout) { clearTimeout(timeout); } timeout = setTimeout(fn, 100); }); } // Needs more testing, will be rewriten for next version // getOffset function copied from jQuery lib (http://jquery./) if (document.documentElement.getBoundingClientRect) { // Get Offset using getBoundingClientRect // http://ejohn./blog/getboundingclientrect-is-awesome/ var getOffset = function (el) { var box = el.getBoundingClientRect(); var doc = el.ownerDocument; var body = doc.body; var docElem = doc.documentElement; // for ie var clientTop = docElem.clientTop || body.clientTop || 0; var clientLeft = docElem.clientLeft || body.clientLeft || 0; // In Inter Explorer 7 getBoundingClientRect property is treated as physical, // while others are logical. Make all logical, like in IE8. var zoom = 1; if (body.getBoundingClientRect) { var bound = body.getBoundingClientRect(); zoom = (bound.right - bound.left) / body.clientWidth; } if (zoom > 1) { clientTop = 0; clientLeft = 0; } var = box. / zoom + (window.pageYOffset || docElem && docElem.scrollTop / zoom || body.scrollTop / zoom) - clientTop, left = box.left / zoom + (window.pageXOffset || docElem && docElem.scrollLeft / zoom || body.scrollLeft / zoom) - clientLeft; return { : , left: left }; }; } else { // Get offset adding all offsets var getOffset = function (el) { var = 0, left = 0; do { += el.offsetTop || 0; left += el.offsetLeft || 0; el = el.offsetParent; } while (el); return { left: left, : }; }; } / Returns left, , right and bottom properties describing the border-box, in pixels, with the -left relative to the body @param {Element} el @return {Object} Contains left, , right,bottom / function getBox(el) { var left, right, , bottom; var offset = getOffset(el); left = offset.left; = offset.; right = left + el.offsetWidth; bottom = + el.offsetHeight; return { left: left, right: right, : , bottom: bottom }; } / Helper that takes object literal and add all properties to element.style @param {Element} el @param {Object} styles / function addStyles(el, styles) { for (var name in styles) { if (styles.hasOwnProperty(name)) { el.style[name] = styles[name]; } } } / Function places an absolutely positioned element on of the specified element copying position and dimentions. @param {Element} from @param {Element} to / function copyLayout(from, to) { var box = getBox(from); addStyles(to, { position: 'absolute', left: box.left + 'px', : box. + 'px', width: from.offsetWidth + 'px', height: from.offsetHeight + 'px' }); } / Creates and returns element from html chunk Uses innerHTML to create an element / var toElement = (function () { var div = document.createElement('div'); return function (html) { div.innerHTML = html; var el = div.firstChild; return div.removeChild(el); }; })(); / Function generates unique id @return unique id / var getUID = (function () { var id = 0; return function () { return 'ValumsAjaxUpload' + id++; }; })(); / Get file name from path @param {String} file path to file @return filename / function fileFromPath(file) { return file.replace(/.(\/|\\)/, ""); } / Get file extension lowercase @param {String} file name @return file extenstion / function getExt(file) { return (-1 !== file.indexOf('.')) ? file.replace(/.[.]/, '') : ''; } function hasClass(el, name) { var re = new RegExp('\\b' + name + '\\b'); return re.test(el.className); } function addClass(el, name) { if (!hasClass(el, name)) { el.className += ' ' + name; } } function removeClass(el, name) { var re = new RegExp('\\b' + name + '\\b'); el.className = el.className.replace(re, ''); } function removeNode(el) { el.parentNode.removeChild(el); } / Easy styling and uploading @constructor @param button An element you want convert to upload button. Tested dimentions up to 500x500px @param {Object} options See defaults below. / window.AjaxUpload = function (button, options) { this._settings = { // Location of the server-side upload script action: 'upload.php', // File upload name name: 'userfile', // Additional data to send data: {}, // Submit file as soon as it's selected autoSubmit: true, // The type of data that you're expecting back from the server. // html and xml are detected automatically. // Only useful when you are using json data as a response. // Set to "json" in that case. responseType: false, // Class applied to button when mouse is hovered hoverClass: 'hover', // Class applied to button when AU is disabled disabledClass: 'disabled', // When user selects a file, useful with autoSubmit disabled // You can return false to cancel upload onChange: function (file, extension) {}, // Callback to fire before file is uploaded // You can return false to cancel upload onSubmit: function (file, extension) {}, // Fired when file upload is pleted // WARNING! DO NOT USE "FALSE" STRING AS A RESPONSE! onComplete: function (file, response) {} }; // Merge the users options with our defaults for (var i in options) { if (options.hasOwnProperty(i)) { this._settings[i] = options[i]; } } // button isn't necessary a dom element if (button.jquery) { // jQuery object was passed button = button[0]; } else if (typeof button == "string") { if (/^#./.test(button)) { // If jQuery user passes #elementId don't break it button = button.slice(1); } button = document.getElementById(button); } if (!button || button.nodeType !== 1) { throw new Error("Please make sure that you're passing a valid element"); } if (button.nodeName.toUpperCase() == 'A') { // disable link addEvent(button, 'click', function (e) { if (e && e.preventDefault) { e.preventDefault(); } else if (window.event) { window.event.returnValue = false; } }); } // DOM element this._button = button; // DOM element this._input = null; // If disabled clicking on button won't do anything this._disabled = false; // if the button was disabled before refresh if will remain // disabled in FireFox, let's fix it this.enable(); this._rerouteClicks(); }; // assigning methods to our class AjaxUpload.prototype = { setData: function (data) { this._settings.data = data; }, disable: function () { addClass(this._button, this._settings.disabledClass); this._disabled = true; var nodeName = this._button.nodeName.toUpperCase(); if (nodeName == 'INPUT' || nodeName == 'BUTTON') { this._button.setAttribute('disabled', 'disabled'); } // hide input if (this._input) { // We use visibility instead of display to fix problem with Safari 4 // The problem is that the value of input doesn't change if it // has display none when user selects a file this._input.parentNode.style.visibility = 'hidden'; } }, enable: function () { removeClass(this._button, this._settings.disabledClass); this._button.removeAttribute('disabled'); this._disabled = false; }, / Creates invisible file input that will hover above the button <div><input type='file' /></div> / _createInput: function () { var self = this; var input = document.createElement("input"); input.setAttribute('type', 'file'); input.setAttribute('name', this._settings.name); addStyles(input, { 'position': 'absolute', // in Opera only 'browse' button // is clickable and it is located at // the right side of the input 'right': 0, 'margin': 0, 'padding': 0, 'fontSize': '480px', 'cursor': 'pointer' }); var div = document.createElement("div"); addStyles(div, { 'display': 'block', 'position': 'absolute', 'overflow': 'hidden', 'margin': 0, 'padding': 0, 'opacity': 0, // Make sure browse button is in the right side // in Inter Explorer 'direction': 'ltr', //Max zIndex supported by Opera 9.0-9.2 'zIndex': 2147483583 }); // Make sure that element opacity exists. // Otherwise use IE filter if (div.style.opacity !== "0") { if (typeof(div.filters) == 'undefined') { throw new Error('Opacity not supported by the browser'); } div.style.filter = "alpha(opacity=0)"; } addEvent(input, 'change', function () { if (!input || input.value === '') { return; } // Get filename from input, required // as some browsers have path instead of it var file = fileFromPath(input.value); if (false === self._settings.onChange.call(self, file, getExt(file))) { self._clearInput(); return; } // Submit form when value is changed if (self._settings.autoSubmit) { self.submit(); } }); addEvent(input, 'mouseover', function () { addClass(self._button, self._settings.hoverClass); }); addEvent(input, 'mouseout', function () { removeClass(self._button, self._settings.hoverClass); // We use visibility instead of display to fix problem with Safari 4 // The problem is that the value of input doesn't change if it // has display none when user selects a file input.parentNode.style.visibility = 'hidden'; }); div.appendChild(input); document.body.appendChild(div); this._input = input; }, _clearInput: function () { if (!this._input) { return; } // this._input.value = ''; Doesn't work in IE6 removeNode(this._input.parentNode); this._input = null; this._createInput(); removeClass(this._button, this._settings.hoverClass); }, / Function makes sure that when user clicks upload button, the this._input is clicked instead / _rerouteClicks: function () { var self = this; // IE will later display 'aess denied' error // if you use using self._input.click() // other browsers just ignore click() addEvent(self._button, 'mouseover', function () { if (self._disabled) { return; } if (!self._input) { self._createInput(); } var div = self._input.parentNode; copyLayout(self._button, div); div.style.visibility = 'visible'; }); // mented because we now hide input on mouseleave / When the window is resized the elements can be misaligned if button position depends on window size / //addResizeEvent(function(){ // if (self._input){ // copyLayout(self._button, self._input.parentNode); // } /
上一篇:基于Vue渲染与插件的加载顺序的问题详解
下一篇:JsChart组件使用详解
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程