javascript - CropperJS getCroppedCanvas() 在第二次初始化时返回 null
问题描述
该方法在就绪事件中被调用。在第一次通话时它工作。当模态关闭时,我正在破坏裁剪器 - cropper.destroy()
。第二次打开modal后,cropper再次初始化,但这次cropper.getCroppedCanvas()
返回null
let cropper = new Cropper(image, {
dragMode: 'move',
aspectRatio: ratio,
restore: false,
guides: false,
center: false,
highlight: false,
cropBoxMovable: false,
cropBoxResizable: false,
toggleDragModeOnDblclick: false,
ready: function () {
modal.find(".save").on("click", function () {
console.log(cropper.getCroppedCanvas())
cropper.getCroppedCanvas().toBlob(function (blob) {
let formData = new FormData()
formData.append("croppedImage", blob)
jQuery.ajax({
method: "post",
url: "index.php?option=com_image_slideshows&task=slideshow.saveCroppedImage",
data: formData,
processData: false,
contentType: false
})
.done(function (response) {
modal.modal("hide")
})
})
})
cropper.crop()
}
})
在模态关闭时会发生这种情况:
modal.on("hidden.bs.modal", function () {
cropper.destroy()
jQuery("#cropper-modal .modal-body").html(
jQuery("<img>", {
id: "image",
"class": "cropper-hidden"
})
)
})
解决方案
我的猜测是您最初设置的cropper 变量:
let cropper = new Cropper(...)
仍然在您的 ready 函数中第二次被引用。我会首先尝试确保在调用cropper.destroy() 之后将cropper 变量设置为null。
您还可以通过访问来尝试在您的就绪函数中访问正确的 Cropper 实例this.cropper
,例如:
ready: function () {
modal.find(".save").on("click", function () {
console.log(this.cropper.getCroppedCanvas());
}
}
推荐阅读
- r - R 用户:如何卸载使用 devtools::install_github("username/repo") 安装的包
- c++ - 如何在 ZMQ 代理中记录接收消息?
- visual-studio - 从生产部署中排除 roslyn 分析器 DLL
- python - 删除字符串python中的行
- c# - 在 XAML 中创建的对象不能由 cs 中的 x:Name 调用
- javascript - 如何在nidejs的while循环中等待函数完全执行
- ssl - 如何找出为什么 openssl 不起作用,但 netcat 起作用?
- angular - undefined 不是对象(评估 'r.urlTree')
- javascript - 在 Express Router (node.js) 中使用 for 循环
- mysql - ORDER BY id DESC 结合 WHERE id < ... 不会使用索引