Canvas drawImage в Chrome - PullRequest
       2

Canvas drawImage в Chrome

0 голосов
/ 22 марта 2019

Мне нужно изменить цвет фона, чтобы он соответствовал цвету видео в строке 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] + ")";
};

1 Ответ

0 голосов
/ 22 марта 2019

Я предполагаю, что есть какая-то проблема с синхронизацией, когда 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...