简单实现js拖拽效果


Posted in Javascript onJuly 25, 2017

本文实例为大家分享了js拖拽效果展示的具体代码,供大家参考,具体内容如下

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    *{
      margin:0;
      padding:0;
    }
    html,body{
      width:100%;
      height:100%;
    }
    #box{
      position:absolute;
      top:50%;
      left:50%;
      width:200px;
      height:200px;
      background:#ff6600;
      margin:-100px 0 0 -100px;
      cursor:move;
      /*
        不知道宽高的情况下的居中
      position:absolute;
      top:0;
      left:0;
      right:0;
      bottom:0;
      margin:auto;
      */  
    }
  </style>
</head>
<body>
  <div id='box'>
    
  </div>
  <script>
    //JS实现让当前的元素在屏幕居中的位置
    var box = document.getElementById('box');
    // box.style.top = ((document.documentElement.clientHeight || document.body.clientHeight)-box.offsetHeight)/2 + "px";

    // box.style.left = ((document.documentElement.clientWidth || document.body.clientWidth)-box.offsetWidth)/2 + "px";
    //拖拽的原理
    /*
      当鼠标在盒子上按下的时候,我们开始拖拽(给盒子绑定onmousemove和onmouseup),当鼠标移动的时候,我们计算盒子的最新位置
      当鼠标抬起的时候说明拖拽结束了,我们的move和up就没用了,我们再把这两个方法移除
    */
    box.onmousedown = down;
    function down(e){
      e = e || window.event;
      //记录开始位置的信息
      this["strX"] = e.clientX;
      this["strY"] = e.clientY;
      this["strL"] = parseFloat(this.style.left);
      this["strT"] = parseFloat(this.style.top);
      //给元素绑定移动和抬起的事件
      if(this.setCapture){
        this.setCapture()//把当前的鼠标和this绑定在一起
        this.onmousemove = move;
        this.onmouseup= up;
      }else{
        var _this = this;
        document.onmousemove = function(e){
          // move(e)//这个里面的this是window
          move.call(_this,e);
        }
          ;
        document.onmouseup= function(e){
          up.call(_this,e);
        };
      }
      
    }
    function move(e){
      e = e || window.event;
      var curL = (e.clientX-this["strX"])+this["strL"];
      var curT = (e.clientY-this["strY"])+this["strT"];
      //边界判断
      var minL = 0,minT = 0,maxL = (document.documentElement.clientWidth || document.body.clientWidth) - this.offsetWidth,maxT = (document.documentElement.clientHeight || document.body.clientHeight) - this.offsetHeight;
      curL = curL < minL ? minL :(curL > maxL ? maxL : curL);
      curT = curT < minT ? minT :(curT > maxT ? maxT : curT)
      this.style.left = curL + "px";
      this.style.top = curT + "px";
    }
    function up(e){
      if(this.releaseCapture){
        this.releaseCapture();//把当前的鼠标和盒子解除绑定
        this.onmousemove = null;
        this.onmouseup= null;
      }else{
        document.onmousemove = null;
        document.onmouseup= null;
        //这样绑定的话,move和up绑定的this都是document
      }
      
    }
    //当鼠标移动过快的时候,我们的鼠标会脱离盒子,导致盒子的mousemove和mouseup事件都移除不到->"鼠标焦点丢失"
    //在IE和火狐浏览器中,我们用一个方法把盒子和鼠标绑定在一起即可。
    //鼠标再快也跑不出去文档:我们把mousemove和mouseup绑定给document
  </script>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Ext面向对象开发实践(续)
Nov 18 Javascript
jQuery 无限级菜单的简单实例
Feb 21 Javascript
javascript使用数组的push方法完成快速排序
Sep 15 Javascript
最全面的百度地图JavaScript离线版开发
Sep 10 Javascript
bootstrap导航条实现代码
Dec 28 Javascript
js实现3d悬浮效果
Feb 16 Javascript
JS中定位 position 的使用实例代码
Aug 06 Javascript
layerUI下的绑定事件实例代码
Aug 17 Javascript
深入了解响应式React Native Echarts组件
May 29 Javascript
解决layer 关闭当前弹窗 关闭遮罩层 input值获取不到的问题
Sep 25 Javascript
Vue前端项目部署IIS的实现
Jan 06 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
Aug 13 Javascript
Vue实现一个返回顶部backToTop组件
Jul 25 #Javascript
基于jquery实现多级菜单效果
Jul 25 #jQuery
关于TypeScript中import JSON的正确姿势详解
Jul 25 #Javascript
微信JSSDK调用微信扫一扫功能的方法
Jul 25 #Javascript
利用node.js爬取指定排名网站的JS引用库详解
Jul 25 #Javascript
详解angularjs获取元素以及angular.element()用法
Jul 25 #Javascript
以BootStrap Tab为例写一个前端组件
Jul 25 #Javascript
You might like
PHP 如何向 MySQL 发送数据
2006/10/09 PHP
PHP容易忘记的知识点分享
2013/04/30 PHP
PHP APC配置文件2套和参数详解
2014/06/11 PHP
Smarty中调用FCKeditor的方法
2014/10/27 PHP
PHP封装的Twitter访问类实例
2015/07/18 PHP
php往mysql中批量插入数据实例教程
2018/12/12 PHP
PHP 对象接口简单实现方法示例
2020/04/13 PHP
可拖动窗口,附带鼠标控制渐变透明,开启关闭功能
2006/06/26 Javascript
JavaScript 学习笔记二 字符串拼接
2010/03/28 Javascript
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
JavaScript排序算法之希尔排序的2个实例
2014/04/04 Javascript
jquery分页插件jpaginate在IE中不兼容问题
2014/04/22 Javascript
教你用jquery实现iframe自适应高度
2014/06/11 Javascript
详谈LABJS按需动态加载js文件
2015/05/07 Javascript
jQuery form 表单验证插件(fieldValue)校验表单
2016/01/24 Javascript
深入理解JavaScript继承的多种方式和优缺点
2017/05/12 Javascript
jQuery实现拼图小游戏(实例讲解)
2017/07/24 jQuery
JavaScript实现简单动态进度条效果
2018/04/06 Javascript
[01:30]2016国际邀请赛中国区预选赛神秘商店火爆开启
2016/06/26 DOTA
探究python中open函数的使用
2016/03/01 Python
python按行读取文件并找出其中指定字符串
2019/08/08 Python
python定间隔取点(np.linspace)的实现
2019/11/27 Python
Python爬虫实现模拟点击动态页面
2020/03/05 Python
详解python 支持向量机(SVM)算法
2020/09/18 Python
Python3+Flask安装使用教程详解
2021/02/16 Python
Onzie官网:美国时尚瑜伽品牌
2019/08/21 全球购物
研发工程师的岗位职责
2013/11/18 职场文书
校本教研工作制度
2014/01/22 职场文书
挖掘机司机岗位职责
2014/02/12 职场文书
本科应届生自荐信
2014/06/29 职场文书
全国优秀教师事迹材料
2014/08/26 职场文书
党的群众路线对照检查材料范文
2014/09/24 职场文书
葬礼主持词
2015/07/02 职场文书
MySQL大小写敏感的注意事项
2021/05/24 MySQL
如何设置多台电脑共享打印机?多台电脑共享打印机的方法
2022/04/08 数码科技
Java服务调用RestTemplate与HttpClient的使用详解
2022/06/21 Java/Android