简单实现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 相关文章推荐
innerhtml用法 innertext用法 以及innerHTML与innertext的区别
Oct 26 Javascript
使用indexOf等在JavaScript的数组中进行元素查找和替换
Sep 18 Javascript
解析Javascript小括号“()”的多义性
Dec 03 Javascript
JS跨域问题详解
Nov 25 Javascript
jQuery元素的隐藏与显示实例
Jan 20 Javascript
javascript中判断json的方法总结
Aug 27 Javascript
完美解决input[type=number]无法显示非数字字符的问题
Feb 28 Javascript
简单实现js菜单栏切换效果
Mar 04 Javascript
Vuex之理解Store的用法
Apr 19 Javascript
EasyUI的DataGrid每行数据添加操作按钮的实现代码
Aug 22 Javascript
JS使用队列对数组排列,基数排序算法示例
Mar 02 Javascript
js实现窗口全屏示例详解
Sep 17 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 方便水印和缩略图的图形类
2009/05/21 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
2016/01/19 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
2016/12/12 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
laravel实现上传图片的两种方式小结
2019/10/12 PHP
070823更新的一个[消息提示框]组件 兼容ie7
2007/08/29 Javascript
解决Extjs上传图片无法预览的解决方法
2012/03/22 Javascript
Jquery实现textarea根据文本内容自适应高度
2015/04/03 Javascript
JavaScript实现鼠标滑过图片变换效果的方法
2015/04/16 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
JavaScript实现解析INI文件内容的方法
2016/11/17 Javascript
脚本div实现拖放功能(两种)
2017/02/13 Javascript
简单实现js拖拽效果
2017/07/25 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
原生js实现碰撞检测
2020/03/12 Javascript
python基于queue和threading实现多线程下载实例
2014/10/08 Python
Python多线程编程(五):死锁的形成
2015/04/05 Python
Python实现二分查找算法实例
2015/05/26 Python
Django admin实现图书管理系统菜鸟级教程完整实例
2017/12/12 Python
使用python根据端口号关闭进程的方法
2018/11/06 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
Python3 selenium 实现QQ群接龙自动化功能
2020/04/17 Python
iPython pylab模式启动方式
2020/04/24 Python
python给视频添加背景音乐并改变音量的具体方法
2020/07/19 Python
Python求区间正整数内所有素数之和的方法实例
2020/10/13 Python
详解Open Folder as PyCharm Project怎么添加的方法
2020/12/29 Python
使用tkinter实现三子棋游戏
2021/02/25 Python
基于Html5实现的react拖拽排序组件示例
2018/08/13 HTML / CSS
size?瑞典:英国伦敦的球鞋精品店
2018/03/01 全球购物
Myprotein亚太地区:欧洲第一在线运动营养品牌
2020/12/20 全球购物
后勤副校长自我鉴定
2013/10/13 职场文书
国贸类专业毕业生的求职信分享
2013/12/08 职场文书
幼儿评语大全
2014/04/30 职场文书
长辈生日祝福语大全(72句)
2019/08/09 职场文书