简单实现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 相关文章推荐
文本框的字数限制功能jquery插件
Nov 24 Javascript
JavaScript判断变量是否为undefined的两种写法区别
Dec 04 Javascript
js 获取时间间隔实现代码
May 12 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
Mar 04 Javascript
浅析Javascript ES6新增值比较函数Object.is
Aug 24 Javascript
基于JavaScript实现微信抢红包功能
Jul 20 Javascript
Axios学习笔记之使用方法教程
Jul 21 Javascript
浅谈使用React.setState需要注意的三点
Dec 18 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
Mar 06 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
Sep 22 Javascript
html中创建并调用vue组件的几种方法汇总
Nov 17 Javascript
原生JavaScript实现简单五子棋游戏
Jun 28 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列出MySQL中所有数据库的方法
2015/03/12 PHP
PHP入门教程之上传文件实例详解
2016/09/11 PHP
详解PHP中websocket的使用方法
2016/09/15 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
2016/12/21 PHP
基于jQuery的自动完成插件
2011/02/03 Javascript
javascript打印html内容功能的方法示例
2013/11/28 Javascript
JS实现根据当前文字选择返回被选中的文字
2014/05/21 Javascript
深入理解JavaScript单体内置对象
2016/06/06 Javascript
js实现String.Fomat的实例代码
2016/09/02 Javascript
H5用户注册表单页 注册模态框!
2016/09/17 Javascript
JavaScript易错知识点整理
2016/12/05 Javascript
详解AngularJS 模块化
2017/06/14 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
React性能优化系列之减少props改变的实现方法
2019/01/17 Javascript
讲解Python中for循环下的索引变量的作用域
2015/04/15 Python
详解Python 协程的详细用法使用和例子
2018/06/15 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
Python列表与元组的异同详解
2019/07/02 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
2020/01/12 Python
Python如何使用27行代码绘制星星图
2020/07/20 Python
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
2015/04/24 HTML / CSS
HTML5 Canvas概述
2009/08/26 HTML / CSS
英国评分最高的女性剃须刀订阅盒:FFS Beauty
2018/01/25 全球购物
城野医生官方海外旗舰店:风靡亚洲毛孔收敛水
2018/04/26 全球购物
Vision Direct比利时:在线订购隐形眼镜
2019/08/27 全球购物
乌克兰最大的家用电器和电子产品连锁店:Eldorado
2019/10/02 全球购物
Unix/Linux开发面试题
2016/08/16 面试题
酒店个人培训自我鉴定
2013/12/11 职场文书
大学生的创业计划书就该这么写
2014/01/30 职场文书
新书发布会策划方案
2014/06/09 职场文书
就业推荐表院系意见
2015/06/05 职场文书
给朋友的赠语
2015/06/23 职场文书
Java移除无效括号的方法实现
2021/08/07 Java/Android
vue3.0 数字翻牌组件的使用方法详解
2022/04/20 Vue.js