原生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 相关文章推荐
javascritp添加url参数将参数加入到url中
Sep 25 Javascript
每天一篇javascript学习小结(属性定义方法)
Nov 19 Javascript
JavaScript的removeChild()函数用法详解
Dec 27 Javascript
详解Node.js模块间共享数据库连接的方法
May 24 Javascript
JS+CSS3实现超炫的散列画廊特效
Jul 16 Javascript
jQuery Validate让普通按钮触发表单验证的方法
Dec 15 Javascript
jsonp跨域请求实现示例
Mar 13 Javascript
使用Webpack提高Vue.js应用的方式汇总(四种)
Jul 10 Javascript
全面解析jQuery中的$(window)与$(document)的用法区别
Aug 15 jQuery
layui数据表格跨行自动合并的例子
Sep 02 Javascript
简单使用webpack打包文件的实现
Oct 29 Javascript
JS数组方法some、every和find的使用详情
Oct 05 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 socket方式提交的post详解
2008/07/19 PHP
PHP命名空间(Namespace)的使用详解
2013/05/04 PHP
详解js异步文件加载器
2016/01/24 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
详解PHP使用Redis存储session时的一个Warning定位
2017/07/05 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
常用的JQuery函数及功能小结
2016/03/24 Javascript
js改变css样式的三种方法推荐
2016/06/28 Javascript
深入浅析javascript中的作用域(推荐)
2016/07/19 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
js省市区级联查询(插件版&amp;无插件版)
2017/03/21 Javascript
vue component组件使用方法详解
2017/07/14 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
python实现文本文件合并
2015/12/29 Python
python下os模块强大的重命名方法renames详解
2017/03/07 Python
python3 深浅copy对比详解
2019/08/12 Python
Python生成个性签名图片获取GUI过程解析
2019/12/16 Python
Python requests上传文件实现步骤
2020/09/15 Python
python 简单的调用有道翻译
2020/11/25 Python
7款设计巧妙的css3飘带状3D立体效果的导航菜单和表单窗口
2013/02/04 HTML / CSS
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
2019/01/18 HTML / CSS
美国知名日用品连锁超市:Dollar General(多来店)
2017/01/14 全球购物
德国最大的网上鞋店之一:Schuhe24.de
2017/06/10 全球购物
Lookfantastic法国官网:英国知名美妆购物网站
2017/10/28 全球购物
营销与策划个人求职信
2013/09/22 职场文书
2014年五一活动策划方案
2014/03/15 职场文书
实习单位评语
2014/04/26 职场文书
小学生2014国庆节演讲稿:祖国在我心中
2014/09/21 职场文书
授权委托书范本(单位)
2014/09/28 职场文书
普通党员个人剖析材料
2014/10/08 职场文书
食堂采购员岗位职责
2015/04/03 职场文书
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/04/22 无线电
Java 超详细讲解数据结构中的堆的应用
2022/04/02 Java/Android
MySQL分区以及建索引的方法总结
2022/04/13 MySQL
React如何使用axios请求数据并把数据渲染到组件
2022/08/05 Javascript