1. 程式人生 > 實用技巧 >JS實現預覽上傳的圖片

JS實現預覽上傳的圖片

       也是這學期的WEB前端程式設計課,做答辯專案的時候用上的一個功能。之前是組內的小夥伴寫的,用了兩個函式實現,而這兩個函式的內容基本一致。按照程式設計的思維,應該把函式改成可複用的,於是就有了修改後的版本。改進的原理我有寫在改進後的註釋裡,不過為了方便閱讀,這裡也寫一下。
       修改原理其實有點歪門邪道:DisplayPic(this)中的this是指input控制元件本身,於是我把img的id改成跟input的name相同,這樣一來就可以通過獲取input的name屬性來得到img標籤的id,也就可以修改對應img的屬性。

修改前

<html lang="en">
<head>
    <meta charset="utf-8">
    <title>JS display picture</title>
</head>
<body>
<div>
    <form action="#" method="post" enctype="multipart/form-data">
        <p>圖片1</p>
        <input id="file1" name="file1" type="file" value="選擇圖片" onchange="DisplayPic1(this)">
        <img id="showpic1" src="" alt="" style="display: none; max-width: 600px; max-height: 600px"/><br>
        <p>圖片2</p>
        <input id="file2" name="file" type="file" value="選擇圖片" onchange="DisplayPic2(this)">
        <img id="showpic2" src="" alt="" style="display: none; max-width: 600px; max-height: 600px"/><br>
        <input type="submit" value="提交">
        <!-- 指令碼作用:選擇圖片之後,顯示在頁面上-->
        <script>
            var pic1 = '';
            function DisplayPic1(file) {
                if (!file.files || !file.files[0]) {
                    return;
                }
                var reader = new FileReader();
                reader.onload = function (evt) {
                    document.getElementById('showpic1').style.display = 'block';
                    document.getElementById('showpic1').src = evt.target.result;
                    pic1 = evt.target.result;
                    console.log(pic1)
                }
                reader.readAsDataURL(file.files[0]);
            }

            var pic2 = '';
            function DisplayPic2(file) {
                if (!file.files || !file.files[0]) {
                    return;
                }
                var reader = new FileReader();
                reader.onload = function (evt) {
                    document.getElementById('showpic2').style.display = 'block';
                    document.getElementById('showpic2').src = evt.target.result;
                    pic2 = evt.target.result;
                    console.log(pic2)
                }
                reader.readAsDataURL(file.files[0]);
            }
        </script>
    </form>
</div>
</body>
</html>

修改後

<html lang="en">
<head>
    <meta charset="utf-8">
    <title>JS display picture</title>
</head>
<body>
<div>
    <form action="#" method="post" enctype="multipart/form-data">
        <p>圖片1</p>
        <input id="input_pic1" name="pic1" type="file" value="選擇圖片" onchange="new DisplayPic(this)">
        <img id="pic1" src="" alt="" style="display: none; max-width: 600px; max-height: 600px"/><br>
        <p>圖片2</p>
        <input id="input_pic2" name="pic2" type="file" value="選擇圖片" onchange="new DisplayPic(this)">
        <img id="pic2" src="" alt="" style="display: none; max-width: 600px; max-height: 600px"/><br>
        <input type="submit" onclick="" value="提交">
        <!-- 指令碼作用:選擇圖片之後,顯示在頁面上-->
        <script>
            // 改進原理其實有點歪門邪道:
            // DisplayPic(this)中的this是指input控制元件本身,於是我把img的id改成跟input的name相同
            // 這樣一來就可以通過獲取input的name屬性來得到img標籤的id,也就可以修改對應img的屬性
            var pic = '';
            function DisplayPic(obj) {
                if (!obj.files || !obj.files[0]) {
                    return;
                }
                var reader = new FileReader();
                var name = obj.name;
                reader.onload = function (evt) {
                    document.getElementById(name).style.display = 'block';
                    document.getElementById(name).src = evt.target.result;
                    pic = evt.target.result;
                    console.log(pic)
                }
                reader.readAsDataURL(obj.files[0]);
            }
        </script>
    </form>
</div>
</body>
</html>