使用 rotationAngle 和 touchRadius

在 Chrome 中,Touch API 有相對微小的變更,納入 Chrome 39,該版本在 TouchEvent 物件中加入了 webkitRotationAngle 屬性的有效版本。在 Chrome 45 版 (2015 年 7 月推出 Beta 版) 並未加上 rotationAngle 前置字串,現在我們實作的方式能夠更內嵌至 TouchEvent Spec 和 Firefox。

雖然這項功能已經停用了一段時間,但您也可以說明 rotationAngle 如何開啟更有趣的觸控手勢,尤其是行動裝置的觸控手勢。

嚴格說來,旋轉角度是指由 Touch.radiusXTouch.radiusY 定義,該角度為接觸區域橢圓形的度數 (介於 0 到 90 之間)。呃,對吧?(請注意,我只有 Android 版 Chrome 不會將 radiusXradiusY 的值鎖定為 64 像素,但會因螢幕的聯絡大小而不同)。

這是什麼意思?

你可以將此視為一種方式,準確呈現使用者手指在螢幕上的大小、形狀和方向。使用者不一定總是有指尖輕觸螢幕,而是經常壓住螢幕,就像是把指紋交給警察。如果沒有 rotationAngle,你就能輕鬆取得觸控手勢的寬度和高度。使用 rotationAngle 時,您可以獲得 90 度的旋轉角度 (0 為垂直,90 為水平)。為什麼只要 90 度?您只需要 90 度,因為當您移動過這些角度時,radiusXradiusY 就會配合變化。

除此之外,這也很酷的是,使用者手指的接觸區域會隨著手指在螢幕上的壓力程度而變化。這並非 force 的直接取代,但您可以區分螢幕上的淺色筆刷,因為其表面積比不易按下。

該如何使用?

首先,您需要有可偵測到這個問題的裝置。Nexus 10 即可正常運作。最好的例子就是直接查看 Rick Byers 繪製範例。不用說,我可以在沒有畫布的情況下運用它

var touchHandler = function(e) {
    e.preventDefault();
    var touches = e.changedTouches;
    var touch = touches[0]; // only concerned about first touch.
    
    var rotationAngle = touch.rotationAngle || touch.webkitRotationAngle || 0;
    var radiusX = touch.radiusX || touch.webkitRadiusX || 1;
    var radiusY = touch.radiusY || touch.webkitRadiusY || 1;
    var force = touch.force || touch.webkitForce || 0;
    
    // Use the rotationAngle to rotate the 'p' element.
    
    p.style.width = radiusX * 2 + 'px';
    p.style.height = radiusY * 2 + 'px';
    p.style.transform = "rotate(" + rotationAngle + "deg)";
};

document.documentElement.ontouchstart = touchHandler;
document.documentElement.ontouchend = touchHandler;
document.documentElement.ontouchmove = touchHandler;

你會在哪裡應用這個做法?

在某些顯而易見的地方,這對使用者而言是非常實用的功能:

  • 舉例來說,如果繪畫和圖片操控網頁應用程式,就能利用這項資訊調整套用至畫布的筆觸或特效。您可以使用觸控半徑來改變筆刷大小,也可以在旋轉角度合併,以改變筆刷在畫布上的觸角角度。
  • 強化手勢辨識:如果您瞭解旋轉角度,就可以建立單指手勢,讓物體輕輕搖晃。

每部裝置都支援這項功能嗎?

不,雖然這種情況很少見,如果您使用的是 Nexus 10 就會看到如下所示的內容

觸控角度旋轉螢幕截圖

Rick Byers 圖片來源。

當裝置無法理解觸控角度時,rotationAngle 為 0,radiusXradiusY 值會相等 (但可能會因目前的觸控表面區域而異)。

為什麼會這樣?

好問題!就像網路上的許多功能一樣,這是累加的體驗。
觸控事件現可在支援的情況下運作,如果有半徑值和旋轉值,您可以強化應用程式,為使用者提供更優質的體驗。並非每位使用者都擁有 Wacom 平板電腦,但只要展示許多繪畫應用程式,就能善用這款平板電腦。

指標事件是什麼?

這一切,都是為仰賴觸控事件的開發人員提供完善的觸控事件 API。看看我如何放膽回答問題... 更重要的是,如果您想瞭解如何運用 Blink 的 PointerEvent 實作,請將 問題 471824 加上星號,並參閱 Rick Byers 追蹤文件

另請參閱