基于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 相关文章推荐
用js实现层随着内容大小动态渐变改变 推荐
Dec 19 Javascript
JS修改css样式style浅谈
May 06 Javascript
js冒泡法和数组转换成字符串示例代码
Aug 14 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
Dec 22 Javascript
在AngularJS应用中实现一些动画效果的代码
Jun 18 Javascript
laydate.js日期时间选择插件
Jan 04 Javascript
vue动态绑定组件子父组件多表单验证功能的实现代码
May 14 Javascript
node.js之基础加密算法模块crypto详解
Sep 11 Javascript
详解微信小程序开发聊天室—实时聊天,支持图片预览
May 20 Javascript
layui自定义ajax左侧三级菜单
Jul 26 Javascript
小程序登录之支付宝授权的实现示例
Dec 13 Javascript
Vue使用虚拟dom进行渲染view的方法
Dec 26 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写的采集程序
2007/03/16 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
PHP实现的超长文本分页显示功能示例
2018/06/04 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
PHP队列场景以及实现代码实例详解
2021/02/26 PHP
Packer 3.0 JS压缩及混淆工具 下载
2007/05/03 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
2013/01/25 Javascript
jquery表格内容筛选实现思路及代码
2013/04/16 Javascript
ExtJS自定义主题(theme)样式详解
2013/11/18 Javascript
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
2013/11/21 Javascript
js中一个函数获取另一个函数返回值问题探讨
2013/11/21 Javascript
jquerydom对象的事件隐藏显示和对象数组示例
2013/12/10 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
2015/04/17 Javascript
前端设计师们最常用的JS代码汇总
2016/09/25 Javascript
JS常用算法实现代码
2016/11/14 Javascript
基于JavaScript实现图片连播和联级菜单实例代码
2017/07/28 Javascript
jQuery Datatable 多个查询条件自定义提交事件(推荐)
2017/08/24 jQuery
微信小程序使用map组件实现解析经纬度功能示例
2019/01/22 Javascript
JavaScript实现五子棋游戏的方法详解
2019/07/08 Javascript
vue中 数字相加为字串转化为数值的例子
2019/11/07 Javascript
简单了解JavaScript sort方法
2019/11/25 Javascript
Python程序退出方式小结
2017/12/09 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
2019/03/22 Python
Python制作一个仿QQ办公版的图形登录界面
2020/09/22 Python
Anaconda使用IDLE的实现示例
2020/09/23 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
高中生自我评价个人范文
2013/11/09 职场文书
外语系大学生自荐信范文
2014/03/01 职场文书
电脑售后服务承诺书
2014/03/27 职场文书
幼儿园优秀班主任事迹材料
2014/05/14 职场文书
设计师求职信
2014/07/01 职场文书
生活部的活动方案
2014/08/19 职场文书
2015年派出所民警工作总结
2015/04/24 职场文书
复试通知单模板
2015/04/24 职场文书
小学生运动会广播
2015/08/19 职场文书
2016年教师党员公开承诺书
2016/03/24 职场文书