原生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 相关文章推荐
Array.slice()与Array.splice()的返回值类型
Oct 09 Javascript
document.designMode的功能与使用方法介绍
Nov 22 Javascript
jQuery调用WebService的实现代码
Jun 19 Javascript
更靠谱的H5横竖屏检测方法(js代码)
Sep 13 Javascript
JavaScript每天必学之基础知识
Sep 17 Javascript
详解Node.js access_token的获取、存储及更新
Jun 20 Javascript
AngularJs 延时器、计时器实例代码
Sep 16 Javascript
Vue+jquery实现表格指定列的文字收缩的示例代码
Jan 09 jQuery
使用NestJS开发Node.js应用的方法
Dec 03 Javascript
vue实现浏览器全屏展示功能
Nov 27 Javascript
详解Vue+elementUI build打包部署后字体图标丢失问题
Jul 13 Javascript
如何构建一个Vue插件并生成npm包
Oct 26 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
19个Android常用工具类汇总
2014/12/30 PHP
php获取文件后缀的9种方法
2016/03/22 PHP
php遍历替换目录下文件指定内容的方法
2016/11/10 PHP
php微信公众平台开发(四)回复功能开发
2016/12/06 PHP
php实现xml转换数组的方法示例
2017/02/03 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
2017/05/08 PHP
php unlink()函数使用教程
2018/07/12 PHP
PHP封装的简单连接MongoDB类示例
2019/02/13 PHP
通过javascript设置css属性的代码
2009/12/28 Javascript
JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
2010/01/12 Javascript
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
2010/09/12 Javascript
用javascript添加控件自定义属性解析
2013/11/25 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
2015/04/06 Javascript
JavaScript使用push方法添加一个元素到数组末尾用法实例
2015/04/06 Javascript
常用的Javascript设计模式小结
2015/12/09 Javascript
JS组件Bootstrap实现图片轮播效果
2016/05/16 Javascript
jQuery实现验证码功能
2017/03/17 Javascript
JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码
2017/09/23 jQuery
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
从零开始封装自己的自定义Vue组件
2018/10/09 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
ES6基础之默认参数值
2019/02/21 Javascript
js中Generator函数的深入讲解
2019/04/07 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
2019/05/05 Javascript
javascript面向对象三大特征之继承实例详解
2019/07/24 Javascript
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
使用Vue调取接口,并渲染数据的示例代码
2019/10/28 Javascript
记一次react前端项目打包优化的方法
2020/03/30 Javascript
Vue按时间段查询数据组件使用详解
2020/08/21 Javascript
Python实现Windows上气泡提醒效果的方法
2015/06/03 Python
Python实现字符串反转的常用方法分析【4种方法】
2017/09/30 Python
python如何生成网页验证码
2018/07/28 Python
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
美国女孩洋娃娃店:American Girl
2017/10/24 全球购物
2015最新学生自我评价范文
2015/03/03 职场文书