原生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 相关文章推荐
JS维吉尼亚密码算法实现代码
Nov 09 Javascript
javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
Dec 17 Javascript
jquery实现在页面加载完毕后获取图片高度或宽度
Jun 16 Javascript
js重写alert控件(适合学习js的新手朋友)
Aug 24 Javascript
JS简单限制textarea内输入字符数量的方法
Oct 14 Javascript
盘点javascript 正则表达式中 中括号的【坑】
Mar 16 Javascript
基于Bootstrap使用jQuery实现输入框组input-group的添加与删除
May 03 Javascript
关于JS中setTimeout()无法调用带参函数问题的解决方法
Jun 21 Javascript
深入浅析search 搜索框的写法
Aug 02 Javascript
利用js将ajax获取到的后台数据动态加载至网页中的方法
Aug 08 Javascript
JS实现的新闻列表自动滚动效果示例
Jan 30 Javascript
vue npm install 安装某个指定的版本操作
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
laravel5创建service provider和facade的方法详解
2016/07/26 PHP
PHP命名空间与自动加载类详解
2018/09/04 PHP
Yii框架引入coreseek分页功能示例
2019/02/08 PHP
asp.net和php的区别点总结
2019/10/10 PHP
Yii框架的redis命令使用方法简单示例
2019/10/15 PHP
THREE.JS入门教程(1)THREE.JS使用前了解
2013/01/24 Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
2014/06/16 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
2015/08/12 Javascript
jQuery代码实现对话框右上角菜单带关闭×
2016/05/03 Javascript
Vue.js教程之计算属性
2016/11/11 Javascript
BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法
2016/12/01 Javascript
jQuery弹出层插件popShow用法示例
2017/01/23 Javascript
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
微信小程序富文本渲染引擎的详解
2017/09/30 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
2017/10/08 Javascript
9种改善AngularJS性能的方法
2017/11/28 Javascript
JS无限级导航菜单实现方法
2019/01/05 Javascript
使用vue2.6实现抖音【时间轮盘】屏保效果附源码
2019/04/24 Javascript
Vuex的热更替如何实现
2020/06/05 Javascript
python&amp;MongoDB爬取图书馆借阅记录
2016/02/05 Python
Python selenium 三种等待方式详解(必会)
2016/09/15 Python
Python 使用requests模块发送GET和POST请求的实现代码
2016/09/21 Python
python 3.6.2 安装配置方法图文教程
2018/09/18 Python
python hook监听事件详解
2018/10/25 Python
python实现感知器算法(批处理)
2019/01/18 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
2019/08/02 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
2020/02/14 Python
python怎么调用自己的函数
2020/07/01 Python
html5摇一摇代码优化包括DeviceMotionEvent等等
2014/09/01 HTML / CSS
英国时尚家具、家居饰品及礼品商店:Graham & Green
2016/09/15 全球购物
自我评价怎么写好呢?
2013/12/05 职场文书
小学敬老月活动方案
2014/02/11 职场文书
《冬阳童年骆驼队》教学反思
2014/04/15 职场文书
2014年局领导班子自身建设情况汇报
2014/11/21 职场文书
2015年挂职锻炼个人总结
2015/10/22 职场文书