原生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脚本语言在网页中的简单应用
May 13 Javascript
Js动态创建div
Sep 25 Javascript
jQuery使用之设置元素样式用法实例
Jan 19 Javascript
javascript的BOM汇总
Jul 16 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
Sep 07 Javascript
javascript bom是什么及bom和dom的区别
Nov 26 Javascript
AngularJS入门示例之Hello World详解
Jan 04 Javascript
基于JavaScript实现图片连播和联级菜单实例代码
Jul 28 Javascript
react-native-fs实现文件下载、文本存储的示例代码
Sep 22 Javascript
微信小程序自定义select下拉选项框组件的实现代码
Aug 28 Javascript
VUE解决微信签名及SPA微信invalid signature问题(完美处理)
Mar 29 Javascript
axios异步提交表单数据的几种方法
Aug 11 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遍历删除整个目录及文件的方法
2015/03/13 PHP
php比较相似字符串的方法
2015/06/05 PHP
php结合ACCESS的跨库查询功能
2015/06/12 PHP
laravel实现上传图片并在页面显示的例子
2019/10/14 PHP
range 标准化之获取
2011/08/28 Javascript
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
2013/07/09 Javascript
javascript与css3动画结合使用小结
2015/03/11 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
轻松掌握JavaScript中介者模式
2016/08/26 Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
2017/01/18 Javascript
AngularJS 仿微信图片手势缩放的实例
2017/09/28 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
浅谈Vue数据响应思路之数组
2018/11/06 Javascript
如何给element添加一个抽屉组件的方法步骤
2019/07/14 Javascript
React+TypeScript+webpack4多入口配置详解
2019/08/08 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
js实现倒计时秒杀效果
2020/03/25 Javascript
python实现的解析crontab配置文件代码
2014/06/30 Python
python中as用法实例分析
2015/04/30 Python
Python操作mysql数据库实现增删查改功能的方法
2018/01/15 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
Python 中Django验证码功能的实现代码
2019/06/20 Python
python selenium 查找隐藏元素 自动播放视频功能
2019/07/24 Python
Python利用全连接神经网络求解MNIST问题详解
2020/01/14 Python
PyTorch实现AlexNet示例
2020/01/14 Python
Python多线程通信queue队列用法实例分析
2020/03/24 Python
django实现HttpResponse返回json数据为中文
2020/03/27 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
英国顶尖手表珠宝品牌独家授权经销商:HS Johnson
2020/10/28 全球购物
网络安全方面的面试题
2015/11/04 面试题
安全生产活动月方案
2014/03/09 职场文书
爽歪歪广告词
2014/03/20 职场文书
岗位工作说明书
2014/07/29 职场文书
工程资料员岗位职责
2015/04/13 职场文书
通知范文怎么写
2015/04/16 职场文书
JS + HTML 罗盘式时钟的实现
2021/05/21 Javascript