2 回答

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊
這是XY 問題的一個(gè)實(shí)例。
您不需要將觸摸事件轉(zhuǎn)換為鼠標(biāo)事件(touchstart→ mousedown、touchmove→ mousemove、touchend→ mouseup),反之亦然:瀏覽器已經(jīng)為您完成了。
我強(qiáng)烈建議您觀看2015 年的“Getting Touchy”演示并閱讀相應(yīng)的幻燈片。它深入解釋了不同的瀏覽器如何在觸摸事件的同時(shí)調(diào)度鼠標(biāo)(和指針)事件。
即使你是調(diào)度mousedown/ up/move只為觸摸事件的一些情況,您將會(huì)收到重復(fù) mousedown/ up/move事件的單點(diǎn)觸摸。
另一方面:在這里綁定事件處理程序的一種干凈的方法......
element.addEventListener('touchstart', onTouchStart);
function onTouchStart(e) {
if (e.touches.length > 1) { foo() } else { this.fire.bind(map, 'mousedown') }
};
...將是...
element.addEventListener('touchstart', onTouchStart.bind(this));
function onTouchStart(e) {
if (e.touches.length > 1) { foo() } else { this.fire('mousedown') }
};
請(qǐng)注意bind()調(diào)用是如何應(yīng)用于事件處理程序函數(shù)的,而不是應(yīng)用于事件處理程序內(nèi)部的函數(shù)調(diào)用。這使得this事件處理程序內(nèi)部的值成為 的參數(shù)bind()。
“傳單方式”將是......
L.DomEvent.on(element, 'touchstart', onTouchStart, this)
...這是幾個(gè)包裝器bind和addEventListener。L.DomEvent還處理瀏覽器的怪癖(dblclick在某些情況下在觸摸屏上),并翻譯非標(biāo)準(zhǔn)的 IE10 MSPointerDown(等),以便touch*使用 IE10 和觸摸屏的 Win7 機(jī)器上的事件將起作用。

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊
這里:
function onTouchStart(e) {
if (e.touches.length > 1) { foo() } else { this.fire.bind(map, 'mousedown') }
};
問題是this.fire.bind(map, 'mousedown')。這段代碼沒有副作用,它只是定義了一個(gè)函數(shù)。請(qǐng)參閱綁定。但實(shí)際上并沒有調(diào)用它。
要調(diào)用它,您可以使用:
this.fire('mousedown');
添加回答
舉報(bào)