简单实现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键盘
May 02 Javascript
JS实现为表格动态添加标题的方法
Mar 31 Javascript
浏览器检测JS代码(兼容目前各大主流浏览器)
Feb 21 Javascript
Jquery和JS获取ul中li标签的实现方法
Jun 02 Javascript
js基础之DOM中document对象的常用属性方法详解
Oct 28 Javascript
vue-router 学习快速入门
Mar 01 Javascript
关于React动态加载路由处理的相关问题
Jan 07 Javascript
JS实现求5的阶乘示例
Jan 21 Javascript
新手快速入门JavaScript装饰者模式与AOP
Jun 24 Javascript
JavaScript实现单英文金山打字通
Jul 24 Javascript
vue中使用带隐藏文本信息的图片、图片水印的方法
Apr 24 Javascript
vue配置型表格基于el-table拓展之table-plus组件
Apr 12 Vue.js
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
thinkphp3.2嵌入百度编辑器ueditor的实例代码
2017/07/13 PHP
php服务器的系统详解
2019/10/12 PHP
PDO实现学生管理系统
2020/03/21 PHP
JMenuTab简单使用说明
2008/03/13 Javascript
jquery复选框CHECKBOX全选、反选
2008/08/30 Javascript
ExtJs3.0中Store添加 baseParams 的Bug
2010/03/10 Javascript
用JS判别浏览器种类以及IE版本的几种方法小结
2011/08/02 Javascript
jQuery图片的展开和收缩实现代码
2013/04/16 Javascript
jQuery之日期选择器的深入解析
2013/06/19 Javascript
实用的Jquery选项卡TAB示例代码
2013/08/28 Javascript
简单的Jquery全选功能
2013/11/07 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
每天一篇javascript学习小结(属性定义方法)
2015/11/19 Javascript
理解javascript中的严格模式
2016/02/01 Javascript
有关jQuery中parent()和siblings()的小问题
2016/06/01 Javascript
Active控件问题小结(附解决办法)
2016/06/09 Javascript
jQuery Raty 一款不错的星级评分插件
2016/08/24 Javascript
详解ES6 Symbol 的用途
2018/10/14 Javascript
详解webpack4.x之搭建前端开发环境
2019/03/28 Javascript
vue服务端渲染操作简单入门实例分析
2019/08/28 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
2019/09/17 Javascript
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
Python发送以整个文件夹的内容为附件的邮件的教程
2015/05/06 Python
Python中join函数简单代码示例
2018/01/09 Python
python实现的按要求生成手机号功能示例
2019/10/08 Python
使用Python的networkx绘制精美网络图教程
2019/11/21 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
python使用turtle库绘制奥运五环
2020/02/24 Python
广播体操比赛口号
2014/06/10 职场文书
社区党员公开承诺书
2014/08/30 职场文书
教师节标语大全
2014/10/07 职场文书
儿童诗两首教学反思
2016/02/23 职场文书
如何才能写好调研报告?
2019/07/03 职场文书
python 下载文件的几种方式分享
2021/04/07 Python
css实现文章分割线样式的多种方法总结
2021/04/21 HTML / CSS