基于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 相关文章推荐
file模式访问网页时iframe高度自适应解决方案
Jan 16 Javascript
js模仿hover的具体实现代码
Dec 30 Javascript
jQuery淡入淡出元素让其效果更为生动
Sep 01 Javascript
Javascript中的几种继承方式对比分析
Mar 22 Javascript
node.js学习之交互式解释器REPL详解
Dec 08 Javascript
JS仿Base.js实现的继承示例
Apr 07 Javascript
微信小程序开发之麦克风动画 帧动画 放大 淡出
Apr 18 Javascript
easyui datagrid 表格中操作栏 按钮图标不显示的解决方法
Jul 27 Javascript
深入理解ES6之数据解构的用法
Jan 13 Javascript
微信小程序 swiper 组件遇到的问题及解决方法
May 26 Javascript
微信小程序实现星级评价
Nov 20 Javascript
JavaScript canvas绘制圆弧与圆形
Feb 18 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高级OOP技术演示
2009/08/27 PHP
判断是否为指定长度内字符串的php函数
2010/02/16 PHP
快速保存网页中所有图片的方法
2006/06/23 Javascript
你真的了解JavaScript吗?
2007/02/24 Javascript
[原创]后缀就扩展名为js的文件是什么文件
2007/12/06 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现
2013/01/23 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
js跳转页面方法总结
2014/01/29 Javascript
JavaScript中对循环语句的优化技巧深入探讨
2014/06/06 Javascript
AngularJS中的过滤器使用详解
2015/06/16 Javascript
根据user-agent判断蜘蛛代码黑帽跳转代码(js版与php版本)
2015/09/14 Javascript
微信小程序 设置启动页面的两种方法
2017/03/09 Javascript
Angular使用$http.jsonp发送跨站请求的方法
2017/03/16 Javascript
ReactNative踩坑之配置调试端口的解决方法
2017/07/28 Javascript
vue组件初学_弹射小球(实例讲解)
2017/09/06 Javascript
vue router导航守卫(router.beforeEach())的使用详解
2019/04/19 Javascript
[01:17:12]职来职往完美电竞专场
2014/09/18 DOTA
[02:33]DOTA2亚洲邀请赛趣味视频之吐真话筒
2018/03/31 DOTA
关于Python中异常(Exception)的汇总
2017/01/18 Python
Python如何快速实现分布式任务
2017/07/06 Python
python多进程实现进程间通信实例
2017/11/24 Python
python时间日期函数与利用pandas进行时间序列处理详解
2018/03/13 Python
python爬取哈尔滨天气信息
2018/07/14 Python
tensorflow自定义激活函数实例
2020/02/04 Python
利用python对mysql表做全局模糊搜索并分页实例
2020/07/12 Python
python中selenium库的基本使用详解
2020/07/31 Python
HTML5实现无刷新修改URL的方法
2019/11/14 HTML / CSS
服装销售人员求职自我评价
2013/09/26 职场文书
劳资员岗位职责
2013/11/11 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
2015年感恩父亲节演讲稿
2015/03/19 职场文书
交通处罚决定书
2015/06/24 职场文书
详解Laravel制作API接口
2021/05/31 PHP
使用nginx配置访问wgcloud的方法
2021/06/26 Servers
电脑无法安装Windows 11怎么办?无法安装Win11的解决方法
2021/11/21 数码科技
VMware虚拟机安装 Windows Server 2022的详细图文教程
2022/09/23 Servers