这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战css
这是一个关于 input file 文件控件的优化系列,感兴趣的朋友能够关注我。对于文章有任何问题欢迎你们指正、交流。html
操做栏事件:图片放大预览,下载图片,删除图片markdown
第一步:在 parseDom
方法里添加操做栏的 Dom 结构post
+ "<span class='upload__item-actions'>"
+ "<span class='upload__icon'><i class='bi bi-zoom-in'></i></span>"
+ "<span class='upload__icon'><i class='bi bi-download'></i></span>"
+ "<span class='upload__icon'><i class='bi bi-trash'></i></span>"
+ "</span>"
复制代码
第二步:添加样式优化
.upload-list--picture-card .upload__item-actions {
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
cursor: default;
text-align: center;
padding: 35px 0;
color: #fff;
opacity: 0;
font-size: 20px;
background-color: rgba(0,0,0,.5);
transition: opacity .3s;
}
.upload-list--picture-card .upload__item-actions span {
display: none;
cursor: pointer;
margin: 0 7.5px;
}
.upload-list--picture-card .upload__item-actions:hover {
opacity: 1;
}
.upload-list--picture-card .upload__item-actions:hover span {
display: inline-block;
}
复制代码
第三步:给每一个图标添加操做事件ui
注意:三个事件都要用到事件代理,防止后面追加图片时事件无效this
$(".upload-list--picture-card").on('click', '.icon-preview', function() { // 图片预览
});
$(".upload-list--picture-card").on('click', '.icon-download', function() { // 图片下载
});
$(".upload-list--picture-card").on('click', '.icon-trash', function() { // 图片删除
});
复制代码
思路:一、获取图标元素的父级元素的上一个同胞元素的
src
属性值,二、把获取到的src
属性值赋值到要预览的标签里,三、显示模态框url
<div class="mask">
<div class="mask-content"></div>
</div>
复制代码
/* mask */
.mask {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, .5);
}
.mask .mask-content {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 600px;
height: 400px;
background-repeat: no-repeat;
background-size: 100% 100%;
background-clip: border-box;
border-radius: 8px;
overflow: hidden;
}
复制代码
$(".upload-list--picture-card").on('click', '.icon-preview', function() {
var preSrc = $(this).parent().prev().attr("src");
$(".mask .mask-content").attr("style", "background-image: url(" + preSrc + ")");
$(".mask").fadeIn("fast");
});
复制代码
最终效果spa
思路:建立
a
标签,把src
属性值赋值给a
标签代理
$(".upload-list--picture-card").on('click', '.icon-download', function() {
var a = document.createElement('a');
var imgUrl = $(this).parent().prev().attr("src");
a.href = imgUrl
a.setAttribute('download', imgUrl);
a.click();
});
复制代码
思路:把
uploadFile
设置成全局变量,把 files 存到 uploadFile 里。 删除相应序号的图片,移除相应序号的元素节点
$(".upload-list--picture-card").on('click', '.icon-trash', function() {
var $parent = $(this).parent().parent();
var curIndex = $parent.index();
console.log(curIndex , uploadFile)
uploadFile.splice(curIndex, 1);
$parent.fadeOut(500, function () {
$parent.remove()
});
$("input[type='file']").value = "";
});
复制代码
三个操做事件已经完成了哈,期待下一遍,猜猜是什么
欢迎关注个人公众号:A纲 Coder,得到平常干货推送。最后再次感谢您的阅读,我是程序猿憨憨