javascript - Chrome中的画布drawImage
问题描述
我需要更改背景颜色以匹配 Wordpress 行中的视频颜色。它适用于 firefox\edge\safari 但不适用于 chrome。它返回 RGB (0,0,0)
有问题的页面 - http://flex.tmweb.ru
window.onload = function() {
var vid = document.getElementById('video-15-1_html5');
var row = document.getElementById('globe-video');
var canvas = document.createElement('canvas');
canvas.width = 1;
canvas.height = 1;
var context = canvas.getContext('2d');
context.drawImage(vid, 0, 0, 1, 1);
var p = context.getImageData(0, 0, 1, 1).data;
row.style.backgroundColor = "rgb(" + p[0] + "," + p[1] + "," + p[2] + ")";
};
解决方案
我的猜测是存在某种时间问题,Chrome 与其他浏览器在调用 onload 时与视频本身已加载任何内容时有所不同。
在做画布之前尝试检查视频是否已加载,然后在必要时等待:
function onVideoLoaded() {
var vid = document.getElementById('video-15-1_html5');
var row = document.getElementById('globe-video');
var canvas = document.createElement('canvas');
canvas.width = 1;
canvas.height = 1;
var context = canvas.getContext('2d');
context.drawImage(vid, 0, 0, 1, 1);
var p = context.getImageData(0, 0, 1, 1).data;
row.style.backgroundColor = "rgb(" + p[0] + "," + p[1] + "," + p[2] + ")";
}
window.onload = function() {
var vid = document.getElementById('video-15-1_html5');
if (vid.readyState === 4) {
onVideoLoaded();
} else {
vid.addEventListener('loadeddata', function () {
if (vid.readyState === 4) {
onVideoLoaded();
}
});
}
};
请参阅以下 MDN 文档HTMLMediaElement.readyState
:https ://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/readyState
推荐阅读
- python-3.x - 特定模式的字典到制表符分隔的文本文件
- php - 我需要在 PHP docblock 中使用 splat 运算符,但无法弄清楚如何转义字符
- c# - 在添加新数据之前检查现有列表中是否已存在值
- typescript - 有条件地将输入转换为 Typescript 函数
- python - scikit-learn:FeatureUnion 包含手工制作的功能
- amazon-s3 - AWS S3:删除最后一个文件后如何维护空目录结构
- csvhelper - 返回时处理 CsvHelper.GetRecords
- c - 为什么要向堆栈指针添加地址?
- javascript - 有没有办法在 Vue.js 中的窗口刷新或窗口关闭之前更新 Firestore?
- python - Visual Studio Code - 没有这样的文件或目录