鼠标拖拽效果原理及完整代码实现
来源:互联网 发布:汇川plc编程手册pdf 编辑:程序博客网 时间:2024/06/05 17:26
遮罩浮层效果做出来很简单,但是如果加了鼠标拖拽效果就会显得档次更高了,今天来分享下鼠标拖拽效果。
鼠标拖拽效果最主要的事件有三个,也是三个阶段,分别为mousedown,mousemove,mouseup。我们先来分析一哈每个过程的重点。
1> mousedown即鼠标按下阶段,这个阶段我们要确定鼠标相对于浮层的位置,并将浮层设置为可拖拽状态。
2> mousemove即鼠标移动阶段,这里需要知道鼠标经过移动后的新位置,并计算出浮层移动后的位置,并设置可移动范围,防止出现滚动条。
3> mouseup技鼠标放开阶段,这个阶段,只需将可拖拽状态设置为不可拖拽即可。
下面为核心代码:
function mouseDraggle(id){
$_id(id).addEventListener("mousedown",function(e){ var el=e||window.event;//为了兼容Ie //计算出鼠标相对于浮层的位置 startX = el.pageX-$_id(id).offsetLeft; startY = el.pageY-$_id(id).offsetTop; isDraggle = true;});document.onmousemove=function(e){ //目前浮层元素的位置 var el = e||window.event;//为了兼容Ie,ie中事件对象包含于window对象中 var mouseX = el.pageX - startX; var mouseY = el.pageY - startY; //获取页面的大小 var bodyW = document.documentElement.clientWidth; var bodyH = document.documentElement.clientHeight; //获取浮层的大小 var partWidth = $_id(id).offsetWidth; var partHeight = $_id(id).offsetHeight; var maxWidth = bodyW - partWidth;//浮层可移动的最大width var maxHeight = bodyH - partHeight;//浮层可移动的最大height //在可拖拽的状态下进行限制拖拽的范围,不然会出现丑的滚动条 if(isDraggle == true){ var moveX = Math.min(maxWidth,Math.max(0,mouseX)); var moveY = Math.min(maxHeight,Math.max(0,mouseY)); $_id(id).style.left = moveX + 'px'; $_id(id).style.top = moveY + 'px'; } };document.onmouseup = function(){ isDraggle = false;}}
这是上面三种状态的代码,需要注意的我已经在代码中进行了注释。
ps:
1.在事件监听时,第一个关于事件的参数不加on,而window,document需要加on。
2.pageX和pageY如果有滚动条的话,此时鼠标的位置还包括滚动的width和height;而clientX和clientY则不包括滚动的长度,所以在没有滚动条时,clientX=pageX,clienY=pageY。
1 0
- 鼠标拖拽效果原理及完整代码实现
- 二值化算法原理、实现、代码及效果
- vc鼠标拖拽效果的实现
- js实现鼠标拖拽效果
- jQuery实现鼠标拖拽div效果
- jq实现鼠标拖拽效果
- 鼠标拖拽效果
- 鼠标拖拽效果
- JS拖拽元素原理及实现代码
- 互联网的一些常用实现原理分析及代码实现(一):图片放大镜效果
- 实现鼠标的拖拽效果 by johannes
- 利用canvas实现鼠标拖拽效果的一种方法
- 使用b2MouseJoint实现鼠标拖拽刚体的效果
- CSS3实现DIV圆角效果完整代码
- 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果。
- 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果
- 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果
- 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果。
- 学生信息管理系统.jsp
- tomcat 在停止服务时使用ngix抛出一个停机页面
- 全文索引原理介绍
- 《中华经典名著全本全注全译丛书:老子》读后感
- 学习笔记之网络访问基础
- 鼠标拖拽效果原理及完整代码实现
- 非阻塞connect
- Jetty(一)Gradle构建web项目
- ViewPager + Fragment实现滑动标签页
- jQuery read 和load区别
- iOS开发之SVN使用教程总结
- mybatis学习笔记(一)helloworld
- Linux设备驱动模型
- Closures 闭包