原生JS实现拖拽效果


Posted in Javascript onDecember 04, 2020

本文实例为大家分享了JS实现拖拽效果的具体代码,供大家参考,具体内容如下

想要让整个元素移动需要三个事件:

鼠标按下 onmousedown
鼠标移动 onmousemove
鼠标抬起 onmouseup

html

<div id="login" class="login">
 <!-- 点击title拖拽 -->
  <div id="title" class="login-title">登录会员
 <!-- title end -->
   <span><a id="closeBtn" href="javascript:void(0);" class="close-login">关闭</a></span>
  </div>
  <div class="login-input-content">
   <div class="login-input">
    <label>用户名:</label>
    <input type="text" placeholder="请输入用户名" name="info[username]" id="username" class="list-input">
   </div>
   <div class="login-input">
    <label>登录密码:</label>
    <input type="password" placeholder="请输入登录密码" name="info[password]" id="password" class="list-input">
   </div>
  </div>
  <div id="loginBtn" class="login-button"><a href="javascript:void(0);" id="login-button-submit">登录会员</a></div>
</div>

原生JS实现拖拽效果

JS

var login = document.querySelector('.login');//获取整个弹框的内容
var title = document.querySelector('#title');
 title.addEventListener('mousedown',function(e){
  //当按下鼠标的时候,获取到鼠标在拖拽盒子内的坐标
  //鼠标在页面的坐标 - 大盒子距离浏览器左侧的距离
  var x = e.pageX - login.offsetLeft;
  var y = e.pageY - login.offsetTop;

  //鼠标移动
  document.addEventListener('mousemove',move);

  function move(e){
  //拖拽的盒子定位=鼠标在页面的坐标 - 鼠标在拖拽盒子的坐标
   login.style.left = e.pageX - x + 'px';
   login.style.top = e.pageY - y + 'px';
  }

  //当鼠标抬起的时候,将移动事件删除
  document.addEventListener('mouseup',function(){
   document.removeEventListener('mousemove',move);
  })

 })

CSS部分

<style>
 *{
   padding: 0px;
   margin: 0px;
  }
  .login {
   display: block;
   width: 512px;
   height: 280px;
   position: fixed;
   border: #ebebeb solid 1px;
   left: 50%;
   top: 50%;
   background: #ffffff;
   box-shadow: 0px 0px 20px #ddd;
   z-index: 9999;
   transform: translate(-50%, -50%);
  }
  .login-title {
   width: 100%;
   margin: 10px 0px 0px 0px;
   text-align: center;
   line-height: 40px;
   height: 40px;
   font-size: 18px;
   position: relative;
   cursor: move;
  }
  .login-input-content {
   margin-top: 20px;
  }
  .login-button {
   width: 50%;
   margin: 30px auto 0px auto;
   line-height: 40px;
   font-size: 14px;
   border: #ebebeb 1px solid;
   text-align: center;
  }
  .login-bg {
   display: none;
   width: 100%;
   height: 100%;
   position: fixed;
   top: 0px;
   left: 0px;
   background: rgba(0, 0, 0, .3);
  }
  a {
   text-decoration: none;
   color: #000000;
  }
  .login-button a {
   display: block;
  }
  .login-input input.list-input {
   float: left;
   line-height: 35px;
   height: 35px;
   width: 350px;
   border: #ebebeb 1px solid;
   text-indent: 5px;
  }
  .login-input {
   overflow: hidden;
   margin: 0px 0px 20px 0px;
  }
  .login-input label {
   float: left;
   width: 90px;
   padding-right: 10px;
   text-align: right;
   line-height: 35px;
   height: 35px;
   font-size: 14px;
  }
  .login-title span {
   position: absolute;
   font-size: 12px;
   right: -20px;
   top: -30px;
   background: #ffffff;
   border: #ebebeb solid 1px;
   width: 40px;
   height: 40px;
   border-radius: 20px;
  }
</style>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript event 事件解析
Jan 31 Javascript
Javascript面向对象之四 继承
Feb 08 Javascript
jQuery图片播放8款精美插件分享
Feb 17 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
Jul 07 Javascript
iframe父页面获取子页面参数的方法
Feb 21 Javascript
jquery点击切换背景色的简单实例
Aug 25 Javascript
iscroll动态加载数据完美解决方法
Jul 18 Javascript
JavaScript面试出现频繁的一些易错点整理
Mar 29 Javascript
three.js搭建室内场景教程
Dec 30 Javascript
基于Vue 撸一个指令实现拖拽功能
Oct 09 Javascript
React 条件渲染最佳实践小结(7种)
Sep 27 Javascript
JavaScript如何实现防止重复的网络请求的示例
Jan 28 Javascript
vue-calendar-component 封装多日期选择组件的实例代码
Dec 04 #Vue.js
如何正确解决VuePress本地访问出现资源报错404的问题
Dec 03 #Vue.js
JS如何监听div的resize事件详解
Dec 03 #Javascript
JavaScript十大取整方法实例教程
Dec 03 #Javascript
js实现圆形菜单选择器
Dec 03 #Javascript
Javascript新手入门之字符串拼接与变量的应用
Dec 03 #Javascript
vue表单验证之禁止input输入框输入空格
Dec 03 #Vue.js
You might like
PHPEXCEL 使用小记
2013/01/06 PHP
基于Zookeeper的使用详解
2013/05/02 PHP
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
jquery实现倒计时代码分享
2014/06/13 Javascript
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
实现无刷新联动例子汇总
2015/05/20 Javascript
简介BootStrap model弹出框的使用
2016/04/27 Javascript
js如何判断是否在iframe中及防止网页被别站用iframe嵌套
2017/01/11 Javascript
Angular4 ElementRef的应用
2018/02/26 Javascript
Javascript Promise用法详解
2018/05/10 Javascript
如何使用JavaScript检测空闲的浏览器选项卡
2020/05/28 Javascript
详解Vue中的watch和computed
2020/11/09 Javascript
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
python mysqldb连接数据库
2009/03/16 Python
pyramid配置session的方法教程
2013/11/27 Python
零基础写python爬虫之使用urllib2组件抓取网页内容
2014/11/04 Python
Python实现Tab自动补全和历史命令管理的方法
2015/03/12 Python
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
Python 2与Python 3版本和编码的对比
2017/02/14 Python
彻底搞懂Python字符编码
2018/01/23 Python
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
python生成器与迭代器详解
2019/01/01 Python
Python实现朴素贝叶斯的学习与分类过程解析
2019/08/24 Python
利用python Selenium实现自动登陆京东签到领金币功能
2019/10/31 Python
tensorflow指定CPU与GPU运算的方法实现
2020/04/21 Python
Python 读取位于包中的数据文件
2020/08/07 Python
美国殿堂级滑板、冲浪、滑雪服装品牌:Volcom(钻石)
2017/04/20 全球购物
Spartoo比利时:欧洲时尚购物网站
2017/12/06 全球购物
外贸业务员求职信范文
2013/12/12 职场文书
优秀应届毕业生自荐书
2014/06/29 职场文书
4s店销售经理岗位职责
2014/07/19 职场文书
考试作弊检讨书1000字(5篇)
2014/10/19 职场文书
女儿满月酒致辞
2015/07/29 职场文书
投资入股协议书
2016/03/22 职场文书
MySQL日期时间函数知识汇总
2022/03/17 MySQL
java版 简单三子棋游戏
2022/05/04 Java/Android