基于JavaScript实现右键菜单和拖拽功能


Posted in Javascript onNovember 28, 2016

下面先给大家介绍下js实现的右键菜单功能,具体详情如下所示:

这一章解决的问题

1、实现右键菜单功能代码。

2、阻止默认事件的实际应用。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>右键菜单</title>
<style type="text/css">
#menu {
position: fixed;
left:0;
top:0;
width:200px;
height: 400px;
background-color: blue;
display: none;
}
</style>
</head>
<body>
<div id="menu">
</div>
<script type="text/javascript">
var menu = document.getElementById("menu");
document.oncontextmenu = function(e) {
var e = e || window.event;
//鼠标点的坐标
var oX = e.clientX;
var oY = e.clientY;
//菜单出现后的位置
menu.style.display = "block";
menu.style.left = oX + "px";
menu.style.top = oY + "px";
//阻止浏览器默认事件
return false;//一般点击右键会出现浏览器默认的右键菜单,写了这句代码就可以阻止该默认事件。
}
document.onclick = function(e) {
var e = e || window.event;
menu.style.display = "none"
}
menu.onclick = function(e) {
var e = e || window.event;
e.cancelBubble = true;
}
// document.addEventListener("contextmenu",function(e){
// var e = e || window.event;
// e.preventDefault();
// alert("menu");
// },false)
</script>
</body>
</html>

好了,以上代码详情是js实现的右键菜单功能。下面接着给大家介绍下js 拖曳功能的代码解析

这一章解决的问题

1、怎样在网页中实现拖曳功能。

2、document.documentElement与document.body的区别。

document.documentElement.clientWidth指整个html文档的宽度,document.body.clientWidth的宽度。这两者是不一样的。可以在console控制台通过console.log(document.documentElement)和console.log(document.body)进行测试。

3、getBoundingClientRect().left与offsetLeft的区别。

getBoundingClientRect()用于获取元素的left、top、right、bottom。offset获取相对于父级的left和top。getBoundingClientRect()获取相对于窗口的left、top、right、bottom。

4、e.clientX指的是鼠标点相对于窗口的坐标。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>弹窗</title>
<style type="text/css">
#mask {
position: fixed;
left:0;
top:0;
width:100%;
height: 100%;
background-color: hsla(250,100%,50%,0.6);
display: none;
}
#popBox {
position: absolute;
background-color: #fff;
width:200px;
height: 200px;
/*left:50%;
top:50%;*/
/*margin-top: -100px;
margin-left: -100px;*/
}
</style>
</head>
<body>
<button id="clickBtn">点击</button>
<div id="mask">
<div id="popBox"></div>
</div>
<script type="text/javascript">
var clickBtn = document.getElementById("clickBtn");
var popBox = document.getElementById("popBox")
var mask = document.getElementById("mask");
clickBtn.onclick = function() {
mask.style.display = "block";
popBox.style.left = (document.documentElement.clientWidth - popBox.offsetWidth)/2 + "px";
popBox.style.top = (document.documentElement.clientHeight - popBox.offsetHeight)/2 + "px";
}
popBox.onclick = function(e) {
var e = e || window.event;//e指所有代码的集合,通过它可以获取事件的各种属性。
e.cancelBubble = true;//阻止事件冒泡,即点击事件不会传递到mask这一层,意味着不会触发点击mask事件代码。
}
mask.onclick = function() {
mask.style.display = "none";
}
//拖拽 mousedown->mousemove->mouseup 
popBox.onmousedown = function(e) {
var e = e || window.event;
var pos = popBox.getBoundingClientRect();//getBoundingClientRect()用于获取元素的left、top、right、bottom。offset获取相对于父级的left和top。getBoundingClientRect()获取相对于窗口的left、top、right、bottom。
var oX = e.clientX - pos.left;//clientX指相对于窗口的坐标。
var oY = e.clientY - pos.top;
document.onmousemove = function(e) {
var e = e || window.event;
var oLeft = e.clientX - oX;
var oTop = e.clientY - oY;
popBox.style.left = oLeft + "px";
popBox.style.top = oTop + "px";
if (oLeft<0) {
popBox.style.left = 0 + "px";
};
if (oLeft>document.documentElement.clientWidth - popBox.offsetWidth) {
popBox.style.left = document.documentElement.clientWidth - popBox.offsetWidth + "px";//document.documentElement.clientWidth指整个html文档的宽度,document.body.clientWidth的宽度。这两者是不一样的。可以在console控制台通过console.log(document.documentElement)和console.log(document.body)进行测试。
}
if (oTop<0) {
popBox.style.top = 0 + "px";
};
if (oTop > document.documentElement.clientHeight - popBox.offsetHeight) {
popBox.style.top = document.documentElement.clientHeight - popBox.offsetHeight + "px";
}
}
popBox.onmouseup = function() {
document.onmousemove = null;
}
}
</script>
</body>
</html>

