plupload
是一个Web浏览器上的界面友好的文件上传模块,可显示上传进度、图像自动缩略和上传分块。可同时上传多个文件。https://github.com/moxiecode/plupload
示例 (单图上传-可剪裁和纯预览)
引用
<link rel="stylesheet" href="/node/assets/vendor/cropper/cropper.min.css">
<script src="/node/assets/vendor/plupload/plupload.full.min.js"></script>
<script src="/node/assets/vendor/cropper/cropper.min.js"></script>
<script src="/node/assets/scripts/preview.js"></script>
HTML
<!-- 头像上传 注意J_avatar selectfiles的位置和用法 -->
<div class="baie-cells">
<a class="baie-cell baie-cell_access" href="javascript:;">
<div class="baie-cell__bd">头像</div>
<div class="baie-cell__ft">
<div class="baie-avatar">
<img src="/node/assets/images/avatar_default.png" alt="" class="J_avatar">
<input type="hidden" name="avatar">
</div>
</div>
<div style="position: absolute;top: 0; left: 0; width: 100%; height: 100%" id="selectfiles"></div>
</a>
...
</div>
<!-- 进度条 -->
<script id="template-progress" type="text/xtemplate">
<div class="baie-upload-progress_wrap">
<div class="baie-upload-progress">
<div class="baie-upload-progress_bar"></div>
</div>
</div>
</script>
<!-- 预览框 -->
<script id="template-preview" type="text/xtemplate">
<div class="baie-preview">
<!--<div class="baie-preview__hd">头像裁剪</div>-->
<div class="baie-preview__bd">
<img src="" alt="" id="previewImage">
</div>
<div class="baie-preview__ft">
<a class="baie-preview_cancel" href="javascript:;">取消</a>
<a class="baie-preview_confirm" href="javascript:;">完成</a>
</div>
</div>
</script>
CSS
/* 上传图片进度条 START */
.baie-upload-progress_wrap {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1025;
background-image: linear-gradient(to right, #2c3b4e, #4a688a, #2c3b4e);
pointer-events: auto;
}
.baie-upload-progress {
position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%,-50%);
transform: translate(-50%,-50%);
width: 50%;
height: .25rem;
background: #262626;
overflow: hidden;
border-radius: .40rem;
border: .06rem solid transparent;
-webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1);
box-shadow: inset 0 1px 2px rgba(0,0,0,.1);
}
.baie-upload-progress_bar {
position: relative;
background-color: #5bc0de;
background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
background-image: linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
-webkit-background-size: .80rem .80rem;
background-size: .80rem .80rem;
border-radius: .40rem;
float: left;
height: 100%;
line-height: .40rem;
font-size: .24rem;
color: #fff;
text-align: center;
-webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);
box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);
/*-webkit-transition: width .6s ease;*/
/*transition: width .6s ease;*/
animation: reverse progress-bar-stripes 0.40s linear infinite, animate-positive 2s;
}
@keyframes progress-bar-stripes {
0% {
background-position: .80rem 0;
}
100% {
background-position: 0 0;
}
}
@-webkit-keyframes progress-bar-stripes {
0% {
background-position: .80rem 0;
}
100% {
background-position: 0 0;
}
}
@-webkit-keyframes animate-positive{
0% { width: 0; }
}
@keyframes animate-positive{
0% { width: 0; }
}
/* 上传图片进度条 END */
/* 预览框 START */
.baie-preview {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1023;
background-color: #000;
pointer-events: auto;
}
.baie-preview__hd {
padding: .18rem 0;
text-align: center;
font-size: .32rem;
color: #fff;
}
.baie-preview__bd {
position: absolute;
left: .30rem;
right: .30rem;
top: .80rem;
bottom: .80rem;
text-align: center;
overflow: hidden;
}
.baie-preview__bd>img {
position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%,-50%);
transform: translate(-50%,-50%);
max-width: 100%;
max-height: 100%;
}
.baie-preview__ft {
position: absolute;
right: 0;
bottom: 0;
left: 0;
z-index: 1025;
height: .88rem;
line-height: .88rem;
background-color: #131313;
text-align: center;
font-size: .30rem;
font-weight: bold;
}
.baie-preview_cancel,.baie-preview_confirm {
height: 100%;
padding: 0 .56rem;
color: #fff;
}
.baie-preview_cancel {
float: left;
}
.baie-preview_confirm {
float: right;
}
/* 预览框 END */
JS
/* 单图上传 */
singlePhotoUpload({
target: '.J_avatar', //目标图片
selectBtn: 'selectfiles' , //上传按钮ID
maxFileSize: '50mb', //文件大小
isCrop: true, //是否裁剪
callback: function(imgUrl){ //确认回调
Baie.Fecth({
type: 'POST',
url: Baie.API.Member.user.coverEdit,
data: {imgUrl: imgUrl}
})
}
});