【连载】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开发漂亮的前端界面之自定义右键菜单的更多相关文章
- 【连载】Bootstrap开发漂亮的前端界面之插件开发
相关文章: 1.<教你用Bootstrap开发漂亮的前端界面> 2.<Bootstrap开发漂亮的前端界面之实现原理> 3.<Bootstrap开发漂亮的前端界面之自定义 ...
- 教你用Bootstrap开发漂亮的前端界面
Bootstrap介绍: Bootstrap 是最受欢迎的 HTML.CSS 和 JS 框架,用于开发响应式布局.移动设备优先的 WEB 项目. Bootstrap的特点: 一.预处理脚本:虽然可以直 ...
- Bootstrap开发漂亮的前端界面之实现原理
引:Bootstrap采用的是一个“响应式”设计.响应式Web 设计是一个让用户通过各种尺寸的设备浏览网站获得良好的视觉效果的方法.例如,您先在计算机显示器上浏览一个网站,然后再智能手机上浏览,智能手 ...
- ASP.NET Aries 入门开发教程8:树型列表及自定义右键菜单
前言: 前面几篇重点都在讲普通列表的相关操作. 本篇主要讲树型列表的操作. 框架在设计时,已经把树型列表和普通列表全面统一了操作,用法几乎是一致的. 下面介绍一些差距化的内容: 1:树型列表绑定: v ...
- 推荐一款基于bootstrap的漂亮的前端模板—inspinia_admin
首先给出Demo网址:http://cn.inspinia.cn inspinia admin 最新版 bootstrap 完全响应式后台管理模板,采用扁平化设计.使用Bootstrap 3+ Fra ...
- 使用DotNetBar制作漂亮的WinFrom界面,自定义AgileEAS.NET SOA平台WinClient主界面
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
- 为vscode开发一款svn右键菜单扩展
在我平时的工作中会经常用到svn blame这个命令,但是vscode现有的svn扩展普遍都不能自定义右键菜单. 所以我产生一个想法:自己动手为vscode开发一款svn的扩展来定制右键菜单,本文记录 ...
- 基于bootstrap的漂亮网站后台管理界面框架汇总
基于bootstrap的漂亮网站后台管理界面框架汇总 10个最新的 Bootstrap 3 管理模板 这里分享的 10 个模板是从最新的 Bootstrap 3 管理模板集合中挑选出来的,可以帮助你用 ...
- 循序渐进BootstrapVue,开发公司门户网站(1)---基于Bootstrap网站模板构建组件界面
在前面随笔<使用BootstrapVue相关组件,构建Vue项目界面>概括性的介绍了BootstrapVue的使用过程,其实选用这个主要就是希望能够用来构建一些公司门户网站的内容,毕竟基于 ...
随机推荐
- ssh公钥
想要将本地电脑的文件传到github上,必须要通过建立本地电脑与github帐号的ssh公钥才行. 方式: 用命令ssh-keygen产生ssh公钥(之后一直按回车就好),然后cd到~/.ssh目录, ...
- D - Going Home POJ - 2195 网络流
On a grid map there are n little men and n houses. In each unit time, every little man can move one ...
- vue---组件引入及使用的几种方式
在vue的项目开发过程中,基本都是基于组件化开发项目,总结下使用组件的几个点: 一.@符号的使用 在vue项目中 @ 符号代表的是根目录,即 src 目录. 二.组件的放置位置 在项目中,公用的组件放 ...
- 用java语言编写的简单二叉树
package com.cjonline.foundation.evisa; public class TestTree { private int data=-1; private TestTree ...
- insertAdjacentHTML与innerHTML
insertAdjacentHTML:insertAdjacentHTML() 将指定的文本解析为HTML或XML,并将结果节点插入到DOM树中的指定位置.它不会重新解析它正在使用的元素,因此它不会破 ...
- 一个logstash引发的连环案,关于logstash提示:Reached open files limit: 4095, set by the 'max_open_files' option or default, files yet to open: 375248
不多说,直接上问题.版本logstash-2.4.0,启动后提示错误: !!! Please upgrade your java version, the current version '1.7.0 ...
- Angularjs基础(十二)
ng-model-options 描述:规定如何更新模型 实例: 在失去焦点时绑定输入框的值scope 变量中. <div ng-app="myApp" ng-control ...
- zepto 基础知识(4)
61.prev prev() 类型:collection prev(selector) 类型:collection 获取对相集合中每一个元素的钱一个兄弟节点,通过选择器来进行过滤 62.prev pr ...
- Javascript的加载
最新博客站点:欢迎来访 1. 浏览器加载 (1) 同步加载 在网页中,浏览器加载js文件的方式是通过<script>标签.如下所示: //内嵌脚本 <script type= ...
- Asp.Net Core 使用Docker进行容器化部署(二)使用Nginx进行反向代理
上一篇介绍了Asp.Net 程序在Docker中的部署,这篇介绍使用Nginx对Docker的实例进行反向代理 一.修改Nginx配置文件 使用winscp链接Liunx服务器,在/ect/nginx ...