Javascript 从网页获取经过时间后的文本选择

Javascript 从网页获取经过时间后的文本选择,javascript,html,dom,Javascript,Html,Dom,我想得到选中的文本,还有DOM元素,以及在选择完成几秒钟后文本选择偏移量在网页中的结束位置 就像高亮显示一些文本一样,如果在3秒内该文本仍然高亮显示,那么我想运行一些代码,这些代码以高亮显示的文本和最接近文本祖先的DOM元素作为参数 我发现有一个selectstart事件 还有selectionchange事件,但我没有看到selectend事件 以下是一些想法: document.addEventListener('selectionchange', () => { // if (M

我想得到选中的文本,还有DOM元素,以及在选择完成几秒钟后文本选择偏移量在网页中的结束位置

就像高亮显示一些文本一样,如果在3秒内该文本仍然高亮显示,那么我想运行一些代码,这些代码以高亮显示的文本和最接近文本祖先的DOM元素作为参数

我发现有一个selectstart事件

还有selectionchange事件,但我没有看到selectend事件

以下是一些想法:

document.addEventListener('selectionchange', () => {
  // if (Math.abs(Date.now().getTime() - process_request_start.getTime()) / 1000 <= 5
  // if (is_processing_request === true) {
  //   return;
  // }

  setTimeout(() => {
    if (is_processing_request === true) {
      return;
    } else {
      is_processing_request = true;
      console.log(document.getSelection());
      is_processing_request = false;
    }
  }, 5000);
});

因此,我正在寻找提供/模拟selectend的优雅代码示例,我有一些使用setTimeout的工作想法,但正在寻找任何其他解决方案,更喜欢工作代码,而不是假设任何Jquery/libs,只是本机DOM环境

对于这个特殊问题,clearTimeout是您的朋友!您只需取消超时,直到时间过去。对于本例,我将其缩短为2秒:

让等待=空; document.addEventListener'selectionchange',=>{ 如果等待时间超过等待时间; 等待=设置超时=>{ console.logdocument.getSelection.toString; 等待=空; }, 2000; }; Lorem ipsum dolor sit amet,是一位杰出的献身者。维韦拉·帕塞勒斯·维韦拉·迪亚姆·奎斯·阿利奎特·普尔维纳尔。Donec fringilla Feugia Elite,pretium turpis suscipit et.Integer tempus massa pellentesque arcu sagittis iaculis。在faucibus中,Interdum和malesuada在第一次同侧前就出名了。杜伊斯·福西布斯前庭节律。多洛·鲁特鲁姆(dolor rutrum)的Morbi,malesuada ex-sed,临时。埃尼安·维韦拉·阿库姆桑·阿库姆桑。奥古斯特·泰卢斯的权贵休庭,nec的权贵休庭。这是一种致命的疾病。这是一个非常有效的方法。这是一个很好的例子。在arcu diam,bibendum ac enim vel,Vignessim vehicula quam。不要只做权杖,亨德雷特是朗卡斯,密苏里州。请把一瓶啤酒换成苏打水。生活中的不平等。 在nisl tristique,格言justout,concertetur risus。奥尔奇权贵吊牌,奥纳维尔庄园权杖。为猫咪提供优质服务,为nec提供优质服务。普罗因·弗林吉利亚·里苏斯。临时身份证,比如酒后驾车。整数id多尔·马萨。一对一,一对一,一对一。在非码头上,我们坐在那里。前庭勃朗特秃鹫按摩沙,但不属于大法官。拉奥里特拍卖人索利西图丁。这是一种不安全的食品。整数拍卖商Comodo turpis,一家ultricies sem lacinia iaculis。 我是马蒂斯·内克,我是莱克图斯的贵人。自由女神像、芦苇和马萨a、ultricies fringilla justo。佩伦茨克在《猫与狗》中的表现。莫里斯·利奥、普雷蒂姆·奎斯·莱克托、尤里西斯·内克元素。Nam suscipit ullamcorper neque sed iaculis。这是一个很好的例子。非利奥库苏斯的悬韧带,在maximus sem facilisis中。但非麦格纳·奎斯·普勒斯·佩伦茨克拍卖人塞德·塞德·洛雷姆。埃尼安·塞德·亚库利斯·梅特斯,在比本杜姆自由城。在酒后驾车时,佩伦茨克是最受欢迎的。这是劳里特之门,我是一名医生。 毛里斯·波苏尔·坦普斯·自由和乌兰科珀。埃尼安ac accumsan enim。猫科动物的权杖,是一对一对的,是一位智者。时间和时间都是空的。前庭前庭。埃蒂亚姆·布兰迪特·利奥·奥迪奥(Etiam blandit leo odio),ac fringilla ante molestie nec。塞德·康莫多是一辆finibus康莫多。
Fusce-sed fringilla tellus。同侧矢状肌。缺陷、缺陷、缺陷和缺陷、后果。Aenean lacus augue,Placelat id odio vitae,imperdiet sodales mauris。在奥纳雷,有一个中间的前庭。Fusce ultrices,一种非莫利斯调味品,是一种名言,由hendrerit magna dolor和Morbi faucibus interdum mattis等提供。Duis vel luctus sem,精英之门酒店。在孕期,利奥在拉奥里特·亚库利斯,我是奥迪奥·乌尔特里塞斯·努拉,我的名言是梅特斯·埃尼姆·ac·莫里斯。这是一个自由的世界。梅塞纳斯·内克·卢克图斯·夸姆。埃尼安和洛博蒂是自由的,是普尔文纳猫。前庭是多洛·奥纳雷、乌尔特里斯·胡斯托·农、阿利夸姆·菲利斯。毛里斯·萨吉提斯·鲁特姆·米(Mauris sagittis rutrum mi),坐在阿梅特·卢克图斯·农(amet Emperm lorem luctus non)。最大斜颈前肌,前足前肌,前足前肌,前足前肌。这是一个很好的解释,一个很好的解释,一个很好的解释。。。您可以在selectstart上设置一个标志,而不是实现selectend,并在mouseup回调中检查您的标志是否存在,以侦听文档上的mouseup事件。如果是,则表示您刚从选定的活动中到达。。。然后使用window.getSelection方法检查startContainer,获取anchorNode和focusNode的范围,这就是所选内容…棒极了,成功了 如所愿。现在寻找一种获得x-y定位的方法&相应的DOM元素,我想在这个选择的上方放置一个工具提示弹出窗口