简单实现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/Css 文件的代码
Jul 03 Javascript
修改jQuery Validation里默认的验证方法
Feb 14 Javascript
js中关于一个分号的崩溃示例
Nov 11 Javascript
js取消单选按钮选中示例代码
Nov 14 Javascript
js数组的五种迭代方法及两种归并方法(推荐)
Jun 14 Javascript
jQuery动态添加可拖动元素完整实例(附demo源码下载)
Jun 21 Javascript
使用ionic切换页面卡顿的解决方法
Dec 16 Javascript
利用vue实现模态框组件
Dec 19 Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
Mar 02 Javascript
jQuery实现的事件绑定功能基本示例
Oct 11 jQuery
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
May 01 Javascript
vue实现计算器功能
Feb 22 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
让你同时上传 1000 个文件 (一)
2006/10/09 PHP
php 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
Javascript与flash交互通信基础教程
2008/08/07 Javascript
拖拉表格的JS函数
2008/11/20 Javascript
jQuery的运行机制和设计理念分析
2011/04/05 Javascript
Javascript/Jquery——简单定时器的多种实现方法
2013/07/03 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
JS 打印功能代码可实现打印预览、打印设置等
2014/10/31 Javascript
javascript控制台详解
2015/06/25 Javascript
AngularJS 基础ng-class-even指令用法
2016/08/01 Javascript
快速实现jQuery多级菜单效果
2017/02/01 Javascript
ES6新特性一: let和const命令详解
2017/04/20 Javascript
微信小程序动态生成二维码的实现代码
2018/07/25 Javascript
vue绑定事件后获取绑定事件中的this方法
2018/09/15 Javascript
详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs
2019/04/29 NodeJs
微信小程序云开发之使用云函数
2019/05/17 Javascript
一文秒懂JavaScript构造函数、实例、原型对象以及原型链
2020/08/25 Javascript
vue中可编辑树状表格的实现代码
2020/10/31 Javascript
[47:06]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第一局
2016/03/05 DOTA
python 第三方库的安装及pip的使用详解
2017/05/11 Python
python3 下载网络图片代码实例
2019/08/27 Python
Python中remove漏删和索引越界问题的解决
2020/03/18 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
详解pandas映射与数据转换
2021/01/22 Python
幼儿园实习自我鉴定
2013/12/15 职场文书
运动会广播稿300字
2014/01/10 职场文书
个人简历自我评价
2014/02/02 职场文书
绩效工资实施方案
2014/03/15 职场文书
活动策划求职信模板
2014/04/21 职场文书
黄山导游词
2015/01/31 职场文书
入学证明
2015/06/23 职场文书
主婚人致辞精选
2015/07/28 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书
七年级作文之关于奶奶
2019/10/29 职场文书
Python 内置函数速查表一览
2021/06/02 Python
uni-app 微信小程序授权登录的实现步骤
2022/02/18 Javascript