原生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 相关文章推荐
学习YUI.Ext 第四天--对话框Dialog的使用
Mar 10 Javascript
Javascript访问器属性实例分析
Dec 30 Javascript
11种ASP连接数据库的方法
Sep 18 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
Oct 10 Javascript
原生JS实现的放大镜效果实例代码
Oct 15 Javascript
JavaScript之underscore_动力节点Java学院整理
Jul 03 Javascript
微信小程序开发animation心跳动画效果
Aug 16 Javascript
微信小程序滚动Tab实现左右可滑动切换
Aug 17 Javascript
angular实现页面打印局部功能的思考与方法
Apr 13 Javascript
解决vue attr取不到属性值的问题
Sep 18 Javascript
layer弹出层倒计时关闭的实现方法
Sep 27 Javascript
react PropTypes校验传递的值操作示例
Apr 28 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 图像尺寸调整代码
2010/05/26 PHP
PHP生成随机用户名和密码的实现代码
2013/02/27 PHP
php 一维数组的循环遍历实现代码
2017/04/10 PHP
jQuery ui 1.7更新小结
2009/08/15 Javascript
JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布
2009/10/29 Javascript
JQuery实现图片轮播效果
2015/09/15 Javascript
jQuery+ajax实现滚动到页面底部自动加载图文列表效果(类似图片懒加载)
2016/06/07 Javascript
浅析$(function) ready和onload 的区别
2016/09/03 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
2016/12/14 Javascript
浅谈JavaScript的计时器对象
2016/12/26 Javascript
bootstrap中的 form表单属性role=&quot;form&quot;的作用详解
2017/01/20 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
JS实现二维数组横纵列转置的方法
2018/04/17 Javascript
react中使用css的7中方式(最全总结)
2019/02/11 Javascript
JavaScript Math对象和调试程序的方法分析
2019/05/13 Javascript
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
[36:29]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs TNC
2018/04/02 DOTA
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
Python上传package到Pypi(代码简单)
2016/02/06 Python
Python爬取APP下载链接的实现方法
2016/09/30 Python
Django 2.0版本的新特性抢先看!
2018/01/05 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
python ctypes库2_指定参数类型和返回类型详解
2019/11/19 Python
python实现二分类和多分类的ROC曲线教程
2020/06/15 Python
Selenium 配置启动项参数的方法
2020/12/04 Python
python statsmodel的使用
2020/12/21 Python
Vero Moda西班牙官方购物网站:丹麦BESTSELLER旗下知名女装品牌
2018/04/27 全球购物
教师简历自我评价
2014/02/03 职场文书
企业内部培训方案
2014/02/04 职场文书
自主招生自荐信指南
2014/02/04 职场文书
中西医专业毕业生职业规划书
2014/02/24 职场文书
党员大会主持词
2014/04/02 职场文书
学校德育工作总结2015
2015/05/11 职场文书
欠款证明
2015/06/24 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
vue递归实现树形组件
2022/07/15 Vue.js