简单实现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 相关文章推荐
鼠标选择动态改变网页背景颜色的JS代码
Dec 10 Javascript
js判断是否为ie的方法小结
Jan 13 Javascript
javascript:window.open弹出窗口的位置问题
Mar 18 Javascript
EasyUI中实现form表单提交的示例分享
Mar 01 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
Mar 26 Javascript
浅谈jQuery的offset()方法及示例分享
Jul 17 Javascript
javascript中return,return true,return false三者的用法及区别
Nov 17 Javascript
浅谈js数据类型判断与数组判断
Aug 29 Javascript
JavaScript实现的反序列化json字符串操作示例
Jul 18 Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
Jul 30 Javascript
Vue.js中 v-model 指令的修饰符详解
Dec 03 Javascript
js仿360开机效果
Dec 26 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
phpMyAdmin下载、安装和使用入门教程
2007/05/31 PHP
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
php判断输入不超过mysql的varchar字段的长度范围
2011/06/24 PHP
PHP数据库链接类(PDO+Access)实例分享
2013/12/05 PHP
smarty表格换行实例
2014/12/15 PHP
Javascript调试工具(下载)
2007/01/09 Javascript
JavaScript 学习笔记之语句
2015/01/14 Javascript
jQuery表单域属性过滤器用法分析
2015/02/10 Javascript
jQuery插件slicebox实现3D动画图片轮播切换特效
2015/04/12 Javascript
JS实现的不规则TAB选项卡效果代码
2015/09/18 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
2015/11/23 Javascript
jQuery使用$.ajax进行异步刷新的方法(附demo下载)
2015/12/04 Javascript
JS实现按比例缩放图片的方法(附C#版代码)
2015/12/08 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
2015/12/11 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
2016/03/24 Javascript
jquery利用json实现页面之间传值的实例解析
2016/12/12 Javascript
Vue完整项目构建(进阶篇)
2018/02/10 Javascript
JS实现键值对遍历json数组功能示例
2018/05/30 Javascript
Nuxt页面级缓存的实现
2020/03/09 Javascript
vue实现拖拽进度条
2021/03/01 Vue.js
[00:03]DOTA2新版本PA至宝展示
2014/11/19 DOTA
[01:18:36]LGD vs VP Supermajor 败者组决赛 BO3 第一场 6.10
2018/07/04 DOTA
python基础教程之对象和类的实际运用
2014/08/29 Python
TF-IDF算法解析与Python实现方法详解
2017/11/16 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
2018/04/02 Python
python支付宝支付示例详解
2019/08/22 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
2020/03/25 Python
Python tkinter制作单机五子棋游戏
2020/09/14 Python
街头时尚在线:JESSICABUURMAN
2019/06/16 全球购物
开工仪式主持词
2014/03/20 职场文书
物理学专业求职信
2014/07/04 职场文书
车辆年审委托书范本
2014/09/18 职场文书
教师国庆节演讲稿范文2014
2014/09/21 职场文书
同意离婚答辩状
2015/05/22 职场文书
2015年秋季开学典礼校长致辞
2015/07/16 职场文书
2015年除四害工作总结
2015/07/23 职场文书