连载:

1《教你用Bootstrap开发漂亮的前端界面》

2.《Bootstrap开发漂亮的前端界面之实现原理》

网页中的自定义右键菜单越来越普遍,自定义右键菜单可以增强用户体验,让用户使用软件更加的简便,今天我们就来基于Bootstrap来开发自己的自定义右键菜单。

一、首先,准备好自定义菜单,供单击右键展示; 菜单默认不可见,可以通过 style="display:block" 进行调试预览;

 
<ul class="dropdown-menu">
<li>
<a href="javascript:;">添加</a>
</li>
<li>
<a href="javascript:;">删除</a>
</li>
<li>
<a href="javascript:;">关于我们</a>
</li>
</ul>

二、实现点击右键显示自定义菜单;

正确的显示右键菜单,我们需要完成以下3个步骤:

1.右键菜单是一种事件行为;         注册事件,监听浏览器的右键菜单;

2.默认情况下,出现浏览器系统菜单;  阻止浏览器默认事件行为;

3.显示自定义菜单;          根据用户点击的坐标位置,设置自定义菜单的位置,然后进行显示;

$(function(){
//页面文档对象注册上下文(右键)菜单事件
$(document).on("contextmenu",function(event){
var pageX = event.pageX;//鼠标单击的x坐标
var pageY = event.pageY;//鼠标单击的y坐标 //获取菜单并设置菜单的位置
$("#contextMenu").css({
left:pageX+"px",//设置菜单离页面左边距离,left等效于x坐标
top:pageY+"px"//设置菜单离页面上边距离,top等效于y坐标
}).stop().fadeIn(500);//显示使用淡入效果,比如不需要动画可以使用show()替换; event.preventDefault();//阻止浏览器与事件相关的默认行为;此处就是弹出右键菜单
}); });

三、隐藏自定义菜单;当用户点击菜单某一项或点击其他区域进行隐藏;

实现方式:用户使用鼠标的左键或中键都要进行自定义菜单的隐藏;设计思路与默认浏览器隐藏菜单方式一致;

//文档对象注册鼠标按下事件;
$(document).on("mousedown",function(event){
//button等于0代表左键,button等于1代表中键
if(event.button==0 || event.button==1){
$("#contextMenu").stop().fadeOut(200);//获取菜单停止动画,进行隐藏使用淡出效果
}
});
四、处理菜单溢出;请尝试,在页面的最右边点击右键菜单,你会发现菜单会超出页面;

实现方式:判断横向位置(pageX)+自定义菜单宽度之和,如果超过页面宽度及为溢出,需要特殊处理;

      

//文档对象注册上下文(右键)菜单事件
$(document).on("contextmenu",function(event){
var pageX = event.pageX;//鼠标单击的x坐标
var pageY = event.pageY;//鼠标单击的y坐标 //获取菜单
var contextMenu = $("#contextMenu"); var cssObj = {
top:pageY+"px",//设置菜单离页面上边距离,top等效于y坐标
left:pageX+"px"//设置菜单离页面左边距离,left等效于x坐标
}; //判断横向位置(pageX)+自定义菜单宽度之和,如果超过页面宽度及为溢出,需要特殊处理;
var menuWidth = contextMenu.width();
var pageWidth = $(document).width();
if(pageX+contextMenu.width()>pageWidth){
cssObj.left = pageWidth-menuWidth-5+"px"; //-5是预留右边一点空隙,距离右边太紧不太美观;
}
//设置菜单的位置
$("#contextMenu").css(cssObj).stop().fadeIn(200);//显示使用淡入效果,比如不需要动画可以使用show()替换; event.preventDefault();//阻止浏览器与事件相关的默认行为;此处就是弹出右键菜单
});

如果你是按照本文章步骤进行编写,那么你只需要打开你的自己网页,就可以看到正确的效果了,Over。

