简单实现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 相关文章推荐
JScript内置对象Array中元素的删除方法
Mar 08 Javascript
网页加载时页面显示进度条加载完成之后显示网页内容
Dec 23 Javascript
自己用jQuery写了一个图片的马赛克消失效果
May 04 Javascript
jQuery实现伪分页的方法分享
Feb 17 Javascript
js原生实现FastClick事件的实例
Nov 20 Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
May 02 Javascript
AngularJS 限定$scope的范围实例详解
Jun 23 Javascript
JS和jQuery通过this获取html标签中的属性值(实例代码)
Sep 11 jQuery
JavaScript+Canvas实现彩色图片转换成黑白图片的方法分析
Jul 31 Javascript
layer弹出子iframe层父子页面传值的实现方法
Nov 22 Javascript
JS实现返回上一页并刷新页面的方法分析
Jul 16 Javascript
vue与django集成打包的实现方法
Nov 11 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/11/16 PHP
PHP优于Node.js的五大理由分享
2012/09/15 PHP
探讨如何在PHP开启gzip页面压缩实例
2013/06/09 PHP
跟我学Laravel之视图 &amp; Response
2014/10/15 PHP
php实现通用的信用卡验证类
2015/03/24 PHP
PHP文件缓存类实现代码
2015/10/26 PHP
PHP模板引擎Smarty内建函数详解
2016/04/11 PHP
PHP实现的XML操作类【XML Library】
2016/12/29 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
2018/09/05 PHP
用javascript获得地址栏参数的两种方法
2006/11/08 Javascript
js同时按下两个方向键
2007/12/01 Javascript
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
jqgrid 表格数据导出实例
2013/11/21 Javascript
快速使用Bootstrap搭建传送带
2016/05/06 Javascript
浅谈js里面的InttoStr和StrtoInt
2016/06/14 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
JS基于递归实现倒计时效果的方法
2016/11/26 Javascript
Vue项目中引入外部文件的方法(css、js、less)
2017/07/24 Javascript
微信小程序实现跟随菜单效果和循环嵌套加载数据
2017/11/21 Javascript
在Create React App中启用Sass和Less的方法示例
2019/01/16 Javascript
关于JSON解析的实现过程解析
2019/10/08 Javascript
js在HTML的三种引用方式详解
2020/08/29 Javascript
Python读取txt某几列绘图的方法
2018/10/14 Python
python获取网络图片方法及整理过程详解
2019/12/20 Python
Python爬取某平台短视频的方法
2021/02/08 Python
多重CSS背景动画实现方法示例
2014/04/04 HTML / CSS
美国大码时尚女装购物网站:ELOQUII
2017/12/28 全球购物
IdealFit官方网站:女性蛋白质、补充剂和运动服装
2019/03/24 全球购物
人事行政主管岗位职责
2013/12/22 职场文书
小学生优秀评语大全
2014/04/22 职场文书
幼儿园教师节感谢信
2015/01/23 职场文书
房屋认购协议书
2015/01/29 职场文书
python获取淘宝服务器时间的代码示例
2021/04/22 Python
MySQL8.0.24版本Release Note的一些改进点
2021/04/22 MySQL
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
2021/04/29 HTML / CSS