2013-02-25 38 views
2

iOS上的文本選擇結束是否存在事件?文本選擇事件結束?

我知道什麼時候該選擇通過以下改變,我可以運行一個事件:

document.addEventListener("selectionchange", function(event) { 
     var text = window.getSelection().toString(); 
     $(".output").append("<div>" + text + "</div>"); 
}, false); 

<div class="output"></div> 

這將更新.output與選定的文本,但運行每次選擇更改。我想要的只是在選擇結束後才捕獲文本。

有沒有這樣的事件?是否有可能做這樣的事情?

回答

1

如何綁定mouseup事件?

JAVASCRIPT:

document.addEventListener("mouseup", function(event) { 
     var text = window.getSelection().toString(); 
    $(".output").append("<div>" + text + "</div>"); 
}, false); 

DEMO: http://jsfiddle.net/dirtyd77/yTMwu/66/

+0

不,當iOS手指離開屏幕時,不會觸發'mouseup'。 – Charlie 2013-02-26 01:06:41

+0

'touchend'呢? – Dom 2013-02-26 01:20:26

+1

我希望:\如果您要選擇文本,然後鬆開手指,不會調用touchend。然而,如果你在選擇內點擊某處,它會調用'touchend'。 – Charlie 2013-02-26 01:22:42

4

類似於你我沒有找到這個問題的好辦法,所以我決定創建一個解決方法。 它不是最漂亮的,但它的工作原理。

我創建了一個超時函數並將其綁定到「onselectionchange」事件。 每次事件觸發我檢查,如果我的超時正在運行,如果是這樣我刪除它,並創建一個新的。

當超時完成時,自定義事件「selectionEnd」被觸發。

// bind selection change event to my function 
document.onselectionchange = userSelectionChanged; 

function userSelectionChanged() { 

    // wait 500 ms after the last selection change event 
    if (selectionEndTimeout) { 
     clearTimeout(selectionEndTimeout); 
    } 

    selectionEndTimeout = setTimeout(function() { 
     $(window).trigger('selectionEnd'); 
    }, 500); 
} 

$(window).bind('selectionEnd', function() { 

    // reset selection timeout 
    selectionEndTimeout = null; 

    // TODO: Do your cool stuff here........ 

    // get user selection 
    var selectedText = getSelectionText(); 

    // if the selection is not empty show it :) 
    if(selectedText != ''){ 
     // TODO: Do something with the text 
    } 
}); 

DEMO:http://jsfiddle.net/dimshik/z8Jge/

我在我的博客上寫了一個小職位看:http://www.dimshik.com/end-of-text-selection-event-on-ios-workaround/

+2

有趣的......我不知道是否會有一旦手指已經從屏幕上釋放只記錄文本。到目前爲止,當選擇停止改變時,這將運行,但在手指完全選擇完成時不會。 – Charlie 2014-04-01 13:35:58

1

我也面臨這個問題,因爲我還沒有找到一個好的解決辦法,這是我的解決方法。
當用戶在移動瀏覽器剪貼板中按確認/返回按鈕確認他的選擇時,它將觸發一個selectionEnd事件。

var longpress = false; 
var longpressTimer = null; 
var loop = null; 
var latestSelection = null; 

window.ontouchstart = function(){ 
    longpressTimer = setTimeout(function(){ 
     longpress = true; 
     loop = setInterval(getSelection, 200); 
    }, 500) 
}; 

window.ontouchend = function(){ 
    if(longpressTimer){ 
     clearTimeout(longpressTimer); 
    } 
    longpress = false; 
} 

var getSelection = function(){ 
    var s = window.getSelection(); 
    if(s.rangeCount > 0){ 
     latestSelection = s.getRangeAt(0); 
    }else{ 
     clearInterval(loop); 
     var selEndEvent = new CustomEvent("selectionEnd", {"detail": latestSelection}); 
     window.dispatchEvent(selEndEvent); 
    } 
} 

當長按執行時,它會啓動間隔來監視選擇。然後用戶確認他的選擇,剪貼板自動刪除它;這會中斷監視器循環併發送selectionEnd事件。
您可以訪問最後選擇的詳細屬性文本。

我希望得到關於這個問題的一些消息,並得到更好的解決方案。