Ошибка Android Chrome HTML Canvas Arc

Пример скрипки:

https://jsfiddle.net/j4owpexc/1/

Характеристики устройства:

Хром 72.0.3626.105 Андроид 6.0.1; Nexus 7 Build/MOB30X

На этой скрипке я создаю два холста и рисую несколько кругов. Первый холст имеет ширину 115, второй — 439. На большинстве устройств и браузеров круги одинаковые. В приведенной выше версии Chrome, работающей на Android, круг на меньшем холсте (крайний левый круг) отображается правильно, а круги на большом холсте (три крайних правых круга) отображаются странно. Вот скриншот с моего Nexus 7:

Ошибка Android Chrome HTML Canvas Arc

Линии, квадраты и т. д. кажутся почти одинаковыми на двух холстах. Теперь, если вы измените ширину второго холста на 438, он будет отображаться правильно. Фактически, любая ширина, меньшая или равная 438, будет правильно отображать круги, а любая ширина, превышающая или равная 439, будет отображать их неправильно.

Кто-нибудь знает, что здесь происходит? Я почти уверен, что это самая последняя версия Chrome для Android. Это сводит меня с ума какое-то время. На другом моем телефоне Android с той же версией Chrome он отображается правильно.

<html>
    <head><style>* {margin:0; padding:0;}</style></head>
    <body>
    </body>
</html>

<script>

    var canvas1 = document.createElement("CANVAS");
    canvas1.width = 115
    var ctx1 = canvas1.getContext("2d");

    ctx1.strokeStyle = "red";
    ctx1.fillStyle = 'green';
    ctx1.beginPath();
    ctx1.lineWidth = 1;
    ctx1.arc(60, 60, 50, 0, 2 * Math.PI);
    ctx1.strokeRect(50, 50, 40, 40);
    ctx1.fillRect(60, 60, 20, 20);
    ctx1.moveTo(10, 10);
    ctx1.lineTo(40, 40);
    ctx1.lineTo(10, 80);
    ctx1.stroke();
    document.body.appendChild(canvas1);

    var canvas2 = document.createElement("CANVAS");        // Create a <button> element
    canvas2.width = 439

    var ctx = canvas2.getContext("2d");

    ctx.strokeStyle = "red";
    ctx.fillStyle = 'green';

    ctx.beginPath();
    ctx.lineWidth = 1;
    ctx.arc(60, 60, 50, 0, 2 * Math.PI, true);
    ctx.fillRect(60, 60, 20, 20);
    ctx.strokeRect(50, 50, 40, 40);
    ctx.moveTo(10, 10);
    ctx.lineTo(40, 40);
    ctx.lineTo(10, 80);
    ctx.stroke();

    ctx.beginPath();
    ctx.lineWidth = 1;
    ctx.arc(170, 60, 50, 0, 2 * Math.PI);
    ctx.stroke();

    ctx.beginPath();
    ctx.lineWidth = 1;
    ctx.arc(280, 60, 50, 0, 2 * Math.PI);
    ctx.stroke();

    document.body.appendChild(canvas2);                    // Append <button> to <body> 
</script>

Похоже на проблему сглаживания, когда сглаживание сработает, но пиксели, которые должны были быть полупрозрачными (или ниже заданной непрозрачности), отбрасываются. Напишите отчет об ошибке команде chromium после тестирования в другом браузере с того же устройства.

Kaiido 02.03.2019 01:01

И FWIW, у меня нет репро для Galaxy S6.

Kaiido 02.03.2019 01:28

Я только что протестировал его в Firefox на том же планшете, и он правильно отобразился там, поэтому, должно быть, это проблема с Chrome. Я напишу отчет об ошибке. Спасибо за ваши комментарии.

Deep Tennis 02.03.2019 04:31
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
150
0

Другие вопросы по теме