我正在通过Javascript创建div元素,并且想要复制由我使用的游戏引擎初始化的画布样式。我使用Object.assign来实现这一点,并且它在Chrome上可以完美运行,但是当我在Firefox上进行测试时,出现了此错误,并且它不允许我继续游戏。我将在下面留下功能代码:

export const addCanvasOverlay = (id) => {
  const canvas = game.system.canvas;
  const overlay = document.createElement('DIV');
  overlay.id = id;
  /**
   * Clone canvas style to ensure the overlay is always over it
   */
  const trackCanvasSize = () => {
    Object.assign(overlay.style, canvas.style);
    overlay.style['pointer-events'] = 'none';
  };
  window.addEventListener('resize', trackCanvasSize);
  trackCanvasSize();
  canvas.parentNode.appendChild(overlay);
  return overlay;
}


有谁知道这可能是什么原因?

这是我在canvas.style上得到的,除了样式常规属性:

javascript - 如何解决CSS2Properties在Firefox上没有针对“0”错误的索引属性 setter ?-LMLPHP

最佳答案

最后,我解决了这一问题,我不得不检查样式对象的构造方法,并在Firefox上进行了另一步骤:

let styles = {};
switch (canvas.style.constructor.name) {
      // Fix for firefox
      case 'CSS2Properties':
        Object.values(canvas.style).forEach((prop) => {
          styles[prop] = canvas.style[prop];
        });
        break;
      case 'CSSStyleDeclaration':
        styles = canvas.style;
        break;
      default:
        console.error('Unknown style object prototype');
        break;
    }
Object.assign(overlay.style, styles);

关于javascript - 如何解决CSS2Properties在Firefox上没有针对“0”错误的索引属性 setter ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46077237/

10-10 02:02