简单实现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 相关文章推荐
表单的焦点顺序tabindex和对应enter键提交
Jan 04 Javascript
用js读、写、删除Cookie代码分享及详细注释说明
Jun 05 Javascript
JS组件中bootstrap multiselect两大组件较量
Jan 26 Javascript
js字符串截取函数slice、substring和substr的比较
May 17 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
Feb 12 Javascript
ReactJs设置css样式的方法
Jun 08 Javascript
将 vue 生成的 js 上传到七牛的实例
Jul 28 Javascript
通过 JS 判断页面是否有滚动条的实现方法
Apr 05 Javascript
JS执行控制之节流模式实例分析
Dec 21 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
Apr 29 Javascript
微信小程序按顺序同步执行的两种方式
Dec 20 Javascript
JavaScript实现简单的图片切换功能(实例代码)
Apr 10 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
SONY SRF-22W(33W)的电路分析和维修案例
2021/03/02 无线电
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
Zero Clipboard js+swf实现的复制功能使用方法
2010/03/07 Javascript
使用js解决由border属性引起的div宽度问题
2013/11/26 Javascript
js重写alert控件(适合学习js的新手朋友)
2014/08/24 Javascript
深入浅析JavaScript中数据共享和数据传递
2016/04/25 Javascript
深入理解Angular中的依赖注入
2017/06/26 Javascript
关于vue-router的beforeEach无限循环的问题解决
2017/09/09 Javascript
vue实现提示保存后退出的方法
2018/03/15 Javascript
Angular4.0动画操作实例详解
2019/05/10 Javascript
javascript设计模式 ? 简单工厂模式原理与应用实例分析
2020/04/09 Javascript
python通过ElementTree操作XML获取结点读取属性美化XML
2013/12/02 Python
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
python将文本分每两行一组并保存到文件
2018/03/19 Python
python实现扫描日志关键字的示例
2018/04/28 Python
Python 修改列表中的元素方法
2018/06/26 Python
pygame游戏之旅 游戏中添加显示文字
2018/11/20 Python
pip 安装库比较慢的解决方法(国内镜像)
2019/10/06 Python
python框架django项目部署相关知识详解
2019/11/04 Python
浅谈tensorflow 中的图片读取和裁剪方式
2020/06/30 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
2020/07/03 Python
使用Python绘制台风轨迹图的示例代码
2020/09/21 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
2020/10/27 Python
Python文件名匹配与文件复制的实现
2020/12/11 Python
python爬虫基础之urllib的使用
2020/12/31 Python
纯CSS3+DIV实现小三角形边框效果的示例代码
2020/08/03 HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(二)
2013/01/21 HTML / CSS
H5 video poster属性设置视频封面的方法
2020/05/25 HTML / CSS
凌阳科技股份有限公司C++程序员面试题笔试题
2014/11/20 面试题
民主评议党员总结
2014/10/20 职场文书
2015年城管个人工作总结
2015/05/15 职场文书
社区志愿服务活动感想
2015/08/07 职场文书
《观察物体》教学反思
2016/02/17 职场文书
某某店铺的开业庆典主持词范本
2019/11/25 职场文书
一篇文章带你搞懂Python类的相关知识
2021/05/20 Python
Django基础CBV装饰器和中间件
2022/03/22 Python