javascript - 在用户选择旁边显示一个菜单
问题描述
我有一个场景:
- 突出显示文本时应显示菜单/弹出窗口
- 菜单 应该从用户光标向右显示 5 个像素,向下显示 5 个像素
虽然我能够实现第一个,但定位菜单让我很难。我尝试使用它来解决它event.pageX
,event.pageY
但它只适用于某些情况
这是我的代码
$(frameBody).on('mouseup', function (event) {
var frame = $("#" + activeId).find('.vIframe')[0];
var selection = $(frame)[0].contentWindow.getSelection();
var exportMenu = $("#exportMenu") ;
range = selection.getRangeAt(0);
var boundary = event.target.getBoundingClientRect();
var offset = $(frame).offset();
if (selection.toString().trim().length > 0) {
$(exportMenu).css('display', 'inline-block');
$(exportMenu).menu('open');
$(exportMenu).css({
'left': event.pageX + offset.left + $(exportMenu).width()/2 + 5,
'top': boundary.top + $(exportMenu).height() + 5
});
if ($($(frame)[0].contentWindow).height() < parseInt($(exportMenu).css('top'))) {
$(exportMenu).css({
'left': event.pageX,
'top': event.pageY - 5
});
}
} else {
$(exportMenu).css('display', 'none');
}
event.stopPropagation();
});
任何帮助,将不胜感激。
谢谢。
解决方案
这就是我最终解决这个问题的方式。
$(frameBody).on('mouseup', function (event) {
var activeId = TabManager.getActiveId();
var frame = $("#" + activeId).find('.viewerIframe')[0];
var selection = $(frame)[0].contentWindow.getSelection();
var exportMenu = $("#" + TabManager.getActiveId()).find("#exportMenu")[0];
range = selection.getRangeAt(0);
var zoomfactor = $(frame).attr("zoom");
selectionNode = $(frame)[0].contentDocument.createElement("highlights-start")
if (selection.toString().trim().length > 0) {
var range = selection.getRangeAt(0);
newRange = document.createRange();
newRange.setStart(selection.focusNode, range.endOffset);
newRange.insertNode(selectionNode );
$(exportMenu).css('display', 'inline-block');
$(exportMenu).menu('open');
$(exportMenu).css({
'top': $(selectionNode).offset().top + $(exportMenu).height() / 2 - 20 + 'px',
'left': $(selectionNode).offset().left+ 'px'
});
else {
$(exportMenu).css('display', 'none');
}
event.stopPropagation();
});
推荐阅读
- ios - 为什么使用排序键作为 filterExpression 时 AWSDynamoDBScanExpression 返回空?
- python - 多个虚拟机的 Google PubSub 订阅名称?
- excel - 如何使用从用户表单中提取的信息解析一行
- unit-testing - 如何对在 switch 语句中创建多个对象的方法进行单元测试?如何嘲笑他们?
- xamarin - 如何在 xamarin 表单中大写输入和选择器?
- ruby-on-rails - RoR-显示页面不显示用户名
- macos - docker 容器网络未按预期工作
- html - 如何仅使用内联样式将表格行中的图像链接旁边的文本链接对齐?
- javascript - 如何在反应中向选项卡添加工具提示?
- angular - Angular Firestore - 异步请求有问题?