前端修炼之图片操作---添加

本文介绍了如何在前端实现图片上传功能,包括隐藏input原始样式,通过label元素触发点击事件,以及限制最多上传8张图片。html和js代码示例提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现结果图:
这里写图片描述

实现原理:该功能关键难点就是将input原始样式隐藏,将input的点击事件牵引到我们所想的地方或是图片上。我将每个input包含在他们相应的label元素中,利用for属性使他们相关联,这样label元素上就有了input的点击事件。然后将input的位子偏移到十万八千里,这样它就自然而然的隐藏了。

注:该代码可扩展,照片最大可上传数量可更改,但前提是有更大的放置空间,我将它限制最多能上传8张(因为8张刚刚好放下,且观赏性较佳)

html代码实现:

<div class="addition-part-main">
    <div class="part-cont" id="content">
        <label for="add1" id="num1">
            <img id="show1" src="" alt="">
            <div class="dele" id="dele1" style="display: none">
                <img src="../imgs/dele.png">
            </div>
            <input type="file" name="pic1" id="add1">
        </label>
    </div>
    <div class="part-btn">
        <button id="sure">确认</button>
        <button id="cancel">取消</button>
    </div>
</div>

照旧,css样式就不贴了,将每个元素位置一一放置清楚就好了。

js代码实现:

var cnt = 1, flag = 0, sum = 1;  //sum为添加图片总数

$('#addPic').on('click', function() {
    $('#addition').toggle();
});

$('#cancel').on('click', function() {
    $('#addition').hide();
});

$('#sure').on('click', function() {
    //确认后操作
    $('#addition').hide();
});

//每添加完出现一个新的待添加框(若达到最大限制,则不出现)
function addNext() {
    if(nowId < cnt || sum == 8) {  //总数限定,不得多于8张
        return ;
    }
    cnt++;
    sum++;
    var area = document.getElementById('content');
    var str = '<label for="add' + cnt + '" id="num' + cnt + '">' + 
     '<img id="show' + cnt + '" src="" alt=""><div class="dele" id="dele' + cnt + '" style="display: none">' +
    '<img src="../imgs/dele.png"></div><input type="file" name="pic' + cnt + '" id="add' + cnt + '"></label>';
    area.innerHTML += str;
    addMethod();
}

//将上传图片展示出来
function showPic(num) {
    var pic = new FileReader();
    var str = 'add' + num;
    var file = document.getElementById(str).files[0];
    pic.readAsDataURL(file);
    pic.onload = function(e) {
        tempic = this.result;
        str = 'show' + num;
        document.getElementById(str).src = this.result;
        document.getElementById('dele'+num).style.display = "";
        addNext();
    };
}

//标明当前所操作的图片num
function setNum(num) {
    nowId = num;
    document.getElementById('add'+num).onchange = function() {
        showPic(num);
    };
}

//删除该图片
function delePic(item) {
    flag = 1;
    var area = document.getElementById('num'+item);
    area.setAttribute('for', '-1');
    area.style.display = "none";
    sum--;
    if(sum == 7) {    //总数限定,少于7可再添加
        addNext();
    }
}

//设置每张图片框的点击事件和删除事件
function addMethod() {
    for(var i = 1; i <= cnt; i ++) {
        let item = i;
        document.getElementById('num'+item).onclick = function() {
            if(flag == 0) {
                setNum(item); 
            } else {
                flag = 0;
                return ;
            }
        };
        document.getElementById('dele'+item).onclick = function(event) {
            delePic(item);
        };
    }
}

addMethod();

差不多就是这样了,请多多指教^ ^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值