基于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 相关文章推荐
提高javascript效率 一次判断,而不要次次判断
Mar 30 Javascript
jQuery控制的不同方向的滑动(向左、向右滑动等)
Jul 18 Javascript
AngularJS的一些基本样式初窥
Jul 27 Javascript
javascript中对变量类型的判断方法
Aug 09 Javascript
JS面向对象编程详解
Mar 06 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
May 09 Javascript
php输出全部gb2312编码内的汉字方法
Mar 04 Javascript
vscode下vue项目中eslint的使用方法
Jan 13 Javascript
使用p5.js实现动态GIF图片临摹重现
Oct 23 Javascript
原生JavaScript实现滑动拖动验证的示例代码
Dec 06 Javascript
JavaScript实现4位随机验证码的生成
Jan 28 Javascript
Vue3实现简易音乐播放器组件
Aug 14 Vue.js
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删除目录及目录下所有文件的方法详解
2013/06/06 PHP
php魔术变量用法实例详解
2014/11/13 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
JavaScript中“+=”的应用
2007/02/02 Javascript
Js动态创建div
2008/09/25 Javascript
Javascript 类与静态类的实现(续)
2010/04/02 Javascript
JS中获取数据库中的值的方法
2013/07/14 Javascript
javascript自定义的addClass()方法
2014/05/28 Javascript
如何减少浏览器的reflow和repaint
2015/02/26 Javascript
JS实现点击按钮自动增加一个单元格的方法
2015/03/09 Javascript
JavaScript截断字符串的方法
2015/07/15 Javascript
JavaScript仿静态分页实现方法
2015/08/04 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
JS中sort函数排序用法实例分析
2016/06/16 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
2016/09/20 Javascript
easyui导出excel无法弹出下载框的快速解决方法
2016/11/10 Javascript
Vue数据驱动模拟实现3
2017/01/11 Javascript
js 实现省市区三级联动菜单效果
2017/02/20 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
js计算最大公约数和最小公倍数代码实例
2019/09/11 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
python列表操作实例
2015/01/14 Python
Python3学习笔记之列表方法示例详解
2017/10/06 Python
python检测主机的连通性并记录到文件的实例
2018/06/21 Python
关于pandas的离散化,面元划分详解
2019/11/22 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
2020/01/08 Python
python使用opencv resize图像不进行插值的操作
2020/07/05 Python
HTML5新增元素如何兼容旧浏览器有哪些方法
2014/05/09 HTML / CSS
印尼太阳百货公司网站:Matahari
2018/02/04 全球购物
AP澳洲中文网:澳洲正品直邮,包税收件无忧
2019/07/12 全球购物
优秀士兵个人事迹材料
2014/01/19 职场文书
班组长岗位职责
2014/03/03 职场文书
党的群众路线教育实践活动宣传标语口号
2014/06/06 职场文书
有关信念的名言语录集锦
2019/12/06 职场文书
php远程请求CURL案例(爬虫、保存登录状态)
2021/04/01 PHP
Win11 21h2可以升级22h2吗?看看你的电脑符不符合要求
2022/07/07 数码科技