JS鼠标拖拽实例分析


Posted in Javascript onNovember 23, 2015

本文实例讲述了JS鼠标拖拽实现方法。分享给大家供大家参考,具体如下:

JS鼠标拖拽实例分析

JS鼠标拖拽实例分析

JS代码:

<script>
window.onload=function()
{
  var oDiv=document.getElementById('div');
  var disX=0;
  var disY=0;
  oDiv.onmousedown=function(ev) //鼠标按下DIV
  {
    var oEvent=ev||event;
    disX=oEvent.clientX-oDiv.offsetLeft; //鼠标的X坐标减去DIV的左边距就等于disX, 这个disXs是用于确定鼠标移动DIV时鼠标点和DIV之间的左面距离,这个距离是不会变的,通过这个新鼠标的X坐标减去disX就是DIV的Left
    disY=oEvent.clientY-oDiv.offsetTop; //鼠标的Y坐标减去DIV的左边距就等于disY, 这个disY是用于确定鼠标移动DIV时鼠标点和DIV之间的上面距离,这个距离是不会变的,通过这个新鼠标的Y坐标减去disY就是DIV的Top
    document.onmousemove=function(ev) //为了防止鼠标移动太快而离开了DIV产生了bug,所以要给整个页面加onmousemove事件
    {
      var oEvent=ev||event;
      var oLeft=oEvent.clientX-disX; //新鼠标X坐标减去disX,也就是鼠标移动DIV后的Left
      var oTop=oEvent.clientY-disY; //新鼠标Y坐标减去disY,也就是鼠标移动DIV后的Top
      if(oLeft<0) //当DIV的Left小于0,也就是移出左边
      {
        oLeft=0; //就把DIV的Left设置为0,就不能移出左边
      }
      else if(oLeft>document.documentElement.clientWidth-oDiv.offsetWidth) //屏幕宽度减去DIV的宽度就得出了DIV到达最右边的宽度,如果Left大于这个像素
      {
        oLeft=document.documentElement.clientWidth-oDiv.offsetWidth; //就把Left设置为这个像素
      }
      if(oTop<0) //当DIV的To小于0,也就是移出左边
      {
        oTop=0; //就把DIV的Top设置为0,就不能移出上边
      }
      else if(oTop>document.documentElement.clientHeight-oDiv.offsetHeight) //屏幕高度减去DIV的高度就得出了DIV到达最下面边的像素,如果Top大于这个像素
      {
        oTop=document.documentElement.clientHeight-oDiv.offsetHeight; //就把Top设置为这个像素
      }
      oDiv.style.left=oLeft+'px'; //DIV的Left设置为新鼠标X坐标减去disX的值
      oDiv.style.top=oTop+'px'; //DIV的Top设置为新鼠标Y坐标减去disY的值
    };
    document.onmouseup=function() //鼠标松开时
    {
      document.onmousemove=null; //把鼠标移动清楚
      document.onmouseup=null; //把鼠标松开清楚
    };
    return false; //阻止FireFox的默认事件 bug
  };
};
</script>

