鍍金池/ 問答/HTML/ js對象回收機制的疑問

js對象回收機制的疑問

先上一個項目照吧:

clipboard.png
就是這三個圖片上傳的需求,我引用了一個插件photoClip.js。
下面是html:

clipboard.png
html圖片裁剪彈框:

<div class="ckphoto" style="display: none;">
                <div class="ckcon">
                    <div class="ckhead">
                        <div class="ckback flex f_center"><img class="icon" src="../img/jiao01.png" /></div>
                        <div class="cktit">選擇圖片</div>
                    </div>
                    <div class="ckphbox">
                        <div class="ckimg" id="ckimg"></div>
                    </div>
                    <div class="ckdown">
                        <div class="list lits">
                            <div>選擇圖片</div>
                            <input type="file" class="ckpho" id="ckpho" />
                        </div>
                        <div class="list" id="clipbtn">裁剪</div>
                        <div class="list" id="closepho">取消</div>
                    </div>
                </div>
            </div>

然后是JS代碼

function setImg(e) {
                var clipArea = null;
                var _type = e.target.attributes[2].nodeValue;
                $('.ckphoto').show();//裁剪彈窗
                if(_type == 1) {
                    var size = [160, 160];
                    var outputSize = [200, 200];
                } else if(_type == 2) {
                    var size = [299, 140];
                    var outputSize = [621, 300];
                } else if(_type == 3) {
                    var size = [299, 140];
                    var outputSize = [621, 300];
                } else {
                    var size = [278, 393];
                    var outputSize = [842, 1191];
                }
                clipArea = new bjj.PhotoClip("#ckimg", {
                    size: size,
                    outputSize: outputSize,
                    file: "#ckpho",
                    ok: "#clipbtn",
                    loadStart: function() {
                    },
                    loadComplete: function() {
                        console.log("照片讀取完成");
                    },
                    clipFinish: function(dataURL) {
                        $('.ckphoto').hide();
                        if(_type == 1) {
                            $('.logo').attr('src', dataURL);//店鋪logo
                        } else if(_type == 2) {
                            $('.mentou').attr('src', dataURL);//實景圖1
                        } else if(_type == 3) {
                            $('.shijing').attr('src', dataURL);//實景圖2
                        } else {
                            $('.zhizhao').attr('src', dataURL);//執(zhí)照
                        }
                        clipArea = null;//這是后來加上的
                    }
                });
            }

其實整體流程還是比較清晰的。但是遇到一個問題:
我首先隨便點擊某一個上傳圖片,完成上傳(如:先點擊上傳店鋪logo-->完成裁剪-->本地預(yù)覽成功),第一次沒問題。

clipboard.png

然后我繼續(xù)上傳下一個選項的圖片(如:點擊上傳實景照1-->完成裁剪-->本地預(yù)覽成功),會發(fā)現(xiàn)該次上傳的圖片將上一次上傳的圖片給覆蓋了...wtf。然后在控制臺發(fā)現(xiàn):

clipboard.png
根據(jù)斷點,第一次上傳后loadComplete進入,然后輸出‘照片讀取完成’一次(正常),第二次上傳時,loadComplete進入了兩次,然后輸出‘照片讀取完成’兩次,也就是說clipArea這個對象其實是一共被創(chuàng)建了3次,棧內(nèi)一共有三個clipArea對象...沒辦法我又在clipFinish的回調(diào)中手動清空clipArea對象,可是仍然沒有作用。
有沒有大神幫幫忙看下這是什么情況?如何解決這個坑啊

回答
編輯回答
柚稚

從字面上意思跟垃圾回收沒什么關(guān)系。
是你的組件是綁定在"#ckimg"上的,并且是多次,照著邏輯你點第三個圖片會打印3次。

2018年7月3日 05:11
編輯回答
心沉

沒太細看 你應(yīng)該缺個form.reset() 找找那個插件文檔 關(guān)鍵字 重置

2018年4月13日 06:30