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 tab效果的实现代码
Dec 26 Javascript
查找页面中所有类为test的结点的方法
Mar 28 Javascript
JS实现的另类手风琴效果网页内容切换代码
Sep 08 Javascript
js实现页面跳转的五种方法推荐
Mar 10 Javascript
JS简单实现表格排序功能示例
Dec 20 Javascript
在一个页面实现两个zTree联动的方法
Dec 20 Javascript
关于laydate.js加载laydate.css路径错误问题解决
Dec 27 Javascript
Vue注册组件命名时不能用大写的原因浅析
Apr 25 Javascript
实现高性能javascript的注意事项
May 27 Javascript
layer弹出层自适应高度,垂直水平居中的实现
Sep 16 Javascript
JS Thunk 函数的含义和用法实例总结
Apr 08 Javascript
Vue.js中Line第三方登录api的实现代码
Jun 29 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
使用Appcan客户端自动更新PHP版本号(全)
2015/07/31 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
2017/05/20 PHP
PHP crc32()函数讲解
2019/02/14 PHP
地震发生中逃生十大法则
2008/05/12 Javascript
javascript 面向对象编程基础:继承
2009/08/21 Javascript
一些技巧性实用js代码小结
2009/10/14 Javascript
JQuery 解析多维的Json数据格式
2009/11/02 Javascript
初学js 新节点的创建 删除 的步骤
2011/07/04 Javascript
javascript获取元素偏移量的方法有哪些
2014/06/24 Javascript
JavaScript设计模式之抽象工厂模式介绍
2014/12/28 Javascript
jQuery插件制作之全局函数用法实例
2015/06/01 Javascript
javascript控制台详解
2015/06/25 Javascript
跟我学习javascript的全局变量
2015/11/16 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
2017/03/30 Javascript
在 Node.js 中使用原生 ES 模块方法解析
2017/09/19 Javascript
使用FileReader API创建Vue文件阅读器组件
2018/04/03 Javascript
vue 之 .sync 修饰符示例详解
2018/04/21 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
原生JS实现逼真的图片3D旋转效果详解
2019/02/16 Javascript
layui prompt 设置允许空白提交的方法
2019/09/24 Javascript
Python 模拟登陆的两种实现方法
2017/08/10 Python
CSS3——齿轮转动关键代码
2013/05/02 HTML / CSS
HTML5 微格式和相关的属性名称
2010/02/10 HTML / CSS
ProBikeKit英国:在线公路自行车之家
2017/02/10 全球购物
菲律宾票务网站:StubHub菲律宾
2018/04/21 全球购物
美国狗旅行和户外用品领先供应商:kurgo
2020/08/18 全球购物
会计岗位描述
2014/02/22 职场文书
新法人代表任命书
2014/06/06 职场文书
员工安全生产责任书
2014/07/22 职场文书
七夕活动策划方案
2014/08/16 职场文书
中小学生学籍证明
2014/10/25 职场文书
大学军训的体会
2014/11/08 职场文书
在Django中使用MQTT的方法
2021/05/10 Python
一条慢SQL语句引发的改造之路
2022/03/16 MySQL
iSCSI服务器CHAP双向认证配置
2022/04/01 Servers