原生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 相关文章推荐
几个比较实用的JavaScript 测试及效验工具
Apr 18 Javascript
JavaScript高级程序设计 阅读笔记(十七) js事件
Aug 14 Javascript
js选取多个或单个元素的实现代码(用class)
Aug 22 Javascript
删除Javascript Object中间的key
Nov 18 Javascript
jquery实现最简单的滑动菜单效果代码
Sep 12 Javascript
JS中使用textPath实现线条上的文字
Dec 25 Javascript
js如何验证密码强度
Mar 18 Javascript
webpack安装配置与常见使用过程详解(结合vue)
Jun 01 Javascript
javascript实现贪吃蛇小练习
Jul 05 Javascript
Vue如何实现验证码输入交互
Dec 07 Vue.js
vue如何清除浏览器历史栈
May 25 Vue.js
js基于div丝滑实现贝塞尔曲线
Sep 23 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 5.0 Pear安装方法
2006/12/06 PHP
dedecms系统常用术语汇总
2007/04/03 PHP
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
php xml常用函数的集合(比较详细)
2013/06/06 PHP
Yii控制器中filter过滤器用法分析
2016/07/15 PHP
基于 Swoole 的微信扫码登录功能实现代码
2018/01/15 PHP
激活 ActiveX 控件
2006/10/09 Javascript
简单的无缝滚动程序-仅几行代码
2007/05/08 Javascript
Use Word to Search for Files
2007/06/15 Javascript
javascript显示选择目录对话框的代码
2008/11/10 Javascript
学习ExtJS border布局
2009/10/08 Javascript
JS中不为人知的五种声明Number的方式简要概述
2013/02/22 Javascript
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
JavaScript中创建类/对象的几种方法总结
2013/11/29 Javascript
用unescape反编码得出汉字示例
2014/04/24 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
2015/06/18 Javascript
详解Backbone.js框架中的模型Model与其集合collection
2016/05/05 Javascript
关于vue单文件中引用路径的处理方法
2018/01/08 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
小程序实现tab标签页
2020/11/16 Javascript
[38:42]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第二场 11.05
2020/11/05 DOTA
python重试装饰器示例
2014/02/11 Python
python利用有道翻译实现&quot;语言翻译器&quot;的功能实例
2017/11/14 Python
Python父目录、子目录的相互调用方法
2019/02/16 Python
python async with和async for的使用
2019/06/20 Python
pycharm创建scrapy项目教程及遇到的坑解析
2019/08/15 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
通过 Python 和 OpenCV 实现目标数量监控
2020/01/05 Python
python自动生成证件号的方法示例
2021/01/14 Python
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
2013/01/31 HTML / CSS
介绍一下javax.servlet.Servlet接口及其主要方法
2015/11/30 面试题
机修工岗位职责
2013/11/24 职场文书
学校趣味运动会开幕词
2016/03/04 职场文书
Canvas跟随鼠标炫彩小球的实现
2021/04/11 Javascript