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>
posted @ 2020-06-28 18:11  吃猫的鱼℘  阅读(185)  评论(0编辑  收藏  举报
Document