原生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 相关文章推荐
解析jQuery与其它js(Prototype)库兼容共存
Jul 04 Javascript
使用pjax实现无刷新更改页面url
Feb 05 Javascript
jQuery多个input求和的实现方法
Feb 12 Javascript
在linux中使用包管理器安装node.js
Mar 13 Javascript
JS实现窗口加载时模拟鼠标移动的方法
Jun 03 Javascript
BootStrap selectpicker
Jun 20 Javascript
Bootstrap fileinput文件上传预览插件使用详解
May 16 Javascript
简单实现jQuery轮播效果
Aug 18 jQuery
vuex中使用对象展开运算符的示例
Sep 25 Javascript
基于mpvue的小程序项目搭建的步骤
May 22 Javascript
Javascript实现异步编程的过程
Jun 18 Javascript
详解如何写出一个利于扩展的vue路由配置
May 16 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
基于Zookeeper的使用详解
2013/05/02 PHP
php使用正则表达式去掉html中的注释方法
2016/11/03 PHP
php+layui数据表格实现数据分页渲染代码
2019/10/26 PHP
Javascript 不能释放内存.
2006/09/07 Javascript
javascript下查找父节点的简单方法
2007/08/13 Javascript
动态调用CSS文件的JS代码
2010/07/29 Javascript
js 调用本地exe的例子(支持IE内核的浏览器)
2012/12/26 Javascript
javascript 面向对象封装与继承
2014/11/27 Javascript
JS清除选择内容的方法
2015/01/29 Javascript
js智能获取浏览器版本UA信息的方法
2016/08/08 Javascript
vue双向数据绑定原理探究(附demo)
2017/01/17 Javascript
详解使用路由延迟加载 Angular 模块
2017/10/12 Javascript
浅谈Node.js 沙箱环境
2018/05/15 Javascript
详解vue路由
2020/08/05 Javascript
[40:03]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#1EHOME VS Archon
2016/03/02 DOTA
Python httplib,smtplib使用方法
2008/09/06 Python
在Python中实现贪婪排名算法的教程
2015/04/17 Python
Python类的定义、继承及类对象使用方法简明教程
2015/05/08 Python
详解Python中time()方法的使用的教程
2015/05/22 Python
python3使用urllib模块制作网络爬虫
2016/04/08 Python
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
2016/05/27 Python
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
Python实现螺旋矩阵的填充算法示例
2017/12/28 Python
pytorch对可变长度序列的处理方法详解
2018/12/08 Python
Python Flask异步发送邮件实现方法解析
2020/08/01 Python
Python classmethod装饰器原理及用法解析
2020/10/17 Python
python实现按日期归档文件
2021/01/30 Python
HTML5 解决苹果手机不能自动播放音乐问题
2017/12/27 HTML / CSS
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
英国户外服装品牌:Craghoppers
2019/04/25 全球购物
C# .NET面试题
2015/11/28 面试题
四风专项整治工作情况汇报
2014/10/28 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书
Python的这些库,你知道多少?
2021/06/09 Python
前端JavaScript大管家 package.json
2021/11/02 Javascript
MySQL的存储过程和相关函数
2022/04/26 MySQL