javascript - 事件侦听器因函数而未触发
问题描述
startCall
如果函数正在运行,我有一个不会触发的事件侦听器。
该startCall
函数有一个setInterval
每秒调用 30 次的函数。
我认为setInterval
是阻塞了事件监听器,所以我减少了它调用的次数,但事件监听器仍然没有触发。
它仅在我删除该startCall
功能时才有效。为什么会这样?
这是事件侦听器:
document.querySelector(".allowUserButton").addEventListener("click", function () {
const allowUserEmail = document.querySelector(".allowUser").value;
const allowUserMessage = document.querySelector(".allowUserMessage");
if (!allowUserEmail) {
allowUserMessage.innerHTML = "Fill in the Allow User field.";
return;
};
if (!validateEmail(allowUserEmail)) {
allowUserMessage.innerHTML = "Invalid Email format.";
return;
};
allowUserMessage.innerHTML = "Loading...";
fetch(`/allowUserToCall/${uuid}/${allowUserEmail}`)
.then(res => res.json())
.then(data => {
const message4 = data.message;
allowUserMessage.innerHTML = message4;
});
});
//startCall();
这是startCall
方法:
function startCall() {
const canvasClass = `c${Math.round(Math.random() * 9007199254740991)}`
const webcamTags = `
<canvas class="${canvasClass}"></canvas>
<video style="display: none;" autoplay></video>
`;
document.body.innerHTML += webcamTags;
const webcamErrorMessage = "Can't access webcam.";
const sampleFps = 30;
let video, canvas, ctx;
if (navigator.getUserMedia) {
navigator.getUserMedia({
video: true,
audio: false
}, function (localWebcamStream) {
video = document.querySelector("video");
video.srcObject = localWebcamStream;
canvas = document.querySelector(`.${canvasClass}`);
ctx = canvas.getContext("2d");
const windowWidth = window.innerWidth;
const windowHeight = window.innerHeight;
const isPhone = windowHeight / windowWidth;
let canvasDimension;
if (isPhone) {
canvasDimension = windowWidth / 4;
} else {
canvasDimension = windowWidth / 6;
};
canvas.width = canvasDimension;
canvas.height = canvasDimension;
setInterval(() => {
ctx.drawImage(video, 0, 0, canvasDimension, canvasDimension);
const imageData = ctx.getImageData(0, 0, canvasDimension, canvasDimension);
const buffer = imageData.data.buffer;
socket.emit("webcamSnapshot", buffer);
}, 1000 / sampleFps);
socket.on("incomingWebcamSnapshot", function (bufferDetails) {
const {buffer, email} = bufferDetails;
console.log(buffer, email);
});
}, function () {
message.innerHTML = webcamErrorMessage;
});
} else {
message.innerHTML = webcamErrorMessage;
};
};
解决方案
推荐阅读
- python - 读取txt文件的第一行和最后一行;最快的方法和子流程故障排除
- go - 编写代码如何在没有 InsecureSkipVerify 的情况下连接自签名证书 SSL 站点?
- jspdf - 如何删除 jsPDF 中的单元格填充?
- python - 评估每个输入 keras 的梯度
- python - pandas:获取第二行并将其放在第一行的末尾(并自动创建新列)
- tensorflow - 在 TensorFlow 中计算输出层的范数
- flutter - 控制多个相同类型的小部件,同时避免使用 GlobalKeys 列表
- php - 在 PHP 中设置许多具有相似名称和值的变量的最快方法
- simulation - Netlogo中简单汽车驾驶模型中墙壁碰撞程序中“NOBODY”的持续错误
- nginx - ffmpeg 拉取本地 rtmp 流失败