原生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 相关文章推荐
xmlHTTP实例
Oct 24 Javascript
Open and Print a Word Document
Jun 15 Javascript
csdn 博客中实现运行代码功能实现
Aug 29 Javascript
浅谈js里面的InttoStr和StrtoInt
Jun 14 Javascript
Node.js的环境安装配置(使用nvm方式)
Oct 11 Javascript
bootstrap下拉菜单使用方法解析
Jan 13 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
Jul 10 Javascript
jQuery自动或手动图片切换效果
Oct 11 jQuery
2种在vue项目中使用百度地图的简单方法
Sep 28 Javascript
element-ui upload组件多文件上传的示例代码
Oct 17 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
Jul 21 Javascript
仿照Element-ui实现一个简易的$message方法
Sep 14 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+xml实现在线英文词典查询的方法
2015/01/23 PHP
php自动识别文字编码并转换为目标编码的方法
2015/08/08 PHP
PHP多维数组转一维数组的简单实现方法
2015/12/23 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
jquery1.4 教程二 ajax方法的改进
2010/02/25 Javascript
改变隐藏的input中value值的方法
2014/03/19 Javascript
jQuery实现网页抖动的菜单抖动效果
2015/08/07 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
跟我学习javascript的最新标准ES6
2015/11/20 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
判断输入的字符串是否是日期格式的简单方法
2016/07/11 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
2016/11/07 Javascript
原生js实现选项卡功能
2017/03/08 Javascript
基于nodejs的微信JS-SDK简单应用实现
2019/05/21 NodeJs
js实现网页版贪吃蛇游戏
2020/02/22 Javascript
vue 数据遍历筛选 过滤 排序的应用操作
2020/11/17 Javascript
解决vue下载后台传过来的乱码流的问题
2020/12/05 Vue.js
[00:47]TI7不朽珍藏III——沙王不朽展示
2017/07/15 DOTA
[36:20]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.17
2020/12/18 DOTA
Python 模块EasyGui详细介绍
2017/02/19 Python
解决python3中自定义wsgi函数,make_server函数报错的问题
2017/11/21 Python
python scp 批量同步文件的实现方法
2019/01/03 Python
我们为什么要减少Python中循环的使用
2019/07/10 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2020/02/16 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
2020/06/02 Python
如何基于Python代码实现高精度免费OCR工具
2020/06/18 Python
Clearly澳大利亚:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
印度尼西亚值得信赖的第一家网店:Bhinneka
2018/07/16 全球购物
自荐信的五个重要部分
2013/10/29 职场文书
决心书标准格式
2014/03/11 职场文书
幼儿园教师师德表现自我评价
2015/03/05 职场文书
十二生肖观后感
2015/06/12 职场文书
优秀教师工作总结2015
2015/07/22 职场文书
2016年党员干部公开承诺书
2016/03/24 职场文书
深入理解redis中multi与pipeline
2021/06/02 Redis
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python