效果
css
.cover {
width: 200px;
margin-bottom: 15px;
}
.img-wrap {
height: 100px;
width: 200px;
border: 2px dotted #d1d5da;
margin-bottom: 8px;
display: flex;
align-items: center;
justify-content: center;
}
.img-wrap img {
max-height: 100%;
max-width: 100%;
object-fit: cover;
}
.img-action {
display: none;
align-items: center;
justify-content: space-around;
}
.cover:hover > .img-action {
display: flex;
}
html
<div class="form-group">
<label>文章封面</label>
<div>
<div class="cover">
<div class="img-wrap" data-origin-src="">
</div>
<div class="img-action">
<button type="button" class="btn btn-default upload-btn" title="上传">
<i class="lu icon-shangchuan"></i>
</button>
<button type="button" class="btn btn-default del-btn" title="删除">
<i class="lu icon-shanchu"></i>
</button>
<button type="button" class="btn btn-default restore-btn" title="复原">
<i class="lu icon-huifu"></i>
</button>
</div>
</div>
<span class="cover-msg">优质的封面有利于推荐,格式支持png、jpg、jpeg</span>
<input type="text" name="pic" class="form-control pic"
>
</div>
</div>
js
function p1(src) {
return new Promise(function (resolve, reject) {
//获取原图src
if (src === undefined) {
reject("请先上传封面~")
} else {
let originSrc = $('.cover .img-wrap').attr('data-origin-src');
if (src === originSrc) {
//这里代表是原来的那张图不需要异步删除图片,直接删除dom即可
$('.cover .img-wrap img').remove();
$(".pic").val("")
resolve("删除成功")
} else {
//异步删除图片
$.ajax({
url: "<{url('/article/cover')}>",
method: 'delete',
data: {
"file": src
},
dataType: "json",
success: (res) => {
if (res.code === 200) {
resolve("异步删除成功")
$('.cover .img-wrap img').remove();
$(".pic").val("")
} else {
reject('删除失败')
}
}
})
}
}
});
}
//删除按钮操作
$('.cover .del-btn').on('click', function () {
//获取src地址
let src = $('.cover .img-wrap > img').attr('src');
p1(src).catch(function (val) {
Toast.fire({
icon: "error",
title: val
})
})
})
$('.cover .restore-btn').on('click', function () {
//获取origin地址
let originSrc = $.trim($('.cover .img-wrap').attr('data-origin-src'));
if (originSrc === '') {
Toast.fire({
icon: "error",
title: '当前无恢复封面~'
})
} else {
//删除原来的图片
//获取图片地址
let src = $('.cover .img-wrap > img').attr('src');
if (src != undefined) {//有图片就先删除原来上传的图片
p1(src).then(function (val) {
$('.cover .img-wrap').html(`<img src="${originSrc}">`)
//给隐藏域赋值
$(".pic").val(originSrc)
}).catch(function (val) {
Toast.fire({
icon: "error",
title: val
})
})
} else {//没有就直接还原
$('.cover .img-wrap').html(`<img src="${originSrc}">`)
//给隐藏域赋值
$(".pic").val(originSrc)
}
}
})
//上传图片操作按钮
$('.cover .upload-btn').on('click', function () {
let input = document.createElement("input")
input.type = "file"
input.accept = ".png,.jpg,.jpeg"
input.click()
validPic.init2(input)
//不是指定文件
input.addEventListener("error", function () {
Toast.fire({
icon: "error",
title: "只支持png、jpg、 jpeg格式图片"
})
}, false)
//是指定文件回显操作
input.addEventListener("success", function (e) {
//获取图片地址
let src = $('.cover .img-wrap > img').attr('src');
if (src === undefined) {//没有图片直接上传
imgPost(input);
} else {//有图片先删除原来的图片
p1(src).then(function (val) {
imgPost(input);
}).catch(function (val) {
Toast.fire({
icon: "error",
title: val
})
})
}
}, false)
});
function imgPost(input) {
//创建一个 formdata对象
let formData = new FormData()
//file对象
let file = input.files[0]
formData.append("file", file)
$.ajax({
url: "<{url('/article/cover')}>",
type: "POST",
data: formData,
processData: false,
contentType: false,
dataType: "json",
success: function (res) {
if (res.code === 200) {
$('.cover .img-wrap').html(`<img src="${res.data.url}">`)
//给隐藏域赋值
$(".pic").val(res.data.url)
} else {
Toast.fire({
icon: "error",
title: res.msg
})
}
}
})
}