Как выделить текст в мобильном веб-браузере, перемещая касание по экрану с помощью javascript?

Я пытаюсь выбрать текст из мобильного веб-браузера на мобильном устройстве с сенсорным экраном, перемещая касание по экрану с помощью javascript. Я не хочу использовать долгое касание для выбора текста. Я пытаюсь получить выделенный текст так же, как браузер на рабочем столе, а не как мобильный телефон.

Когда я пытаюсь выбрать текстовую страницу, она прокручивается. Но вместо прокрутки я хочу выделить текст.

Пожалуйста, укажите способ выделения текста.


person user3340927    schedule 04.11.2014    source источник
comment
вы можете использовать сенсорные события   -  person Avinash Babu    schedule 04.11.2014


Ответы (2)


Это не вопрос разработки, и его следует перенести в SuperUser. Но чтобы ответить на ваш вопрос, как правило, на мобильных устройствах вам нужно дважды нажать и вызвать панель инструментов выбора текста.

Затем вам нужно будет выбрать диапазон с помощью двух селекторов.

Как вы хотите сделать это с помощью JavaScript? Если вы выбираете диапазон, который нельзя выбрать, используйте это:

Если вы можете использовать изображения для нередактируемого текста, вы можете сделать это, используя изображение в качестве фона и работая над ним:

body {font-family: 'Verdana'; font-size: 10pt;}
.editable {background: url('http://i.imgur.com/cAZvApm.png') -1px 1px no-repeat; text-indent: 8.5em; margin: 0 0 10px;}
<div contenteditable class="editable">Pages you view in incognito tabs won’t stick around in your browser’s history, cookie store, or search history after you’ve closed all of your incognito tabs. Any files you download or bookmarks you create will be kept. Learn more about incognito browsing.</div>

<div>Now try to edit the above text and check out!</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>
  if (document.body.createTextRange) {
    var range = document.body.createTextRange();
    range.moveToElementText(document.querySelectorAll(".editable")[0]);
    range.select();
  } else if (window.getSelection) {
    var selection = window.getSelection();        
    var range = document.createRange();
    range.selectNodeContents(document.querySelectorAll(".editable")[0]);
    selection.removeAllRanges();
    selection.addRange(range);
  }
  document.querySelectorAll(".editable")[0].focus();
</script>

Предварительный просмотр:

Примечание. Поскольку это взято из моего ответа, я думаю, это нельзя считать плагиатом!

person Praveen Kumar Purushothaman    schedule 04.11.2014

(Я думаю, что большинство) Мобильные браузеры используют задержку в 300 мс перед нажатием кнопки. Эта задержка предназначена для того, чтобы пользователь мог дважды нажать для увеличения, выбора текста и т. д.

Если вы хотите убрать эту задержку, вы можете использовать fastclick.js: https://github.com/ftlabs/fastclick< /а>

Чтобы выделить текст с помощью javascript, вы можете сделать что-то вроде этого:

<span id="foo" >bar</span>

И в вашем сценарии:

 function selectText(element) {
    var doc = document;
    var text = doc.getElementById(element);    

    if (doc.body.createTextRange) { // ms
        var range = doc.body.createTextRange();
        range.moveToElementText(text);
        range.select();
    } else if (window.getSelection) { // moz, opera, webkit
        var selection = window.getSelection();            
        var range = doc.createRange();
        range.selectNodeContents(text);
        selection.removeAllRanges();
        selection.addRange(range);
    }
}

selectText('foo');
person Stef van Wijchen    schedule 04.11.2014
comment
Чем это отличается от моей логики? - person Praveen Kumar Purushothaman; 04.11.2014
comment
Вероятно, я печатал свой ответ, пока вы писали. В любом случае в моем ответе могут быть ценные дополнения :) - person Stef van Wijchen; 04.11.2014
comment
Хороший! :) Хорошо. Хорошо! :) - person Praveen Kumar Purushothaman; 04.11.2014