以上所述是小编给大家介绍的基于JavaScript实现右键菜单和拖拽功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
如果文字过长,则将过长的部分变成省略号显示
Jun 26 Javascript
javascript学习笔记(二) js一些基本概念
Jun 18 Javascript
jquery.blockUI.js上传滚动等待效果实现思路及代码
Mar 18 Javascript
jquery弹出框的用法示例(2)
Aug 26 Javascript
javascript基于HTML5 canvas制作画箭头组件
Jun 25 Javascript
javascript中数组方法汇总
Jul 07 Javascript
javascript实现禁止鼠标滚轮事件
Jul 24 Javascript
javascript replace()第二个参数为函数时的参数用法
Dec 26 Javascript
vue封装第三方插件并发布到npm的方法
Sep 25 Javascript
vuex actions传递多参数的处理方法
Sep 18 Javascript
详解Vue CLI 3.0脚手架如何mock数据
Nov 23 Javascript
移动端手指操控左右滑动的菜单
Sep 08 Javascript
JavaScript实现图片懒加载(Lazyload)
Nov 28 #Javascript
最常见的左侧分类菜单栏jQuery实现代码
Nov 28 #Javascript
JS实现页面跳转参数不丢失的方法
Nov 28 #Javascript
String字符串截取的四种方式总结
Nov 28 #Javascript
localStorage实现便签小程序
Nov 28 #Javascript
JavaScript实现邮箱地址自动匹配功能代码
Nov 28 #Javascript
Jquery循环截取字符串的方法(多出的字符串处理成&quot;...&quot;)
Nov 28 #Javascript
You might like
php实现的仿阿里巴巴实现同类产品翻页
2009/12/11 PHP
php制作动态随机验证码
2015/02/12 PHP
php多重接口的实现方法
2015/06/20 PHP
Symfony实现行为和模板中取得request参数的方法
2016/03/17 PHP
基于thinkphp6.0的success、error实现方法
2019/11/05 PHP
javascript 动态数据下的锚点错位问题解决方法
2008/12/24 Javascript
javascript 触发事件列表 比较不错
2009/09/03 Javascript
js或css实现滚动广告的几种方案
2010/01/28 Javascript
jquery attr 设定src中含有&amp;(宏)符号问题的解决方法
2011/07/26 Javascript
jqgrid 编辑添加功能详细解析
2013/11/08 Javascript
jquery ajax跨域解决方法(json方式)
2014/02/04 Javascript
jQuery多个input求和的实现方法
2015/02/12 Javascript
JQuery datepicker 用法详解
2015/12/25 Javascript
vue.js入门教程之基础语法小结
2016/09/01 Javascript
vue动态组件实现选项卡切换效果
2017/03/08 Javascript
Vue实现购物车基本功能
2020/11/08 Javascript
Python实现自动登录百度空间的方法
2017/06/10 Python
python3利用Dlib19.7实现人脸68个特征点标定
2018/02/26 Python
python爬虫之urllib库常用方法用法总结大全
2018/11/14 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
2019/06/28 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
2019/07/30 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
python实现字典嵌套列表取值
2019/12/16 Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
2020/02/24 Python
Python如何使用OS模块调用cmd
2020/02/27 Python
Django缓存Cache使用详解
2020/11/30 Python
LightInTheBox西班牙站点:全球商品在线采购
2016/09/22 全球购物
Theo + George官方网站:都柏林时尚品牌
2019/04/08 全球购物
C语言笔试集
2012/07/24 面试题
财务会计实习报告体会
2013/12/20 职场文书
记帐员岗位责任制
2014/02/08 职场文书
作文批改评语大全
2014/04/23 职场文书
导游词之上海豫园
2019/10/24 职场文书
python中sqllite插入numpy数组到数据库的实现方法
2021/06/21 Python
MySQL配置主从服务器(一主多从)
2021/08/07 MySQL
uniapp开发打包多端应用完整方法指南
2022/12/24 Javascript