先上一个项目照吧:
就是这三个图片上传的需求,我引用了一个插件photoClip.js。
下面是html:
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);//执照
}
clipArea = null;//这是后来加上的
}
});
}
其实整体流程还是比较清晰的。但是遇到一个问题:
我首先随便点击某一个上传图片,完成上传(如:先点击上传店铺logo-->完成裁剪-->本地预览成功),第一次没问题。
然后我继续上传下一个选项的图片(如:点击上传实景照1-->完成裁剪-->本地预览成功),会发现该次上传的图片将上一次上传的图片给覆盖了...wtf。然后在控制台发现:
根据断点,第一次上传后loadComplete进入,然后输出‘照片读取完成’一次(正常),第二次上传时,loadComplete进入了两次,然后输出‘照片读取完成’两次,也就是说clipArea这个对象其实是一共被创建了3次,栈内一共有三个clipArea对象...没办法我又在clipFinish的回调中手动清空clipArea对象,可是仍然没有作用。
有没有大神帮帮忙看下这是什么情况?如何解决这个坑啊
没太细看 你应该缺个form.reset() 找找那个插件文档 关键字 重置