【连载】Bootstrap开发漂亮的前端界面之自定义右键菜单的更多相关文章

  1. 【连载】Bootstrap开发漂亮的前端界面之插件开发

    相关文章: 1.<教你用Bootstrap开发漂亮的前端界面> 2.<Bootstrap开发漂亮的前端界面之实现原理> 3.<Bootstrap开发漂亮的前端界面之自定义 ...

  2. 教你用Bootstrap开发漂亮的前端界面

    Bootstrap介绍: Bootstrap 是最受欢迎的 HTML.CSS 和 JS 框架,用于开发响应式布局.移动设备优先的 WEB 项目. Bootstrap的特点: 一.预处理脚本:虽然可以直 ...

  3. Bootstrap开发漂亮的前端界面之实现原理

    引:Bootstrap采用的是一个“响应式”设计.响应式Web 设计是一个让用户通过各种尺寸的设备浏览网站获得良好的视觉效果的方法.例如,您先在计算机显示器上浏览一个网站,然后再智能手机上浏览,智能手 ...

  4. ASP.NET Aries 入门开发教程8:树型列表及自定义右键菜单

    前言: 前面几篇重点都在讲普通列表的相关操作. 本篇主要讲树型列表的操作. 框架在设计时,已经把树型列表和普通列表全面统一了操作,用法几乎是一致的. 下面介绍一些差距化的内容: 1:树型列表绑定: v ...

  5. 推荐一款基于bootstrap的漂亮的前端模板—inspinia_admin

    首先给出Demo网址:http://cn.inspinia.cn inspinia admin 最新版 bootstrap 完全响应式后台管理模板,采用扁平化设计.使用Bootstrap 3+ Fra ...

  6. 使用DotNetBar制作漂亮的WinFrom界面,自定义AgileEAS.NET SOA平台WinClient主界面

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  7. 为vscode开发一款svn右键菜单扩展

    在我平时的工作中会经常用到svn blame这个命令,但是vscode现有的svn扩展普遍都不能自定义右键菜单. 所以我产生一个想法:自己动手为vscode开发一款svn的扩展来定制右键菜单,本文记录 ...

  8. 基于bootstrap的漂亮网站后台管理界面框架汇总

    基于bootstrap的漂亮网站后台管理界面框架汇总 10个最新的 Bootstrap 3 管理模板 这里分享的 10 个模板是从最新的 Bootstrap 3 管理模板集合中挑选出来的,可以帮助你用 ...

  9. 循序渐进BootstrapVue,开发公司门户网站(1)---基于Bootstrap网站模板构建组件界面

    在前面随笔<使用BootstrapVue相关组件,构建Vue项目界面>概括性的介绍了BootstrapVue的使用过程,其实选用这个主要就是希望能够用来构建一些公司门户网站的内容,毕竟基于 ...

随机推荐

  1. set 和select 的区别

    简单赋值是没有区别的

  2. js中json对象取键和值

    1.json中输出各个键值: var ohp = {"星期一":18,"星期二":16,"星期三":19,"星期四":1 ...

  3. 【洛谷P2577】[ZJOI2005]午餐

    午餐 题目链接 DP题都辣么毒瘤的么.. 首先,看一下题解 我们就有了思路: 贪心:显然,让吃饭慢的先打饭,sort一遍(证明?不存在的.. DP:f[i][j][k]表示前i个人,窗口1的打饭时间为 ...

  4. Android学习笔记_55_Tween动画 (渐变、缩放、位移、旋转)

    Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变).第二类就是 Frame动画,即顺序的播放事先做好的图像,与gi ...

  5. Java8函数之旅 (六) -- 使用lambda实现Java的尾递归

    前言 本篇介绍的不是什么新知识,而是对前面讲解的一些知识的综合运用.众所周知,递归是解决复杂问题的一个很有效的方式,也是函数式语言的核心,在一些函数式语言中,是没有迭代与while这种概念的,因为此类 ...

  6. C#实现异步GET的方法

    using System; using System.Collections.Generic; using System.Configuration; using System.IO; using S ...

  7. Mac上从gitlab上拉项目实战总结

    建立公钥,私钥 https://blog.csdn.net/jigongdajiang/article/details/65441923 2019-01-03 比较喜欢使用图形化界面

  8. 关于J2EE里面getContextPath()和getRealPath()的区别

    一直老搞不清楚这两个方法的区别,只知道他们都是拿来获取地址的.今天特意写了个小demo试了一下,代码如下: @Override protected void service(HttpServletRe ...

  9. 富文本编辑器 summernote.js

    1.引用js  可在 https://summernote.org/ 官网下载 ,并查看详细的API  引入:summernote.js 和 summernote-zh-CN.js 以及样式文件:su ...

  10. 解决 Android sdk content loader 0%

    第一次遇到这种情况,真的很头痛,没办法 ,是问题就要解决,在网上找了一些方法,归纳了下来. 方法一(关闭后重启): 遇到Eclipse右下角一直显示“Android sdk content loade ...