简单实现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将数据导出到外部Excel文档的函数代码
Jun 15 Javascript
jQuery定义背景动态切换效果的方法
Mar 23 Javascript
简介AngularJS中使用factory和service的方法
Jun 17 Javascript
js模拟淘宝网的多级选择菜单实现方法
Aug 18 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
Aug 02 Javascript
js轮盘抽奖实例分析
Apr 17 Javascript
js获取时间函数及扩展函数的方法
Oct 30 Javascript
JS 循环li添加点击事件 (闭包的应用)
Dec 10 Javascript
深入理解React中何时使用箭头函数
Aug 23 Javascript
基于zTree树形菜单的使用实例
Dec 25 Javascript
微信小程序手机号码验证功能的实例代码
Aug 28 Javascript
vue项目中常见问题及解决方案(推荐)
Oct 21 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查询域名状态whois的类
2006/11/25 PHP
php 无限分类的树类代码
2009/12/03 PHP
基于php在各种web服务器的运行模式详解
2013/06/03 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
2014/04/08 PHP
浅谈php命令行用法
2015/02/04 PHP
php对文件进行hash运算的方法
2015/04/03 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
2016/02/15 PHP
PHP中overload与override的区别
2017/02/13 PHP
php+jQuery实现的三级导航栏下拉菜单显示效果
2017/08/10 PHP
javascript AutoScroller 函数类
2009/05/29 Javascript
JavaScript写的一个DIV 弹出网页对话框
2009/08/14 Javascript
Mootools 1.2教程 Fx.Tween的使用
2009/09/15 Javascript
实现JavaScript中继承的三种方式
2009/10/16 Javascript
Query中click(),bind(),live(),delegate()的区别
2013/11/19 Javascript
JQuery each()嵌套使用小结
2014/04/18 Javascript
跟我学习javascript的异步脚本加载
2015/11/20 Javascript
关于动态执行代码(js的Eval)实例详解
2016/08/15 Javascript
深入理解jQuery layui分页控件的使用
2016/08/17 Javascript
高效的jQuery代码编写技巧总结
2017/02/22 Javascript
JavaScript输出所选择起始与结束日期的方法
2017/07/12 Javascript
vue-better-scroll 的使用实例代码详解
2018/12/03 Javascript
Vue3.x源码调试的实现方法
2019/10/13 Javascript
JS实现灯泡开关特效
2020/03/30 Javascript
jQuery--遍历操作实例小结【后代、同胞及过滤】
2020/05/22 jQuery
[11:01]2014DOTA2西雅图邀请赛 冷冷带你探秘威斯汀
2014/07/08 DOTA
python的dict,set,list,tuple应用详解
2014/07/24 Python
跟老齐学Python之dict()的操作方法
2014/09/24 Python
在pycharm中实现删除bookmark
2020/02/14 Python
在django admin详情表单显示中添加自定义控件的实现
2020/03/11 Python
试述DBMS的主要功能
2016/11/13 面试题
电子商务专业自我鉴定
2013/12/18 职场文书
《特殊的葬礼》教学反思
2014/04/27 职场文书
关于梦想的演讲稿
2014/05/05 职场文书
Python中的套接字编程是什么?
2021/06/21 Python
Java日常练习题,每天进步一点点(38)
2021/07/26 Java/Android
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
2022/04/11 PHP