input file自定义样式-图片类型

  之前有介绍过关于把input[type='file']的输入变为类似于一个button的上传,现在沿袭其思路同样的制作一个自定义图片的上传类型,并能够实时显示已经上传的图片。其原理简单为:采用绝对定位在顶层放一个<input type='file' />的标签并把其透明度设置为0,然后在同样的位置采取绝对定位放置一个关闭按钮(其z-index值得比input大),然后在同样的位置采取绝对定位放置一个自定义的上传图片,最后放一个<img>标签来获取已上传的图片路径并回显到页面上。html里的结构为:

然后close.png和add.png都可以随便自己找张图片,我也是随便找的所以比较丑。为了看起来方便把css,js全部写在页面里,其页面代码如下:

<!doctype html>
<html>
    <head>
        <style>
            *
            {
                margin: 0;
                padding: 0;
            }
            /*上传input*/
            .myUpload
            {
                position: absolute;
                width: 130px;
                height: 100px;
                opacity: 0;
                z-index: 100;
            }
            /*关闭按钮*/
            .close
            {
                position: absolute;
                width: 20px;
                height: 20px;
                left: 110px;
                z-index: 200;
                cursor: pointer;
            }
            /*隐藏*/
            .hide
            {
                display: none;
            }
            /*上传的图片*/
            .add
            {
                position: absolute;
                width: 130px;
                height: 100px;
            }
            /*显示上传的图片*/
            .show
            {
                position: absolute;
                width: 130px;
                height: 100px;
            }
        </style>
        <script src="../jquery-3.1.0.min.js"></script>
        <title>pic类型的file自定义上传</title>
    </head>
    <body>
        <input type="file" class="myUpload" />
        <img src="../images/close.jpg" class="close hide"/>
        <img src="../images/add.png" class="add "/>
        <img class="show hide"/>
    </body>
</html>
<script>
    $(document).ready(function()
    {
        //点击上传时实时显示图片
        $(".myUpload").change(function()
        {
            var src=getObjectURL(this.files[0]);//获取上传文件的路径
            $(".close").removeClass('hide');
            $(".add").addClass('hide');
            $(".show").removeClass('hide');
            $(".show").attr('src',src);//把路径赋值给img标签
        });

        //点击关闭按钮时恢复初始状态
        $(".close").click(function()
        {
            $(".close").addClass('hide');
            $(".add").removeClass('hide');
            $(".show").addClass('hide');
        });
    });

    //获取上传文件的url
    function getObjectURL(file)
    {
        var url = null;
        if (window.createObjectURL != undefined)
        {
            url = window.createObjectURL(file);
        }
        else if (window.URL != undefined)
        {
            url = window.URL.createObjectURL(file);
        }
        else if (window.webkitURL != undefined)
        {
            url = window.webkitURL.createObjectURL(file);
        }
        return url;
    }
</script>

代码实现的效果为:初始状态-

点击后弹出选择文件框,并选择图片后显示该图片以及一个关闭按钮:

点击关闭按钮后又回复到初始状态:

总体来说input并不改变,只是在其下面多加了几个标签以及部分js代码来实现对应的效果,但是这样的图片上传比之前的会美化很多,可以放在一个文件里专门引用。

 

原文地址:https://www.cnblogs.com/martianShu/p/6031519.html