I am detecting the word on long press(touch event) in html document. But on long press I am getting native text selector. I tried to disable user selection through CSS as below but it lead to throw an error.
html {
-webkit-user-select: none;
}
Error:
Uncaught IndexSizeError: Index or size was negative, or greater than the allowed value.
Code:
<body onload="init()">
<p id="book-content">
One reason people ......at the time, since then it has made me look down on myself.
</p>
<script type="text/javascript">
var self = this;
var startTime, endTime;
var gbMove = false;
function init() {
document.getElementById("book-content").addEventListener('touchstart', self.touchstart, false);
document.getElementById("book-content").addEventListener('touchmove', self.touchmove, false);
document.getElementById("book-content").addEventListener('touchend', self.touchend, false);
}
function touchstart(e) {
startTime = new Date().getTime();
gbMove = false;
console.log('Received Event touchstart');
}
function touchmove(e) {
// gbMove = true;
console.log('Received Event touchmove');
}
function touchend(e) {
endTime = new Date().getTime();
if (!gbMove && (endTime - startTime) / 1000 > 1) {
s = window.getSelection();
var range = s.getRangeAt(0);
var node = s.anchorNode;
while (range.toString().indexOf(' ') != 0) {
range.setStart(node, (range.startOffset - 1));
}
range.setStart(node, range.startOffset + 1);
do {
range.setEnd(node, range.endOffset + 1);
} while (range.toString().indexOf(' ') == -1 && range.toString().trim() != '' && range.endOffset < node.length);
var str = range.toString().trim();
alert(str);
}
}
</script>
</body>