基于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 相关文章推荐
使用POST方式弹出窗口的两种方法示例介绍
Jan 29 Javascript
使用Raygun对Node.js应用进行错误处理的方法
Jun 23 Javascript
jquery ui dialog替代confirm实例分析
Jan 25 Javascript
jQuery插件简单学习实例教程
Jul 01 Javascript
JS使用正则实现去掉字符串左右空格的方法
Dec 27 Javascript
jquery uploadify如何取消已上传成功文件
Feb 08 Javascript
Easyui Datagrid自定义按钮列(最后面的操作列)
Jul 13 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
Sep 26 Javascript
通过npm或yarn自动生成vue组件的方法示例
Feb 12 Javascript
微信小程序登录session的使用
Mar 17 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
May 18 Javascript
微信小程序 可搜索的地址选择实现详解
Aug 28 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开发文件系统实例讲解
2006/10/09 PHP
关于IIS php调用com组件的权限问题
2012/01/11 PHP
调试一段PHP程序时遇到的三个问题
2012/01/17 PHP
php后台多用户权限组思路与实现程序代码分享
2012/02/13 PHP
php 对输入信息的进行安全过滤的函数代码
2012/06/29 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
2015/06/03 PHP
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
jquery+css+ul模拟列表菜单具体实现思路
2013/04/15 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
js图片跟随鼠标移动代码
2015/11/26 Javascript
详谈JS中实现种子随机数及作用
2016/07/19 Javascript
AngularJs 国际化(I18n/L10n)详解
2016/09/01 Javascript
Vue.JS入门教程之事件监听
2016/12/01 Javascript
nodejs读写json文件的简单方法(必看)
2017/03/09 NodeJs
JS中Map和ForEach的区别
2018/02/05 Javascript
Vue2.0生命周期的理解
2018/08/20 Javascript
Vue 实现前进刷新后退不刷新的效果
2019/06/14 Javascript
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
JS实现购物车基本功能
2020/11/08 Javascript
python生成IP段的方法
2015/07/07 Python
Python高级特性切片(Slice)操作详解
2018/09/27 Python
python3实现简单飞机大战
2020/11/29 Python
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
HTML5 CSS3实现一个精美VCD包装盒个性幻灯片案例
2014/06/16 HTML / CSS
大专自我鉴定范文
2013/10/01 职场文书
大四学生毕业自荐信
2013/11/07 职场文书
军训考核自我鉴定
2014/02/13 职场文书
升国旗仪式主持词
2014/03/19 职场文书
环保倡议书300字
2014/05/15 职场文书
男方婚礼答谢词
2015/01/20 职场文书
工会文体活动总结
2015/05/07 职场文书
2015年国庆节新闻稿
2015/07/18 职场文书
如何使用python包中的sched事件调度器
2022/04/30 Python