去看了一下 fabric 的原始碼,原來他是利用 e.preventDefault() 來避免頁面捲動的。
原始碼:http://fabricjs.com/docs/fabric.js.html#line10465
/**
* @private
* @param {Event} e Event object fired on mousemove
*/
_onMouseMove: function (e) {
!this.allowTouchScrolling && e.preventDefault && e.preventDefault();
this.__onMouseMove(e);
},
然後就找到這篇,原來 Chrome 為了讓瀏覽器速度變快,所以新增了 passive 參數讓 touch event 不會在 calling stack 中藉由 preventDefault() 給取消掉。而且這個參數在 Chrome 56 以後預設為 true。
window.addEventListener("touchstart", func, {passive: true} );
請見:
那麼要怎麼樣避免捲動呢?Chrome 給的答案是增加 CSS touch-action 為 none
#canvas-parent {
touch-action: none;
}
請見: https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action