javascript - Electron 在更新组件样式时意外工作
问题描述
下面的代码在浏览器中完美运行,但在 Electron 环境中却不行。
function listenFileInput() {
fileInput.addEventListener('change', ev => {
startProgress();
const file = ev.target.files[0];
if (!file) return clearProgress();
loadImage(file);
});
}
function loadImage(file) {
const image = new Image();
image.onload = function() {
const src = cropImage(this);
cardImage.src = src;
clearProgress();
};
image.src = window.URL.createObjectURL(file);
}
function startProgress() {
fileBtn.setAttribute('disabled', true);
fileInput.setAttribute('disabled', true);
progress.style.display = 'flex';
}
function clearProgress() {
fileBtn.removeAttribute('disabled');
fileInput.removeAttribute('disabled');
progress.style.display = 'none';
}
在 Electron 环境中,加载文件时,进度不会显示。
经过一些测试,我发现了一些有趣的现象:
如果我评论该
image.onload = function() {...}
块,它可以正常工作。如果我添加
alert()
事件onChange
回调或startProgress
函数,在警报后,进度会按预期显示。如果我
clearProgress();
在image.onload
回调中发表评论,则在加载图像后,会出现进度。
因此,在图像加载之前,setAttribute
andstyle.display
似乎没有工作(或者 Electron 没有重新渲染页面),除非有警报干扰了这个过程。
我已将完整代码推送到GitHub (/lib/file.js)。
解决方案
推荐阅读
- asp.net - 如何将我的应用程序信任级别更改为中等级别?
- azure - 如何处理 Azure 数据湖 Gen2 中的遥测 json 消息?
- android - 如何在 Cordova Android 平台上获取绝对罗盘航向
- r - R pmg 中的 Fama Macbeth 回归
- javascript - 如何从 Cesium3DTileset 控制基元的可见性
- typescript - 如何将 Openlayers5 与 ionic-angular 一起使用
- python - Python 函数未在输出中执行
- html - 如何在css中使::before/::after元素可点击?
- python - Tesseract 显示乱码
- bash - Bash 脚本:过滤大文件以获得价值