0

我正在使用iOS中的編輯器,使用contentEditable。因此,要知道一些HTML元素是什麼,我正在使用document.queryCommandState()。這個偉大的工程,但它實際上似乎有一個延遲使用touchstart事件時:touchStart事件和queryCommandState延遲問題

$('#editor').bind('touchstart', function(e) { 
    $('#debug').text('touched'); 

    if (document.queryCommandState('bold')) { 
     $('#debug').text('bold'); 
    } 
    if (document.queryCommandState('italic')) { 
     $('#debug').text('italic'); 
    } 

}); 

HTML:

<div id="editor" contenteditable="true"> 

    <p>This is <strong>bold text</strong>.</p> 
    <p>This is <em>italic text</em>.</p> 

</div> 
<div id="debug"></div> 

當設備或iOS模擬器上測試,就大膽文字觸摸時,調試正確地說該元素被觸摸了,但並不表示它是大膽的。只有第二次觸摸它纔會註冊爲粗體。

因此,使用queryCommandState()似乎有延遲。如果您在斜體和粗體之間來回切換,它只會顯示以前的樣式。例如,錄音大膽然後斜體會說大膽,但是然後敲擊大膽會說斜體。

演示(請確保您正在測試在iOS):http://f.cl.ly/items/3W2A0q451Q00401t3E3G/test.html

任何想法是怎麼上的任何地方有一個延遲了?

回答

0

touchstart事件的延遲是「有機的」。該設備有一個小小的機會來決定應用程序/瀏覽器(香草觸摸)還是in-os(四指輕掃以在打開的應用程序之間切換)。自然,後者必須處理而沒有副作用 - 如果你做四指輕掃,你不想在底層內容上觸發一兩次觸摸。

如果您必須規避此行爲,請考慮專門處理該問題的a broad polyfillFastClick library

+0

如果你說的是真的,那麼爲什麼我會立即看到我的調試div內的「被觸摸」文本? polyfill和FastClick似乎都會將性能問題添加到我的應用中。測試FastClick幾乎使其無用。 –