Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.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 jQuery文本突出显示菜单工作不正常_Javascript_Html_Jquery_Css - Fatal编程技术网

Javascript jQuery文本突出显示菜单工作不正常

Javascript jQuery文本突出显示菜单工作不正常,javascript,html,jquery,css,Javascript,Html,Jquery,Css,我有一个中等风格的文本突出显示菜单,如下所示,当您突出显示正文中的一段文本时,该菜单会起作用。我在前三段中做得很好。但是,当您向下滚动并选择文本时,菜单不会显示在正确的位置,而是显示在页面的顶部。如果有人能在这件事上提供帮助,我将不胜感激 HTML getBoundingClientRect()获取与窗口(仅页面的当前可见部分)相关的值,而不是与文档(整个页面)相关的值。 因此,它在计算其值时也会考虑滚动 更新此行: top: ((p.top + window.scrollY) - menu

我有一个中等风格的文本突出显示菜单,如下所示,当您突出显示正文中的一段文本时,该菜单会起作用。我在前三段中做得很好。但是,当您向下滚动并选择文本时,菜单不会显示在正确的位置,而是显示在页面的顶部。如果有人能在这件事上提供帮助,我将不胜感激

HTML

getBoundingClientRect()获取与窗口(仅页面的当前可见部分)相关的值,而不是与文档(整个页面)相关的值。 因此,它在计算其值时也会考虑滚动

更新此行:

top: ((p.top + window.scrollY) - menu.height() - 10),
$(function(){
  var menu = $('#highlight_menu');
  
  $(document.body).on('mouseup', function (evt) {
    var s = document.getSelection(),
      r = s.getRangeAt(0);
    if (r && s.toString()) {
      var p = r.getBoundingClientRect();
      if (p.left || p.top) {
        menu.css({
          left: (p.left + (p.width / 2)) - (menu.width() / 2),
          top: (p.top - menu.height() - 10),
          display: 'block',
          opacity: 0
      })
      .animate({
        opacity:1
      }, 300);
      
      setTimeout(function() {
        menu.addClass('highlight_menu_animate');
      }, 10);
      return;
    }
    }
    menu.animate({ opacity:0 }, function () {
      menu.hide().removeClass('highlight_menu_animate');
  });
  });
});
top: ((p.top + window.scrollY) - menu.height() - 10),