如何实现一个元素的拖拽效果,使用原生的js实现,习惯了jquery的同学们,你们自己写了吗?N久使用mvvm框架,不写jquery的东西,感觉自己完全不会了。

话不多说,直接上code。本例子以简单的div为例子。

html

<div id="div">我是一个可以退拽的div</div>

css

div {
position: fixed;
left: 0;
top: 0;
width: 100px;
height: 100px;
background: #999;
padding: 10px;
cursor: pointer;
}

javascript

window.onload = funtion() {
const div = document.getElementById('div');
let initPosition = {}; div.addEventListener('mousedown', onMousedown); function onMousedown(event) { const { pageX, pageY } = event;
initPosition = getPosition(); document.addEventListener('mousemove', omMousemove);
document.addEventListener('mouseup', onMouseUp); } function omMousemove(event) {
const { pageX, pageY } = event;
const { left, top} = calcPosition(pageX, pageY); div.style.cssText = `left:${left}px;top:${top}px;`; } function onMouseUp(event) {
document.removeEventListener('mousemove', onMouseMove);
} function calcPosition(pageX, pageY) { const { left, top, scrollLeft, maxCriticalX, maxCriticalY } = initPosition; let x = pageX - left;
let y = pageY - top; if (x <= scrollLeft) {
x = scrollLeft;
} if (x >= maxCriticalX) {
x = maxCriticalX;
} if (y >= maxCriticalY) {
y = maxCriticalY;
} if ( y<=0 || maxCriticalY < 0) {
y = 0;
} return {
left: x,
top: y
};
} function getPosition() {
const { left, top, width, height } = div.getBoundingClientRect();
const { scrollLeft, scrollTop } = document.body; const maxCriticalX = scrollLeft + innerWidth - width;
const maxCriticalY = scrollTop + innerHeight - height; return {
left,
top,
scrollLeft,
maxCriticalX,
maxCriticalY
};
}
};

 

 

使用mousedown、mousemove、mouseup实现拖拽效果的更多相关文章

  1. js div浮动层拖拽效果代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. JQ实现3D拖拽效果

    <!DOCTYPE HTML> <html onselectstart='return false'> <head> <meta http-equiv=&qu ...

  3. 拖拽系列一、JavaScript实现简单的拖拽效果

        前端拖拽相关应用汇总 在现实生活中就像男孩子牵着(拖着)女朋友的手穿过马路:从马路的一端走到另一端这种场景很常见: 而在前端开发中拖拽效果也算是前端开发中应用最常见.最普遍的特效:其拖拽涉及知 ...

  4. jquery监听事件on写法以及简单的拖拽效果

    引子——关于jquery的某些写法 我先不对监听事件做解释,我们先来看下jquery的一些写法吧!我们最常用的是jquery的css()方法,相信大家都会用! 假如用css设置一个属性,我们写法如下: ...

  5. React.js实现原生js拖拽效果及思考

    一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖 ...

  6. WinForm支持拖拽效果

    有一个MSDN客户提问在WinForm中如何实现拖拽效果——比如在WinForm中有一个Button,我要实现的效果是拖拽这个Button到目标位置后生成一个该控件的副本. 其实这个操作主要分成三步走 ...

  7. vue模块拖拽效果

    正巧在之前面试中遇到问实现拖拽效果 当时面试的时候简单回答了实现的方式与逻辑. 现在闲来无事,把这个东西实现了一下. 原理很简单,写的很方便. 数据驱动,建立一个数组,数组初始长度为1 拖动触发时,添 ...

  8. jQuery的DOM操作实例(2)——拖拽效果&&拓展插件

    一.原生JavaScript编写拖拽效果 二.jQuery编写的拖拽效果 三.在jQuery中拓展一个拖拽插件

  9. js拖拽效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. Spring asm

    Spring 获取类的详细信息,以及方法时候,是通过asm 字节码进行获取的,在平时中我们也可以依赖spring 进行处理我们的类 //可以获取类的详细信息,比如父类上谁,类上面的注解 ,是否上接口 ...

  2. C# HashCode

    如果两个对象的HashCode相等,可以认为两者相等.类型和值都相等. xx.GetHashCode();

  3. html 摄像头画面水平翻转

    <video onloadedmetadata="" id="inputVideo" autoplay muted playsinline>< ...

  4. PHP命令行执行文件或代码

    Linux环境 1.执行代码 php -r "echo 'hello';" (注意加分号,与PHP文件一样) 2.执行文件 php -f  文件所在路径(/var/www/xxx. ...

  5. apt-get 和dpkg命令

    软件包下载:apt-get 1.apt-get install vim  下载vim 2.apt-get upgrade vim 升级vim 3.apt-get update 列出更新 debian软 ...

  6. Django基础(1)-虚拟环境的安装及配置

    virtualenv介绍 (1)做什么的?virtualenv是用于创建独立的python环境,使得多个python应用彼此独立: (2)优点: a)使不同应用开发环境独立 b)环境升级不影响其他应用 ...

  7. abp zero bug

    web host 项目中ChatController GetUploadedObject 使用:using (CurrentUnitOfWork.SetTenantId(null)) 图片刷新出错,改 ...

  8. EasyTrader踩坑之旅总结

    ​ easytrader是用python写的可以调用主要券商完成自动化炒股的一个软件 ,但我用的是同花顺,在研究过程中,发现同花顺暂时调不通.后来搜索发现thstrade的源码作者说是easytrad ...

  9. ubuntu之路——day1(一点十五分 MMP终于把显卡装好了)

    因为要上手深度学习的原因,购置了一台RTX2080TI+ubuntu18.04的机器 例行两条命令 sudo apt-get update sudo apt-get upgrade 开启巨坑第一天,以 ...

  10. NoSql数据库MongoDB系列(1)——MongoDB简介

    一.NoSQL简介    NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型的数据库 .是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨.No ...