js自定義input文件上傳樣式
文件上傳是我們經(jīng)常會(huì)用到的功能,但是原生的input樣式太丑了,能不能自定義一個(gè)input文件上傳樣式呢?
我這里寫了兩種方法,form表單提交跟ajax異步提交都沒有問題,自動(dòng)上傳或者點(diǎn)擊上傳按鈕上傳也都沒問題
先看效果:



代碼貼出來:
方法1
<!--
方法1:
div : 設(shè)置寬高、overflow:hidden;超出的部分被隱藏
input : 設(shè)置層級(jí)z-index = 1;設(shè)置透明度opacity:0;設(shè)置相對(duì)定位position:relative;使兩個(gè)元素重疊
i : 設(shè)置層級(jí)z-index = 0;(要比input小)設(shè)置相對(duì)定位position:relative;使兩個(gè)元素重疊
利用div框出大小,input在i上面但透明度為0,當(dāng)我們點(diǎn)擊i時(shí)其實(shí)是點(diǎn)擊到了input但視覺上我們只看到了i
-->
<h3>方法1:</h3>
<form action="upload" method="post" enctype="multipart/form-data">
<!-- 輔助div,框出顯示內(nèi)容 -->
<div style="width: 20px;height: 20px;overflow:hidden;">
<!-- 實(shí)際的選擇文件input -->
<input style="position:relative;z-index :1;opacity:0" onchange="change()" id="file" type="file"
name="file"/>
<!-- 可視圖標(biāo) -->
<i class="glyphicon glyphicon-open" style="position:relative;top:-22px;z-index :0;font-size: 20px;"></i>
</div>
<!-- 文件名 -->
<br/><span id="fileName"></span>
<!-- 表單提交按鈕 -->
<br/><input id="but_submit" type="submit" value="上傳"/>
</form>
<script>
function change() {
//回顯文件名
$("#fileName").text($("#file").val());
}
</script>
方法2
<!--
方法2:
input : 設(shè)置層級(jí)display: none; 直接隱藏
i : onclick="document.getElementById('file2').click();" 圖標(biāo)的click觸發(fā)input的click
直接隱藏input,設(shè)置圖標(biāo)的click觸發(fā)input的click,從而達(dá)到我們想要的效果
-->
<h3>方法2:</h3>
<form id="uploadForm">
<!-- 實(shí)際的選擇文件input -->
<input style="display: none;" onchange="change2()" id="file2" type="file" name="file"/>
<!-- 可視圖標(biāo) -->
<i class="glyphicon glyphicon-open" style="font-size: 20px;"
onclick="document.getElementById('file2').click();"></i>
<!-- 文件名 -->
<br/><span id="fileName2"></span>
</form>
<script>
//自動(dòng)上傳
function change2() {
//回顯文件名
$("#fileName2").text($("#file2").val());
//執(zhí)行上傳
var form = new FormData(document.getElementById("uploadForm"));
$.ajax({
url: ctx + "/rack/upload",
type: "post",
data: form,
processData: false,
contentType: false,
success: function (data) {
console.log(data);
},
error: function (e) {
console.log(e);
}
});
}
</script>
controller
@PostMapping("upload")
public ResultModel<Boolean> upload(MultipartFile file) {
//文件名
System.out.println(file.getOriginalFilename());
return ResultModel.of(true);
}
樣式還是丑了一點(diǎn),但這些都不重要,關(guān)鍵是掌握了方法再找個(gè)UI小姐姐來幫忙調(diào)試,就可以做出任何想要的UI效果啦!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
獲取元素距離瀏覽器周邊的位置的方法getBoundingClientRect
本文為大家介紹下如何使用getBoundingClientRect()方法獲取元素距離瀏覽器周邊的位置,有類似問題的朋友可以參考下哈,希望對(duì)你學(xué)習(xí)js有所幫助2013-04-04
javascript動(dòng)態(tài)判斷html元素并執(zhí)行不同的操作
在javascript中對(duì)觸發(fā)事件的元素進(jìn)行判斷,然后執(zhí)行不同的操作,下面是具體的實(shí)現(xiàn),需要的朋友可以學(xué)習(xí)下2014-06-06
javascript 三種方法實(shí)現(xiàn)獲得和設(shè)置以及移除元素屬性
獲得和設(shè)置以及移除元素屬性在操作dom的過程中會(huì)經(jīng)常遇到吧,為了提高工作的效率本文整理了一些快捷操作方法和大家一起分享,感興趣的朋友可以參考下哈2013-03-03
three.js著色器材質(zhì)的內(nèi)置變量示例詳解
這篇文章主要給大家介紹了關(guān)于three.js著色器材質(zhì)內(nèi)置變量的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用three.js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08

