DelegatedInkTrailPresenter

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

實驗性: 這是一項實驗性技術
在生產中使用此技術之前,請仔細檢查瀏覽器相容性表格

DelegatedInkTrailPresenter 介面是 Ink API 的一部分,它提供了指示作業系統級合成器在指標事件分派之間渲染墨跡筆畫的功能。

例項屬性

expectedImprovement 已棄用 非標準 只讀

返回一個以毫秒為單位的值,表示使用此演示器可預期的延遲改進。

presentationArea 實驗性 只讀

返回墨跡筆畫渲染所限制的 Element

例項方法

updateInkTrailStartPoint() 實驗性

傳入用於當前幀最後一個渲染點的 PointerEvent,允許作業系統級合成器在下一個指標事件分派之前渲染委派的墨跡軌跡。

示例

在此示例中,我們在 2D 畫布上繪製軌跡。在程式碼的開頭附近,我們呼叫 Ink.requestPresenter(),將畫布作為其要處理的演示區域傳遞,並將返回的 Promise 儲存在 presenter 變數中。

稍後,在 pointermove 事件監聽器中,每次事件觸發時,軌跡的移動點都會繪製在畫布上。此外,當 presenter promise 兌現時返回的 DelegatedInkTrailPresenter 物件會呼叫其 updateInkTrailStartPoint() 方法;這是傳入的

  • 表示當前幀渲染點的最後一個受信任的指標事件。
  • 一個包含顏色和直徑設定的 style 物件。

結果是,一個委託的墨跡軌跡在應用程式的預設瀏覽器渲染之前繪製,使用指定的樣式,直到下次接收到 pointermove 事件為止。

js
const ctx = canvas.getContext("2d");
let presenter = navigator.ink.requestPresenter({ presentationArea: canvas });
let move_cnt = 0;
let style = { color: "rgb(0 0 255 / 100%)", diameter: 10 };

function getRandomInt(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

canvas.addEventListener("pointermove", (evt) => {
  const pointSize = 10;
  ctx.fillStyle = "black";
  ctx.fillRect(evt.pageX, evt.pageY, pointSize, pointSize);
  if (move_cnt === 50) {
    let r = getRandomInt(0, 255);
    let g = getRandomInt(0, 255);
    let b = getRandomInt(0, 255);
    style = {
      color: `rgb(${r} ${g} ${b} / 100%)`,
      diameter: 10,
    };
    move_cnt = 0;
    document.getElementById("div").style.backgroundColor =
      `rgb(${r} ${g} ${b} / 100%)`;
  }
  move_cnt += 1;
  presenter.then((v) => {
    v.updateInkTrailStartPoint(evt, style);
  });
});

window.addEventListener("pointerdown", (evt) => {
  evt.pointerId;
  ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
});

canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

注意: 檢視此示例即時執行 — 委派墨跡軌跡

規範

規範
Ink API
# delegatedinktrailpresenter

瀏覽器相容性