1. 程式人生 > >自定義上傳圖片按鈕 實現圖片的預覽和切換

自定義上傳圖片按鈕 實現圖片的預覽和切換

功能:自定義上傳按鈕的樣式,初始樣式的透明度為0,設定自己想要的樣式,同時可以實現上傳圖片的預覽。

HTML程式碼:

<form action="" name="formx" method="post" enctype="multipart/form-data
    ">
        <span>選擇檔案</span>
        <input type="file" name="userfile" onchange="handleFiles(this.files,this.nextElementSibling)" accept="image/gif,image/jpeg,image/jpg,image/png,image/svg">
        <div><p></p></div>
        <ul id="list">
        </ul>
    </form>



CSS程式碼:
* {
        margin: 0;
        padding: 0;
        list-style: none;
    }
    body {
        position: relative;
    }
    span {
        display: inline-block;
        width : 90px;
        height: 35px;
        line-height: 35px;
        border: 1px solid #ccc;
        border-radius: 5px;
        text-align: center;
    }
    input[type="file"] {
        width: 100px;
        height: 40px;
        position: absolute;
        top: 0; 
        left: 0;
        z-index: 100;
        opacity: 0;
    }
    div { 
        width: 200px;
        height: 100px;
        display: none;
        margin: 15px;
        position: relative;
     }
     div img {
         width: 100%;
         height: 100%;
     }
     div p {
         width: 200px;
         position: absolute;
         right: -230px;
         bottom: 0;
         line-height: 35px;
     }
     ul {
        width: 600px;
        height: 350px;
     }
     ul li {
        width: 170px;
        height: 100px;
        float: left;
        margin-right: 5px;
        margin-bottom: 5px;
     }
     ul li img {
        width:100%;
        height:100%;
        display: inline-block;
        margin: 0 auto;
     }
JavaScript程式碼:
<script>
    //獲取div
    var oDiv = document.getElementsByTagName('div')[0];
    var oP = document.getElementsByTagName('p')[0];

    // 建立li的個數
    var arrImg = ["img/timg (1).jpg","img/timg (2).jpg","img/timg (3).jpg","img/timg (4).jpg","img/timg.jpg"];

    var oList = document.getElementById('list');

    // 迴圈arrImg,渲染li
    for(var i=0;i<arrImg.length;i++) {
        createListImg(arrImg[i]);
    }

    // 獲取oList中的img
    var aImg = oList.getElementsByTagName('img');
    for(var i=0;i<aImg.length;i++) { 
        aImg[i].index = i;
        aImg[i].onclick = function() {
            oP.style.display = "none";
            oDiv.style.display = 'block';
            if(oDiv.innerHTML.indexOf('img') > 0
) { var oPic = oDiv.getElementsByTagName('img')[0]; oDiv.removeChild(oPic); createDivImg(arrImg[this.index]); }else { createDivImg(arrImg[this.index]); } } } console.log(aImg); // 建立oDiv中的img標籤 function createDivImg(ImgSrc) { var oImg = document.createElement('img'); oImg.src = ImgSrc; oDiv.appendChild(oImg); } // 建立oList中的img標籤 function createListImg(ImgSrc) { var oLi = document.createElement('li'); var oImg = document.createElement('img'); oImg.src = ImgSrc; oLi.appendChild(oImg); oList.appendChild(oLi); } // 上傳圖片發生改變 function handleFiles(file,obj) { var oImgSize = document.formx.userfile.files[0].size; //獲取當前點選的元素的所有同級元素的html內容 var con = obj.innerHTML; //判斷當前點選元素內是否已經存在img圖片元素,如果有則先全部清除後再新增,如果沒有就直接新增 if (con.indexOf("img") > 0) { //獲取obj中的img var pic = obj.getElementsByTagName("img")[0]; //移除該圖片 obj.removeChild(pic); //呼叫新增img圖片的函式 creatImg(); //div顯示 oDiv.style.display = "block"; oP.style.display = "block"; ImgSize(); } else { creatImg(); oDiv.style.display = "block"; oP.style.display = "block"; ImgSize(); } function creatImg() { //建立一個img元素 var img = document.createElement("img"); //設定img元素的原始檔路徑,window.URL.createObjectURL() 方法會根據傳入的引數建立一個指向該引數物件的URL. 這個URL的生命僅存在於它被建立的這個文件裡 img.src = window.URL.createObjectURL(file[0]); //window.URL.revokeObjectURL() 釋放一個通過URL.createObjectURL()建立的物件URL,在圖片被顯示出來後,我們就不再需要再次使用這個URL了,因此必須要在載入後釋放它 img.onload = function() { window.URL.revokeObjectURL(this.src); } //在當前點選的input元素的div中新增剛剛建立的img圖片元素 obj.appendChild(img); } function ImgSize() { if(oImgSize < 1024*1024) { oP.style.color = '#000'; oP.innerHTML = Math.floor(oImgSize/1000) +"KB,可以上傳"; }else { oP.style.color = 'red'; oP.innerHTML = "圖片大於1M,不可上傳"; } } } </script>