完整代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style>
div{width:200px;height:200px;background:black;position:absolute;top:0;left:0;}
</style>
<script>
window.onload=function()
{
  var oDiv=document.getElementById('div');
  var disX=0;
  var disY=0;
  oDiv.onmousedown=function(ev) //鼠标按下DIV
  {
    var oEvent=ev||event;
    disX=oEvent.clientX-oDiv.offsetLeft; //鼠标的X坐标减去DIV的左边距就等于disX, 这个disXs是用于确定鼠标移动DIV时鼠标点和DIV之间的左面距离,这个距离是不会变的,通过这个新鼠标的X坐标减去disX就是DIV的Left
    disY=oEvent.clientY-oDiv.offsetTop; //鼠标的Y坐标减去DIV的左边距就等于disY, 这个disY是用于确定鼠标移动DIV时鼠标点和DIV之间的上面距离,这个距离是不会变的,通过这个新鼠标的Y坐标减去disY就是DIV的Top
    document.onmousemove=function(ev) //为了防止鼠标移动太快而离开了DIV产生了bug,所以要给整个页面加onmousemove事件
    {
      var oEvent=ev||event;
      var oLeft=oEvent.clientX-disX; //新鼠标X坐标减去disX,也就是鼠标移动DIV后的Left
      var oTop=oEvent.clientY-disY; //新鼠标Y坐标减去disY,也就是鼠标移动DIV后的Top
      if(oLeft<0) //当DIV的Left小于0,也就是移出左边
      {
        oLeft=0; //就把DIV的Left设置为0,就不能移出左边
      }
      else if(oLeft>document.documentElement.clientWidth-oDiv.offsetWidth) //屏幕宽度减去DIV的宽度就得出了DIV到达最右边的宽度,如果Left大于这个像素
      {
        oLeft=document.documentElement.clientWidth-oDiv.offsetWidth; //就把Left设置为这个像素
      }
      if(oTop<0) //当DIV的To小于0,也就是移出左边
      {
        oTop=0; //就把DIV的Top设置为0,就不能移出上边
      }
      else if(oTop>document.documentElement.clientHeight-oDiv.offsetHeight) //屏幕高度减去DIV的高度就得出了DIV到达最下面边的像素,如果Top大于这个像素
      {
        oTop=document.documentElement.clientHeight-oDiv.offsetHeight; //就把Top设置为这个像素
      }
      oDiv.style.left=oLeft+'px'; //DIV的Left设置为新鼠标X坐标减去disX的值
      oDiv.style.top=oTop+'px'; //DIV的Top设置为新鼠标Y坐标减去disY的值
    };
    document.onmouseup=function() //鼠标松开时
    {
      document.onmousemove=null; //把鼠标移动清楚
      document.onmouseup=null; //把鼠标松开清楚
    };
    return false; //阻止FireFox的默认事件 bug
  };
};
</script>
</head>
<body>
<div id="div"></div>
</body>
</html>

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
解决js正则匹配换行问题实现代码
Dec 10 Javascript
JQuery-tableDnD 拖拽的基本使用介绍
Jul 04 Javascript
js综合应用实例简单的表格统计
Sep 03 Javascript
JS简单实现元素复制示例附图
Nov 19 Javascript
Javascript 遍历页面text控件详解
Jan 06 Javascript
jquery实现倒计时代码分享
Jun 13 Javascript
JavaScript设计模式之外观模式实例
Oct 10 Javascript
jquery中animate的stop()方法作用实例分析
Jan 30 Javascript
javaScript知识点总结(必看篇)
Jun 10 Javascript
jQuery实现级联下拉框实战(5)
Feb 08 Javascript
layui 优化button按钮和弹出框的方法
Aug 15 Javascript
layui数据表格重载实现往后台传参
Nov 15 Javascript
基于jQuery实现简单的折叠菜单效果
Nov 23 #Javascript
jquery无限级联下拉菜单简单实例演示
Nov 23 #Javascript
jquery实现图片放大镜功能
Nov 23 #Javascript
jquery自定义表格样式
Nov 23 #Javascript
jquery实现表单验证简单实例演示
Nov 23 #Javascript
JavaScript与HTML的结合方法详解
Nov 23 #Javascript
js实现接收表单的值并将值拼在表单action后面的方法
Nov 23 #Javascript
You might like
分享PHP入门的学习方法
2007/01/02 PHP
PHP连接Access数据库的方法小结
2013/06/20 PHP
js parseInt(&quot;08&quot;)未指定进位制问题
2010/06/19 Javascript
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
2012/12/09 Javascript
js 获取class的元素的方法 以及创建方法getElementsByClassName
2013/03/11 Javascript
按下Enter焦点移至下一个控件的实现js代码
2013/12/11 Javascript
Jquery创建一个层当鼠标移动到层上面不消失效果
2013/12/12 Javascript
jQuery实现下拉框左右选择的简单实例
2014/02/22 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
2014/02/22 Javascript
JS中捕获console.log()输出的方法
2015/04/16 Javascript
js流动式效果显示当前系统时间
2016/05/16 Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
2016/06/06 Javascript
jquery siblings获取同辈元素用法实例分析
2016/07/25 Javascript
jQuery遍历节点树方法分析
2016/09/08 Javascript
前端设计师们最常用的JS代码汇总
2016/09/25 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
基于iScroll实现下拉刷新和上滑加载效果
2017/07/18 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
2017/08/31 Javascript
使用canvas实现一个vue弹幕组件功能
2018/11/30 Javascript
angular4中引入echarts的方法示例
2019/01/29 Javascript
小程序实现短信登录倒计时
2019/07/12 Javascript
微信小程序自定义头部导航栏(组件化)
2019/11/15 Javascript
JsonServer安装及启动过程图解
2020/02/28 Javascript
python的random模块及加权随机算法的python实现方法
2017/01/04 Python
解决python3在anaconda下安装caffe失败的问题
2017/06/15 Python
Python 实现数据库更新脚本的生成方法
2017/07/09 Python
django模型动态修改参数,增加 filter 字段的方式
2020/03/16 Python
css3学习系列之移动属性详解
2017/07/04 HTML / CSS
普天C++笔试题
2016/03/20 面试题
中间件分为哪几类
2012/03/14 面试题
机械制造与自动化应届生求职信
2013/11/16 职场文书
心理健康课教学反思
2014/02/13 职场文书
初中英语课后反思
2014/04/25 职场文书
旅游饭店管理专业自荐书
2014/06/28 职场文书
助学贷款贫困证明
2014/09/23 职场文书
个人借款协议书范本
2014/11/17 职场文书