原生JS实现拖拽图片效果


Posted in Javascript onAugust 27, 2020

本文实例为大家讲解了JS实现拖拽图片效果的详细代码,分享给大家供大家参考,具体内容如下

javascript event 对象的clientX,offsetX,screenX,pageX的区别:

原生JS实现拖拽图片效果

用html5的drag来实现拖拽有兼容性问题,使用拖拽插件代码又很多,而这个拖拽demo代码少,并且兼容所有浏览器,很值得在项目中使用,

css样式如下:

#div1{ 
  width: 100px; height: 100px; 
  background-color: #4D4D4D; 
  position: absolute; cursor: pointer; 
  -webkit-box-shadow: 3px 3px 0px 3px #C7C7C7; 
  box-shadow: 3px 3px 3px 0px #C7C7C7; 
 }
 #parent{ 
  width: 500px; height: 500px; 
  border: 1px solid #CDCDCD; 
  position: relative; margin: 0 auto; //父级元素设置为:
  background-color: #F4F4F4; 
 }
 .postText{
  width: 500px; height: 30px;margin: 0 auto; background-color: #F4F4F4;
 }
 .postText span{ 
  padding:0px 10px;
 }

html代码如下:

<div id="parent">
 <div id="div1" onmousemove="posMove(this.id)"></div>
</div>
<div class="postText">
 移动的距离Top:<span id="posTop"></span>Left:<span id="posLeft"></span>
</div>

js代码及注释如下

function posMove(getdivid) {
  var oDiv = document.getElementById(getdivid);
  var oParent = document.getElementById('parent');
  var sent = {
   l: 10, //设置div在父元素的活动范围,10相当于给父div设置padding-left:10;
   r: oParent.offsetWidth - oDiv.offsetWidth, // offsetWidth:当前对象的宽度, offsetWidth = width+padding+border
   t: 10,
   b: oParent.offsetHeight - oDiv.offsetHeight,
   n: 10
  }
  drag(oDiv, sent); 
 }
 
 /**
  *
  * @param obj:被拖动的div
  * @param sent :设置div在容器中可以被拖动的区域
  */
 function drag(obj,sent){

  var dmW = document.documentElement.clientWidth || document.body.clientWidth;
  var dmH = document.documentElement.clientHeight || document.body.clientHeight;

  var sent = sent || {};
  var l = sent.l || 0;
  var r = sent.r || dmW - obj.offsetWidth;
  var t = sent.t || 0;
  var b = sent.b || dmH - obj.offsetHeight;
  var n = sent.n || 10;

  obj.onmousedown = function (ev){
   var oEvent = ev || event;
   var sentX = oEvent.clientX - obj.offsetLeft;
   var sentY = oEvent.clientY - obj.offsetTop;

   document.onmousemove = function (ev){
    var oEvent = ev || event;

    var slideLeft = oEvent.clientX - sentX;
    var slideTop = oEvent.clientY - sentY;

    if(slideLeft <= l){
     slideLeft = l;
    }
    if(slideLeft >= r){
     slideLeft = r;
    }
    if(slideTop <= t){
     slideTop = t;
    }
    if(slideTop >= b){
     slideTop = b;
    }

    obj.style.left = slideLeft + 'px';
    obj.style.top = slideTop + 'px';

    document.getElementById('posTop').innerHTML = slideTop;
    document.getElementById('posLeft').innerHTML = slideLeft;

   };
   document.onmouseup = function (){
    document.onmousemove = null;
    document.onmouseup = null;
   }

   return false;
  }
 }

以上就是关于js拖拽效果的实现代码,希望对大家的学习有所帮助。

Javascript 相关文章推荐
浅谈JavaScript中setInterval和setTimeout的使用问题
Aug 01 Javascript
js验证真实姓名与身份证号是否匹配
Oct 13 Javascript
bootstrap-treeview自定义双击事件实现方法
Jan 09 Javascript
深入剖析JavaScript:Object类型
May 10 Javascript
JS判断两个对象内容是否相等的方法示例
Apr 10 Javascript
AngularJS基于factory创建自定义服务的方法详解
May 25 Javascript
Node.js 中使用 async 函数的方法
Nov 20 Javascript
Layui数据表格之获取表格中所有的数据方法
Aug 20 Javascript
快速了解Node中的Stream流是什么
Feb 13 Javascript
angular使用md5,CryptoJS des加密的方法
Jun 03 Javascript
解决Vue中 父子传值 数据丢失问题
Aug 27 Javascript
vue 实现超长文本截取,悬浮框提示
Jul 29 Javascript
基于jquery实现下拉框美化特效
Feb 02 #Javascript
AngularJS自动表单验证
Feb 01 #Javascript
javascript实现右侧弹出“分享到”窗口效果
Feb 01 #Javascript
AngularJS手动表单验证
Feb 01 #Javascript
基于JavaScript实现动态添加删除表格的行
Feb 01 #Javascript
基于jQuery实现二级下拉菜单效果
Feb 01 #Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
Feb 01 #Javascript
You might like
php在window iis的莫名问题的测试方法
2013/05/14 PHP
使用PHP实现Mysql读写分离
2013/06/28 PHP
php禁止浏览器使用缓存页面的方法
2014/11/07 PHP
CI框架的安全性分析
2016/05/18 PHP
thinkphp5.1框架模板赋值与变量输出示例
2020/05/25 PHP
PHP底层运行机制与工作原理详解
2020/07/31 PHP
Alliance vs Liquid BO3 第三场2.13
2021/03/10 DOTA
JQuery读取XML文件数据并显示的实现代码
2009/12/16 Javascript
分享20款好玩的jQuery游戏
2011/04/17 Javascript
基于jQuery的获取标签名的代码
2012/07/16 Javascript
随鼠标上下滚动的jquery代码
2013/12/05 Javascript
解决js中window.open弹出的是上次的缓存页面问题
2013/12/29 Javascript
JavaScript对象的property属性详解
2014/04/01 Javascript
js Dialog 去掉右上角的X关闭功能
2014/04/23 Javascript
JavaScript不刷新实现浏览器的前进后退功能
2014/11/05 Javascript
Node.js中npm常用命令大全
2016/06/09 Javascript
超全面的javascript中变量命名规则
2017/02/09 Javascript
jQuery上传插件webupload使用方法
2017/08/01 jQuery
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
详解vue配置后台接口方式
2019/03/29 Javascript
vue ajax 拦截原理与实现方法示例
2019/11/29 Javascript
基于JavaScript或jQuery实现网站夜间/高亮模式
2020/05/30 jQuery
[03:26]《DAC最前线》之EG经理自述DOTA2经历
2015/02/02 DOTA
[50:58]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 Mineski vs EG
2018/04/03 DOTA
python 垃圾收集机制的实例详解
2017/08/20 Python
Python温度转换实例分析
2018/01/17 Python
Python eval的常见错误封装及利用原理详解
2019/03/26 Python
pytorch制作自己的LMDB数据操作示例
2019/12/18 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
Python爬虫使用bs4方法实现数据解析
2020/08/25 Python
python中slice参数过长的处理方法及实例
2020/12/15 Python
标准离婚协议书(2014版)
2014/10/05 职场文书
开会通知
2015/04/20 职场文书
2016年春节慰问信息大全
2015/11/30 职场文书
SpringBoot集成Druid连接池连接MySQL8.0.11
2021/07/02 Java/Android