简单实现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 相关文章推荐
如何简单地用YUI做JavaScript动画
Mar 10 Javascript
网站被黑的假象--ARP欺骗之页面中加入一段js
May 16 Javascript
js创建数据共享接口——简化框架之间相互传值
Oct 23 Javascript
jquery乱码与contentType属性设置问题解决方案
Jan 07 Javascript
jquery实现文字由下到上循环滚动的实例代码
Aug 09 Javascript
JavaScript中的Math.E属性使用详解
Jun 12 Javascript
JavaScript之Canvas_动力节点Java学院整理
Jul 04 Javascript
vue实现样式之间的切换及vue动态样式的实现方法
Dec 19 Javascript
在vue2.0中引用element-ui组件库的方法
Jun 21 Javascript
jquery.pagination.js分页使用教程
Oct 23 jQuery
vue el-tree 默认展开第一个节点的实现代码
May 15 Javascript
详细谈谈JavaScript中循环之间的差异
Aug 23 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
桌面中心(一)创建数据库
2006/10/09 PHP
Jquery绑定事件(bind和live的区别介绍)
2013/08/23 Javascript
form表单只提交数据而不进行页面跳转的解决方案
2013/09/18 Javascript
解析JSON对象与字符串之间的相互转换
2013/12/18 Javascript
包含中国城市的javascript对象实例
2015/08/03 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
2015/08/04 Javascript
基于jQuery实现文本框只能输入数字(小数、整数)
2016/01/14 Javascript
EasyUI布局 高度自适应
2016/06/04 Javascript
Bootstrap php制作动态分页标签
2016/12/23 Javascript
vue、react等单页面项目部署到服务器的方法及vue和react的区别
2018/09/29 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
2020/05/19 Javascript
EXTJS7实现点击拖拉选择文本
2020/12/17 Javascript
Ubuntu下使用python读取doc和docx文档的内容方法
2018/05/08 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
2019/08/13 Python
python对execl 处理操作代码
2020/06/22 Python
基于python实现简单C/S模式代码实例
2020/09/14 Python
详解scrapy内置中间件的顺序
2020/09/28 Python
python palywright库基本使用
2021/01/21 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
HTML5+CSS3 实现灵动的动画 TAB 切换效果(DEMO)
2017/09/15 HTML / CSS
HTML5 video 事件应用示例
2014/09/11 HTML / CSS
开普敦通行证:Cape Town Pass
2019/07/18 全球购物
加拿大鞋网:Globo Shoes
2019/12/26 全球购物
迪士尼法国在线商店:shopDisney FR
2020/12/03 全球购物
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
C#公司笔试题
2014/03/28 面试题
商务英语专业自荐信
2013/10/14 职场文书
中专毕业生自我鉴定
2013/11/21 职场文书
计算机个人求职信范例
2014/01/24 职场文书
出纳工作岗位责任制
2014/02/02 职场文书
开业庆典主持词
2014/03/21 职场文书
物业公司的岗位任命书
2014/06/06 职场文书
酒店辞职书范文
2015/02/26 职场文书
博物馆观后感
2015/06/05 职场文书
Mysql systemctl start mysqld报错的问题解决
2021/06/03 MySQL