html带图片的进度条,原生javascript上传图片带进度条【实例分享】
javascript代码:
;
(function(w) {
var error = "上传控件不支持您的浏览器!";
// 构造函数
function UploadImg(option) {
$u = this;
$u.option = option;
$u.init($u.option);
}
UploadImg.prototype = {
//初始化
init: function() {
var $u = this;
//template
$u.addupLoader =
'
' +
'' +
'' +
'' +
'
' +
'' +
'
' +
'
'
'
'' +
'
' +
'
';
$u.wrap = $($u.option.el);
$u._creatFrom();
$u.eventChange($u.wrap.childNodes);
},
//生成form模板
_creatFrom: function() {
this.wrap.innerHTML = $u.addupLoader;
},
_removeFrom: function() {
this.wrap.innerHTML = "";
},
//事件触发
/*
*对于onchange事件若值没有发生改变的话
*此事件就会失效所以在这里打算将DOM移除
*直接初始化所有方法和事件
*
*/
/**
*@method (eventChange)
*@param {childArr} 参数为数组集合
*/
eventChange: function(childArr) {
var $u = this;
//提交form表单
addEvent(childArr[0], 'change', function(e) {
//保存当前this对象
var thisForm = this;
if (!thisForm['file'].files.length == 0) {
$u._removeFrom();
$u.init();
testWidthHeight(e,function(iSsize){
if(!iSsize){
alert("上传的尺寸为:长为"+$u.option.Max_Width +"宽为"+$u.option.Max_Height);
return false;
}
childArr[2].setAttribute('src', "");
childArr[3].style.display = 'block';
$u.wrap.style.background = "#f3f3f3";
//发送post请求
$u.ajaxPost(thisForm, $u.option.url, function(result) {
//post成功
var data = JSON.parse(result);
$u.maskEvent(childArr);
childArr[2].setAttribute('src', data.url);
childArr[3].style.display = 'none';
}, function(error) {
//post 失败
console.log(error);
}, childArr);
});
} else {
alert("上传个数不能为0");
return false;
}
});
/**
*@method (testWidthHeight) 获取上传尺寸大小
*@param {e} 事件对象
*@param {callback} 回调函数
*/
function testWidthHeight(e,callback) {
var isSize;
var forms = e.target;
var reader = new FileReader();
reader.onload = function () {
var dataURL = reader.result;
var image = new Image();
image.οnlοad=function(){
var width = image.width;
var height = image.height;
isSize = width <= $u.option.Max_Width && height <= $u.option.Max_Height;
if(typeof callback == 'function') {
callback(isSize);
}
};
image.src = dataURL;
};
reader.readAsDataURL(forms.files[0]);
return isSize;
}
},
//遮罩层上的是事件
maskEvent: function(childArr) {
$u = this;
var addBtn = childArr[4].childNodes[1].childNodes[0];
var deleBtn = childArr[4].childNodes[1].childNodes[1];
//当鼠标滑过
addEvent($u.wrap, "mouseover", function() {
if (childArr[2].getAttribute('src')) {
childArr[4].style.top = 0;
}
});
//当鼠标离开
addEvent($u.wrap, "mouseout", function() {
childArr[4].style.top = -300 + 'px';
});
//修改
addEvent(addBtn, 'click', function() {
childArr[0][0].click();
});
//删除
addEvent(deleBtn, 'click', function() {
$u.wrap.style.backgroundImage = "url(add-bg-upload1.jpg)";
childArr[2].setAttribute('src', "");
});
},
/**
*@method (ajaxPost) 上传方法
*@param {fm} 当前form表单
*@param {url} url地址
*@param {fnSuc} 成功回调
*@param {fnErr} 失败回调
*@param {childArr} 节点集合
*/
ajaxPost: function(fm, url, fnSuc, fnErr, childArr) {
var $u = this;
//进度条
var proGress = childArr[3].childNodes[0];
if (window.XMLHttpRequest) {
var xhr = new XMLHttpRequest();
} else {
var xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
//data数据
var data = new FormData(fm);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
//成功回调
if (xhr.status == 200) {
fnSuc(xhr.responseText);
} else {
if (fnErr) {
fnErr(xhr.status);
}
}
}
};
//监听上传进度
addEvent(xhr.upload, "progress", uploadProgress);
//post后台
xhr.open('post', url);
//发送数据
xhr.send(data);
//上传进度
function uploadProgress(evt) {
var loaded = evt.loaded; //已上传的文件大小
var allTotal = evt.total; //总大小
var per = Math.floor((loaded / allTotal) * 100) + '%';
proGress.innerHTML = per;
proGress.style.width = per;
}
},
};
//获取元素
function $(selectors) {
return document.querySelector(selectors);
}
//事件监听
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');
}
}
//判断浏览器是否存在file属性
if (window.File && window.FileList) {
window.UploadImg = UploadImg;
} else {
alert(error);
return false;
}
})(window);
PHP代码:
$file=$_FILES['file'];
foreach ($file as $key => $value) {
$$key=$value;
}
$path='upload/'.time().strtolower(strstr($name, '.')); //修改上传文件的名称,strstr($name, '.')是获取后缀名
move_uploaded_file($tmp_name,$path);
$path=strstr($path,$path[0]); //图片的存储地址
$arr=array(
"url"=>$path
);
$json=json_encode($arr); //json
echo $json;
?>
CSS代码:
.couser-img-upload {
width:280px;
height:160px;
cursor:pointer;
position: relative;
overflow: hidden;
background:url(add-bg-upload1.jpg);
}
.couser-img-upload:hover{
border: 2px solid #00caac;
background:url(add-bg-upload.jpg);
}
.kechenFengMian {
display:none;
}
.upload-progress{
display: none;
width: 90%;
position: absolute;
overflow: hidden;
border:1px solid #00caac;
border-radius: 8px;
top: 50%;
margin-top: -7.5px;
left: 50%;
padding: 2px;
margin-left:-46%;
font-size: 12px;
}
.upload-progress .upload-son{
display: inline-block;
background: #00caac;
border-radius: 8px;
text-align: center;
color: #fff;
}
.mask-Div{
position: absolute;
top: -300px;
width: 100%;
height: 100%;
}
.mask-Div .mask-show{
position: absolute;
width: 100%;
height: 100%;
background: #000;
opacity: 0.5;
}
.mask-Div .button-div{
width: 140px;
height: 50px;
position: absolute;
left: 50%;
top: 50%;
margin-left: -70px;
margin-top: -25px;
}
.mask-Div .button-div span{
display: block;
width: 50px;
height: 50px;
border-radius: 50%;
overflow: hidden;
background:url(tianjiashanchu.png) no-repeat;
}
.mask-Div .button-div span.upload-btn{
background-position: 0px 0px;
float: left;
}
.mask-Div .button-div span.deleteImg-btn{
background:url(tianjiashanchu.png) no-repeat;
background-position: -50px 0px ;
float: right;
}
.mask-Div .button-div span.upload-btn:hover{
background-position: 0px -50px ;
}
.mask-Div .button-div span.deleteImg-btn:hover{
background-position: -50px -50px ;
}
Html代码:
new UploadImg({
el:".couser-img-upload",
url:'./upload.php',
Max_Width:280,
Max_Height:160
});
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!
html带图片的进度条,原生javascript上传图片带进度条【实例分享】相关推荐
- 非常不错的一款html5【404页面】,不含js脚本可以左右摆动,原生JavaScript实现日历功能代码实例(无引用Jq)...
这篇文章主要介绍了原生JavaScript实现日历功能代码实例(无引用Jq),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 成品显示,可左右切换月份 ...
- animate用法 js原生_用 原生Javascript 创建带动画的固顶导航菜单
当我们在网页中加入一个导航菜单的时候,需要考虑很多因素.如何确定它的位置?如何定义样式?还需要保证它具有良好的响应性.又或者你想为它添加一些炫酷的动画.这时你可能会对 jQuery 感兴趣,因为它会帮 ...
- 原生javascript制作svg进度球
在SVG发展到今天,已经在互联网上进行了各式各样的运用,当然也就包括进度条以及进度球的制作,制作这个类型的动画交互该如何制作呢?接下来就带大家来揭秘吧! 1. 兴趣引导 > 最终效果 - SV ...
- 图片五子棋PHP接口,原生JS+Canvas实现五子棋游戏实例
一.功能模块 先看下现在做完的效果: 主要功能模块为: 1.人机对战功能 2.悔棋功能 3.撤销悔棋功能 二.代码详解 2.1 人机对战功能实现 从效果图可以看到,棋盘的横竖可以放的位置为15*15, ...
- 图片轮播php代码下载,jQuery带进度条滚动图片轮播代码
jQuery带进度条滚动图片轮播代码 jQuery带进度条滚动图片轮播代码是一款带左右箭头按钮控制图片滚动轮播,标题和进度条显示效果. $(document).ready(function(e) { ...
- html原生js进度条圆形,原生 JavaScript 实现进度条
原生JavaScript特效 JavaScript实现进度 进度条实现介绍 使用JavaScript实现进度条功能. 原理:通过鼠标移动事件,获取鼠标移动的距离. 步骤: (1)html 中 div ...
- LtRecyclerView:自带上拉下拉,能增加头条目和尾条目的RecyclerView
LtRecyclerView:自带上拉下拉,能增加头条目和尾条目的RecyclerView 点击查看2.x版本,功能更强大 主要功能: 自带上拉加载和下拉刷新 可以添加100条头条目和尾条目(其实是可 ...
- [译] 原生 JavaScript 值得学习吗?答案是肯定的
原文地址:Is Vanilla JavaScript worth learning? Absolutely. 原文作者:David Kopal 译文出自:掘金翻译计划 本文永久链接:github.co ...
- 你可能不需要 jQuery!使用原生 JavaScript 进行开发
很多的 JavaScript 开发人员,包括我在内,都很喜欢 jQuery.因为它的简单,因为它有很多丰富的插件可供使用,和其它优秀的工具一样,jQuery 让我们开发人员能够更轻松的开发网站和 We ...
最新文章
- 微信突然更新,新增了这些功能...
- rman备份恢复总结
- IOS6+ 下,使用position:sticky实现粘性布局
- opengl双三次bezier曲面_试驾艾瑞泽5 PLUS:双外观设计,搭L2级全速域驾驶辅助,月销要破万?...
- Oracle使用ODBC连接配置
- 给Java程序员的一些面试建议,大厂面试题汇总
- 寒假训练营第四次作业
- 调用 oauth2_奥利给,再也不怕面试官问我OAuth 2.0授权了
- keras + tensorflow —— 文本处理
- 2017-2018-1 20179202《Linux内核原理与分析》第四周作业
- 计算机c语言程序设计题,《计算机C语言程序设计》模拟题集.doc
- javaMail简介(一)
- html原生的日期选择器,原生JS实现日期选择
- 【数据结构】银行排队取票机的原理是什么?详解队列
- KVM虚拟化进阶--KVM设备高级管理
- Aho-Corasick(AC自动机)
- 用html和css实现字体发光效果
- 网络安全课程笔记(1)
- 2016.3.16__CSS3_选择器_边框_背景_蒙版mask__第九天
- Mindjet.MindManager.v9.0“参数错误”解决办法
热门文章
- Centos7 yum install chrome
- 2018前端学习总结
- 最常用Python开源框架有哪些?
- 朴素贝叶斯与贝叶斯网络
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(四)example代码解析...
- Xcode里-ObjC, -all_load, -force_load
- css 控制div高度自适应浏览器的高度
- [转]ASP.NET实用技巧
- Flutter Button 图文分析、效果浏览
- IP,IP地址,mac地址