`
xinklabi
  • 浏览: 1591822 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

右键弹出菜单的定位问题

 
阅读更多

    现在做的项目中有一个功能是在创建的一个类似word document map的目录上右键时弹出菜单,弹出的菜单正好在鼠标单击事件发生的位置,这就存在了这个菜单的定位问题。

这个功能我首先是从ztree的一个右键功能例子中拷贝过来的,在ztree的例子中运行的好好的,但是粘贴到自己的页面中就怎么定位都不行,研究了很长时间,后来发现这个东西跟我的页面中的父层div的position属性有关,去掉position属性,运行可以成功,但是只要拖动滚动条就又不行了,反复研究最后才研究出问题所在,不禁调侃一句“这些小问题可别想考验强迫人的执着精神”,哈哈~

    右键菜单是一个最初隐藏的,position为absolute的div,通过设置css的top和left属性完成定位,但是有个问题是,它会相对于最近的position为relative的父层div进行定位,若没有的话就相对于body定位了。我的页面中ztree外层有两个position为relative的父层div。最开始我按照ztree例子中那样做的,以event.clientX,event.clientY来设置menu div的left和top值,但是定位有很大的偏差,我尝试删除外层的div去模拟例子中的html格式,最后发现是受外层postion为relative这些div的影响,例子中是没有postion为relative的div的。于是我查资料,了解了相对定位和绝对定位的问题,然后知道menu div是相对于最近的position为relative的div进行定位的,而event.cliextX和event.clientY是相对于文档窗口的位移,那么我需要减去最近menu div最近的position为relative的div相对于文档窗口的位移(使用$("#bodydiv").offset().top和left获得),确实这样做的确成功了,但是新问题又出现了,那就是拖动滚动条的话定位又偏差了,这时候我有点怀疑event.clentX/Y和jquery的offset到底代表怎样的位移,回头研究例子中的定位,为什么它就不受滚动条的影响,最后才发现它的menu div外层是个iframe,所以它就可以直接使用鼠标事件发生点的位移作为menu div的坐标。最后,我通过$(document).scrollTop()和$(document).scrollLeft()获得滚动条的位移,然后加上这段位移,最后获得了准确定位。没啥困难的,只要你执着研究下去,并能使用灵活的方法!

分享到:
评论

相关推荐

    js固定区块右键弹出菜单代码.zip

    在JavaScript编程领域中,右键弹出菜单是一种常见的交互效果,用于提供用户自定义的操作选项。这个"js固定区块右键弹出菜单代码.zip"压缩包包含了一个实现此类功能的代码示例。在这个项目中,开发者可以学习如何利用...

    jquery 右键弹出菜单

    在IT领域,jQuery是一款广泛...总结来说,实现"jquery 右键弹出菜单"功能,关键在于利用jQuery的事件处理、DOM操作以及CSS定位。通过结合这些技术,我们可以创建一个用户友好的交互式菜单,提升网站或应用的用户体验。

    很酷的右键弹出菜单

    在IT行业中,右键弹出菜单是一个常见的交互设计元素,尤其在网页开发中扮演着重要角色。这个"很酷的右键弹出菜单"可能是开发者或设计师为了提供更丰富的用户体验而设计的一种创新解决方案。让我们深入探讨一下这个...

    MFC右键弹出菜单

    本篇将深入讲解如何在MFC环境中实现右键弹出菜单,这对于任何希望进行桌面应用开发的初学者来说都是一个基础且重要的知识点。 首先,右键弹出菜单,也称为上下文菜单,是在用户对窗口或控件进行右键点击时显示的一...

    RightClickMenu漂亮简单的右键弹出菜单

    在网页设计中,右键弹出菜单是一种常见的交互元素,它为用户提供了一种快捷的访问方式,无需通过点击页面上的按钮或链接即可触发特定的功能。"RightClickMenu漂亮简单的右键弹出菜单"是一个实现此类功能的示例,旨在...

    js 单击右键弹出菜单(3级的)

    在JavaScript和CSS的世界里,创建一个右键菜单可以极大地...通过以上步骤,我们可以构建出一个功能完备且具有良好用户体验的右键菜单系统。对于更复杂的需求,还可以考虑引入jQuery或者其他库来简化代码和增强功能。

    JS右键弹出式菜单

    在网页中实现右键弹出式菜单是常见的需求,它可以为用户提供更加直观的操作体验。本文将深入探讨如何使用JavaScript来创建一个自定义的右键弹出式菜单。 首先,我们需要理解浏览器的事件模型。在JavaScript中,我们...

    网页中自定义鼠标右键弹出菜单rightMenu.zip

    在网页开发中,有时我们希望实现更个性化的用户体验,其中之一就是自定义鼠标右键弹出菜单。这个"网页中自定义鼠标右键弹出菜单rightMenu.zip"文件提供了一个使用JavaScript实现这一功能的示例。下面我们将深入探讨...

    javascript自定义右键弹出菜单实现方法.docx

    ### JavaScript自定义右键弹出菜单实现方法 在Web开发中,为了提升用户体验与功能多样性,自定义右键菜单是一种常见的交互方式。本文将详细解析如何利用JavaScript来实现一个简单的自定义右键弹出菜单,并深入探讨...

    jQuery鼠标右键弹出菜单选项.zip

    在“jQuery鼠标右键弹出菜单选项”这个项目中,我们聚焦于利用jQuery来实现鼠标右键点击时显示一个自定义的菜单。这个功能常见于许多网站,提供用户友好的交互体验。 首先,我们需要理解HTML5的基础结构。HTML5是...

    js实现右键弹出自定义菜单

    为了实现右键弹出菜单,我们监听`document`的`onmousedown`事件,当检测到右键被按下(`e.button === 2`)时,首先屏蔽系统的右键菜单(通过`document.oncontextmenu = hideSysMenu;`实现),然后获取鼠标点击的坐标...

    echarts右键菜单实例 --- 不修改源码

    3. **创建右键菜单**:在 `contextmenu` 事件的回调函数中,阻止浏览器默认的右键菜单弹出,并自定义我们的菜单。这通常涉及到CSS样式的设计以及DOM元素的创建。可以使用 `event.preventDefault()` 阻止默认菜单,...

    jQuery实现在网页任意位置点击鼠标右键弹出菜单特效源码.zip

    综上所述,"jQuery实现在网页任意位置点击鼠标右键弹出菜单特效源码.zip"这个资源提供了实现此功能的完整示例。通过学习这个源码,开发者可以了解到如何利用jQuery监听事件、动态创建及定位元素、以及实现基本的交互...

    js固定区块右键弹出菜单代码

    在网页开发中,实现“js固定区块右键弹出菜单代码”是一项常见的需求,它能够为用户提供更加便捷的交互体验。这个技术主要依赖于JavaScript语言,结合HTML和CSS来完成。接下来,我们将深入探讨如何利用JavaScript...

    Js+DVML很酷漂亮实用的右键弹出菜单

    根据给定的信息,本文将详细解释“Js+DVML很酷漂亮实用的右键弹出菜单”的实现原理、代码分析及应用场景。 ### 一、基础知识介绍 #### 1.1 JavaScript (Js) JavaScript 是一种轻量级的编程语言,常用于网页开发中...

    HTML实现右键菜单

    例如,当用户点击“菜单项1”时,可以弹出一个警告框: ```javascript $('#custom-context-menu li').on('click', function() { alert('选择了' + $(this).text()); $('#custom-context-menu').hide(); }); ``` ...

    jQuery实现可以控制在一定区域内的鼠标右键弹出菜单效果.zip

    总结起来,实现jQuery控制在一定区域内的鼠标右键弹出菜单效果,主要涉及以下步骤: 1. 创建HTML结构,包括触发右键菜单的区域和隐藏的菜单列表。 2. 使用jQuery的`.on()`方法绑定`contextmenu`事件,阻止默认菜单并...

    ContextMenuStrip左键弹出菜单,右键单击无效

    环境:C# 2008 ...特效:左键单击按钮,在按钮左下角(可以自己定位)弹出ContextMenuStrip(弹出式菜单),右键单击无效(不弹出菜单)。 解压密码:lejun1984@163.com 原创辛苦,请大家支持我。欢迎大家来信交流

    Bootstrap鼠标右键下拉菜单特效

    Bootstrap本身就提供了丰富的预定义样式,我们可以利用这些样式快速构建出符合Bootstrap风格的下拉菜单。同时,通过CSS定位技巧,如绝对定位,确保下拉菜单能够准确地显示在鼠标点击的位置。 在提供的压缩包中,`...

Global site tag (gtag.js) - Google Analytics