Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使文本的自动选择与正常选择类似_Javascript_Iphone - Fatal编程技术网

Javascript 使文本的自动选择与正常选择类似

Javascript 使文本的自动选择与正常选择类似,javascript,iphone,Javascript,Iphone,我正在研究一个问题的答案,但有一个问题 其目的是使标签中的文本可以像在iphone上一样进行选择(长时间触摸文本会变大,您可以查看从何处开始选择),但在文本周围有一个更大的可点击区域。要了解我的意思,请点击边界区域 现在,它会自动选择给定p标记内的文本,但您无法搜索从何处开始 迄今为止的代码 function extendSelection() { var extendBy = arguments.length <= 0 || arguments[0] === undefined

我正在研究一个问题的答案,但有一个问题

其目的是使标签中的文本可以像在iphone上一样进行选择(长时间触摸文本会变大,您可以查看从何处开始选择),但在文本周围有一个更大的可点击区域。要了解我的意思,请点击边界区域

现在,它会自动选择给定p标记内的文本,但您无法搜索从何处开始

迄今为止的代码

function extendSelection() {
    var extendBy = arguments.length <= 0 || arguments[0] === undefined ? 15 : arguments[0];

    var extended = document.getElementsByClassName('extendedSelection');
    [].slice.call(extended).forEach(function (v) {
        var bounds = v.getBoundingClientRect();
        var x = bounds.left;
        var r = textWidth(v.innerHTML, ''+ css(v, 'font-weight') +' ' + css(v, 'font-size') + ' ' + css(v, 'font-family') );
        var y = bounds.top;
        var w = bounds.width;
        var h = bounds.height;
        var element = document.createElement('div');
        element.style.position = 'absolute';
        element.style.height = h + extendBy + 'px';
        element.style.width = r + extendBy + 'px';
        element.style.left = x - extendBy / 2 + 'px';
        element.style.top = y - extendBy / 2 + 'px';
        element.style.border = '1px dotted black';
        document.body.appendChild(element);
        element.addEventListener('click', function (e) {
            SelectText(v);
        });
        element.addEventListener('touchend', function (e) {
            SelectText(v);
        });
    });
}

function css(element, property) {
    return window.getComputedStyle(element, null).getPropertyValue(property);
}

function textWidth(text, font) {
    var el = textWidth.canvas || (textWidth.canvas = document.createElement("canvas"));
    var draw = el.getContext("2d");
    draw.font = font;
    var m = draw.measureText(text);
    return m.width;
};

function SelectText(element) {
    var doc = document,
        text = element,
        range,
        selection;
    if (doc.body.createTextRange) {
        range = document.body.createTextRange();
        range.moveToElementText(text);
        range.select();
    } else if (window.getSelection) {
        selection = window.getSelection();
        range = document.createRange();
        range.selectNodeContents(text);
        selection.removeAllRanges();
        selection.addRange(range);
        selection.setSelectionRange(0, element.value.length)
    }
}

extendSelection();
函数extendSelection(){
var extendBy=arguments.length