右键菜单

思路

1、遮蔽原来的默认右键菜单

2、新建右键菜单跟随鼠标移动

3、注意边界处的位置变化

4、自定义右键内容的具体效果

具体

这样的事件涉及到有关contextmenu事件,阻止默认事件,获取鼠标点击位置,涉及到offsetWidth等等,具体展示

offsetWidth:元素在水平方向占据的空间,只包括width padding border

offsetHeight:元素在垂直方向占据的空间,只包括height padding border

offsetTop:偏移量,相对于已定位元素的后代元素,返回的是相对于祖先元素,否则返回相对文档元素,返回的是top距离

offsetLeft:偏移量,相对于已定位元素的后代元素,返回的是相对于祖先元素,否则返回相对文档元素,返回的是left距离

clientX:可视区的坐标,为横坐标;当然也是event.clientX

clientY:可视区的坐标,为纵坐标,同理event.clientY

clientWidth:只包含width padding

clientHeight:只包含height padding

对于获取整个的页面的可以 document.documentElement.clientWidth||document.body.clientWidth ,不包含滚动条

scrollTop:滚动的距离,包含边框

scrollLeft::滚动的距离,包含边框

对于获取scrollTop可以 document.documentElement.scrollTop||document.body.scrollTop

scrollWidth:没有滚动条下,页面的总宽度

scrollHeight:没有滚动条下,页面的总高度,对于这两个属性,不同浏览器有所差异,必须兼容性,js高程上有的。

pageX/Y:整个页面的坐标,不是clientX/Y可视区的坐标

screenX/Y:参照点是整个屏幕的左上角,不限于浏览器

         //右键菜单重置
document.oncontextmenu=function(event){
var event=event||window.event
event.preventDefault() //阻止默认事件
event.returnValue=false
var clientWidth=document.documentElement.clientWidth
var clientHeight=document.documentElement.clientHeight
move.style.display='block'
//基于当前可视区的
if(clientHeight-event.pageY>=move.offsetHeight){
move.style.top=event.pageY+'px'
}else{
move.style.top=(event.pageY-move.offsetHeight)+'px'
}
if(clientWidth-event.pageX>=move.offsetWidth){
move.style.left=event.pageX+'px'
}else{
move.style.left=(event.pageX-move.offsetWidth)+'px'
}
}

这是主要的代码,阻止默认事件,限定所要展示的菜单的位置

当然,对于里面所要跳转的页面,只需添加即可,比如:

           <li><a href="javascript:history.go(1)">返回</a></li>
<li><a href="javascript:history.go(-1)">前进</a></li>
<li><a href="javascript:location.reload()">重新加载</a></li>

返回和前进,重新加载,用到BOM的相关知识。

javascript右键菜单分析的更多相关文章

  1. js实现自定义右键菜单--兼容IE、Firefox、Chrome

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  2. JavaScript模拟鼠标右键菜单

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. JavaScript自定义右键菜单

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. javascript自定义浏览器右键菜单

    javascript自定义浏览器右键菜单   在书上看到document对象还有一个contextmenu事件,但是不知为什么w3school中找不到这个耶... 利用这个特性写了个浏览器的右键菜单, ...

  5. ASP.NET Boilerplate 学习 AspNet Core2 浏览器缓存使用 c#基础,单线程,跨线程访问和线程带参数 wpf 禁用启用webbroswer右键菜单 EF Core 2.0使用MsSql/MySql实现DB First和Code First ASP.NET Core部署到Windows IIS QRCode.js:使用 JavaScript 生成

    ASP.NET Boilerplate 学习   1.在http://www.aspnetboilerplate.com/Templates 网站下载ABP模版 2.解压后打开解决方案,解决方案目录: ...

  6. JavaScript实现自定义右键菜单

    JavaScript实现自定义右键菜单,思路如下: 1. 屏蔽默认右键事件: 2. 隐藏自定义的菜单模块(如div.ul等): 3. 右键点击特定或非特定区域,显示菜单模块: 4. 再次点击,隐藏菜单 ...

  7. JavaScript 中禁止用户右键菜单,复制,选取,Ctrl,Alt,Shift. 获取宽高,清除浮动

    //禁用右键菜单 document.oncontextmenu = function(){ event.returnValue = false; } //禁用选取内容 document.onselec ...

  8. JavaScript 自定义html元素鼠标右键菜单

    自定义html元素鼠标右键菜单 实现思路 在触发contextmenu事件时,取消默认行为(也就是阻止浏览器显示自带的菜单),获取右键事件对象,来确定鼠标的点击位置,作为显示菜单的left和top值 ...

  9. 打造html右键菜单

    今天是给大家介绍一款在网页上使用的右键菜单,原作者的网址是:http://51jsr.javaeye.com/blog/305517 这个右键菜单已经非常优秀,不过呢.却是IE Only,而且在DTD ...

随机推荐

  1. C#之文件缓存

    写在开头 今天就放假了,照理说应该写今年的总结了,但是回头一看,很久没有写过技术类的文字了,还是先不吐槽了. 关于文件缓存 写了很多的代码,常常在写EXE(定时任务)或者写小站点(数据的使用和客户端调 ...

  2. AJAX入门第一篇就够了

    什么是Ajax Ajax(Asynchronous JavaScript and XML) 异步JavaScript和XML Ajax实际上是下面这几种技术的融合: (1)XHTML和CSS的基于标准 ...

  3. Linux系统下LNMP一键搭建Linux、PHP、MySQL环境(适合新手搭建linux下的web生成环境)

    一. 首先要解释一下,什么是LNMP,LNMP起源于LAMP,LAMP是Linux+Apache+Mysql/MariaDB+Perl/PHP/Python的缩写,这里将Web服务端的Apache替换 ...

  4. 关于http与https之间的区别

    年前的时候进行了一家公司的电话面试两轮,视频面试一轮(已拿到offer),过程中遇到了一个关于http与https的问题,当时回答的并不好,今天将其进行了总结和整理,望读者喜欢: 前言 谷歌在2018 ...

  5. ASP.NET Core Razor 页面使用指南

    ASP.NET Core Razor 页面作为 ASP.NET Core 2.0的一部分发布,它是基于页面的全新的Web开发框架.如果您想学习如何使用 ASP.NET Core Razor 页面,可以 ...

  6. xBIM WeXplorer xViewer 浏览器检查

    目录 基础 xBIM WeXplorer 简要介绍 xBIM WeXplorer xViewer 基本应用 xBIM WeXplorer xViewer 浏览器检查 xBIM WeXplorer xV ...

  7. nginx上支持.htaccess伪静态的配置实例

    本文介绍下,在nginx上配置.htaccess伪静态的方法,有需要的朋友参考下吧. 在apache上.htaccess转向,只要apache编译的时候指明支持rewrite模块即可. 但是换到ngi ...

  8. vagrant启动报错The following SSH command responded with a no

    vagrant package打包生成box,以这个box为基础模板,打造vagrant环境,启动vagrant报错 angel:vagrant $ vagrant up Bringing machi ...

  9. SDP(7):Cassandra- Cassandra-Engine:Streaming

    akka在alpakka工具包里提供了对cassandra数据库的streaming功能.简单来讲就是用一个CQL-statement读取cassandra数据并产生akka-stream的Sourc ...

  10. 可拖动布局之Gridster

    看过bootstrap可视化布局系统的人是不是都会对页面元素的拖拽有着很大的兴趣?下面呢,楼主就给大家讲两个楼主知道的拖拽小插件吧. 一.gridster 1.了解gridster 后续官网:http ...