lujiahao

效果

image

css

.cover {
    width: 200px;
    margin-bottom: 15px;
}

.img-wrap {
    height: 100px;
    width: 200px;
    border: 2px dotted #d1d5da;
    margin-bottom: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
}

.img-wrap img {
    max-height: 100%;
    max-width: 100%;
    object-fit: cover;
}

.img-action {
    display: none;
    align-items: center;
    justify-content: space-around;
}

.cover:hover > .img-action {
    display: flex;
}

html

                        <div class="form-group">
                            <label>文章封面</label>
                            <div>
                                <div class="cover">
                                    <div class="img-wrap" data-origin-src="">
                                    </div>
                                    <div class="img-action">
                                        <button type="button" class="btn btn-default upload-btn" title="上传">
                                            <i class="lu icon-shangchuan"></i>
                                        </button>
                                        <button type="button" class="btn btn-default del-btn" title="删除">
                                            <i class="lu icon-shanchu"></i>
                                        </button>
                                        <button type="button" class="btn btn-default restore-btn" title="复原">
                                            <i class="lu icon-huifu"></i>
                                        </button>
                                    </div>
                                </div>
                                <span class="cover-msg">优质的封面有利于推荐,格式支持png、jpg、jpeg</span>
                                <input type="text" name="pic" class="form-control pic"
                                >
                            </div>
                        </div>

js

            function p1(src) {
                return new Promise(function (resolve, reject) {
                    //获取原图src
                    if (src === undefined) {
                        reject("请先上传封面~")
                    } else {
                        let originSrc = $(\'.cover .img-wrap\').attr(\'data-origin-src\');
                        if (src === originSrc) {
                            //这里代表是原来的那张图不需要异步删除图片,直接删除dom即可
                            $(\'.cover .img-wrap img\').remove();
                            $(".pic").val("")
                            resolve("删除成功")
                        } else {
                            //异步删除图片
                            $.ajax({
                                url: "<{url(\'/article/cover\')}>",
                                method: \'delete\',
                                data: {
                                    "file": src
                                },
                                dataType: "json",
                                success: (res) => {
                                    if (res.code === 200) {
                                        resolve("异步删除成功")
                                        $(\'.cover .img-wrap img\').remove();
                                        $(".pic").val("")
                                    } else {
                                        reject(\'删除失败\')
                                    }
                                }
                            })
                        }
                    }

                });
            }

            //删除按钮操作
            $(\'.cover .del-btn\').on(\'click\', function () {
                //获取src地址
                let src = $(\'.cover .img-wrap > img\').attr(\'src\');

                p1(src).catch(function (val) {
                    Toast.fire({
                        icon: "error",
                        title: val
                    })
                })
            })

            $(\'.cover .restore-btn\').on(\'click\', function () {
                //获取origin地址
                let originSrc = $.trim($(\'.cover .img-wrap\').attr(\'data-origin-src\'));

                if (originSrc === \'\') {
                    Toast.fire({
                        icon: "error",
                        title: \'当前无恢复封面~\'
                    })
                } else {
                    //删除原来的图片
                    //获取图片地址
                    let src = $(\'.cover .img-wrap > img\').attr(\'src\');

                    if (src != undefined) {//有图片就先删除原来上传的图片
                        p1(src).then(function (val) {

                            $(\'.cover .img-wrap\').html(`<img src="${originSrc}">`)
                            //给隐藏域赋值
                            $(".pic").val(originSrc)
                        }).catch(function (val) {
                            Toast.fire({
                                icon: "error",
                                title: val
                            })
                        })
                    } else {//没有就直接还原
                        $(\'.cover .img-wrap\').html(`<img src="${originSrc}">`)
                        //给隐藏域赋值
                        $(".pic").val(originSrc)
                    }
                }
            })

            //上传图片操作按钮
            $(\'.cover .upload-btn\').on(\'click\', function () {

                let input = document.createElement("input")
                input.type = "file"
                input.accept = ".png,.jpg,.jpeg"
                input.click()

                validPic.init2(input)

                //不是指定文件
                input.addEventListener("error", function () {
                    Toast.fire({
                        icon: "error",
                        title: "只支持png、jpg、 jpeg格式图片"
                    })
                }, false)


                //是指定文件回显操作
                input.addEventListener("success", function (e) {

                    //获取图片地址
                    let src = $(\'.cover .img-wrap > img\').attr(\'src\');

                    if (src === undefined) {//没有图片直接上传
                        imgPost(input);
                    } else {//有图片先删除原来的图片
                        p1(src).then(function (val) {
                            imgPost(input);
                        }).catch(function (val) {
                            Toast.fire({
                                icon: "error",
                                title: val
                            })
                        })
                    }
                }, false)


            });

            function imgPost(input) {

                //创建一个 formdata对象
                let formData = new FormData()
                //file对象
                let file = input.files[0]
                formData.append("file", file)
                $.ajax({
                    url: "<{url(\'/article/cover\')}>",
                    type: "POST",
                    data: formData,
                    processData: false,
                    contentType: false,
                    dataType: "json",
                    success: function (res) {
                        if (res.code === 200) {

                            $(\'.cover .img-wrap\').html(`<img src="${res.data.url}">`)
                            //给隐藏域赋值
                            $(".pic").val(res.data.url)

                        } else {
                            Toast.fire({
                                icon: "error",
                                title: res.msg
                            })
                        }
                    }
                })
            }

分类:

技术点:

相关文章: