简单实现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 相关文章推荐
javascript 支持链式调用的异步调用框架Async.Operation
Aug 04 Javascript
Jqyery中同等与js中windows.onload的应用
May 10 Javascript
Extjs gridpanel 出现横向滚动条问题的解决方法
Jul 04 Javascript
jquery选择器之内容过滤选择器详解
Jan 27 Javascript
jQuery基础语法实例入门
Dec 23 Javascript
JavaScript分秒倒计时器实现方法
Feb 02 Javascript
JavaScript数组对象赋值用法实例
Aug 04 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
Dec 29 Javascript
微信小程序实现长按删除图片的示例
May 18 Javascript
详解Vue-cli中的静态资源管理(src/assets和static/的区别)
Jun 19 Javascript
vue-cli 3.x 修改dist路径的方法
Sep 19 Javascript
解决vue 表格table列求和的问题
Nov 06 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 文件上传实例代码
2012/04/19 PHP
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
2014/04/08 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
Yii2 rbac权限控制之rule教程详解
2016/06/23 PHP
laravel中命名路由的使用方法
2017/02/24 PHP
CentOS 上搭建 PHP7 开发测试环境
2017/02/26 PHP
总结的一些PHP开发中的tips(必看篇)
2017/03/24 PHP
jquery radio 操作代码
2011/03/16 Javascript
关于javascript event flow 的一个bug详解
2013/09/17 Javascript
JQuery中使用on方法绑定hover事件实例
2014/12/09 Javascript
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
JS实现图片高亮展示效果实例
2015/11/24 Javascript
js动态生成form 并用ajax方式提交的实现方法
2016/09/09 Javascript
js实现带缓动动画的导航栏效果
2017/01/16 Javascript
Web开发使用Angular实现用户密码强度判别的方法
2017/09/27 Javascript
angular之ng-template模板加载
2017/11/09 Javascript
详解使用mpvue开发github小程序总结
2018/07/25 Javascript
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
解决layer弹层遮罩挡住窗体的问题
2018/08/17 Javascript
js实现多个倒计时并行 js拼团倒计时
2019/02/25 Javascript
Node.js API详解之 dns模块用法实例分析
2020/05/15 Javascript
总结Python编程中函数的使用要点
2016/03/20 Python
python执行CMD指令,并获取返回的方法
2018/12/19 Python
python 自动轨迹绘制的实例代码
2019/07/05 Python
Python Pandas对缺失值的处理方法
2019/09/27 Python
Python高级特性——详解多维数组切片(Slice)
2019/11/26 Python
Python: 传递列表副本方式
2019/12/19 Python
Django路由层URLconf作用及原理解析
2020/09/24 Python
蒂芙尼澳大利亚官方网站:Tiffany&Co. Australia
2017/08/27 全球购物
印度尼西亚最大的电商平台:Tokopedia(印尼版淘宝)
2017/12/02 全球购物
Fresh馥蕾诗英国官网:法国LVMH集团旗下高端天然护肤品牌
2018/11/01 全球购物
外语系毕业生自荐信范文
2013/12/16 职场文书
建筑文秘专业个人求职信范文
2013/12/28 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书
学校食堂管理制度
2015/08/04 职场文书