原生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 相关文章推荐
Jquery Validate 正则表达式实用验证代码大全
Aug 23 Javascript
原始的js代码和jquery对比体会
Sep 10 Javascript
利用JS判断用户是否上网(连接网络)
Dec 23 Javascript
JavaScript获取当前页面上的指定对象示例代码
Feb 28 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
May 08 Javascript
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
Jan 13 Javascript
浅谈jQuery构造函数分析
May 11 Javascript
Javascript基础回顾之(二) js作用域
Jan 31 Javascript
用图片替换checkbox原始样式并实现同样的功能
Nov 15 Javascript
layui实现checkbox的目录树tree的例子
Sep 12 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
Dec 02 Javascript
vue中data里面的数据相互使用方式
Jun 05 Vue.js
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
PHP新手上路(四)
2006/10/09 PHP
纯PHP生成的一个树叶图片画图例子
2014/04/16 PHP
PHP中使用CURL获取页面title例子
2015/01/07 PHP
浅谈php中变量的数据类型判断函数
2017/03/04 PHP
基于PHP实现的多元线性回归模拟曲线算法
2018/01/30 PHP
网页里控制图片大小的相关代码
2006/06/25 Javascript
jQuery 使用手册(三)
2009/09/23 Javascript
关于javascript DOM事件模型的两件事
2010/07/22 Javascript
jquery json 实例代码
2010/12/02 Javascript
javascript面向对象之二 命名空间
2011/02/08 Javascript
用JS做的简单的可折叠的两级树形菜单
2013/09/21 Javascript
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
2015/01/01 NodeJs
14个有用的Jquery技巧分享
2015/01/08 Javascript
JS动态改变表格边框宽度的方法
2015/03/31 Javascript
JS获取年月日时分秒的方法分析
2016/11/28 Javascript
JavaScript实现音乐自动切换和轮播
2017/11/05 Javascript
基于JS实现html中placeholder属性提示文字效果示例
2018/04/19 Javascript
简述vue路由打开一个新的窗口的方法
2018/11/29 Javascript
使用Vue-cli 中为单独页面设置背景图片铺满全屏
2020/07/17 Javascript
[54:47]Liquid vs VP Supermajor决赛 BO 第五场 6.10
2018/07/05 DOTA
python 切片和range()用法说明
2013/03/24 Python
使用优化器来提升Python程序的执行效率的教程
2015/04/02 Python
Python 自动化表单提交实例代码
2017/06/08 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
python时间日期函数与利用pandas进行时间序列处理详解
2018/03/13 Python
Python使用pylab库实现绘制直方图功能示例
2018/06/01 Python
django-crontab 定时执行任务方法的实现
2019/09/06 Python
python判断链表是否有环的实例代码
2020/01/31 Python
html5教程画矩形代码分享
2013/12/04 HTML / CSS
医院护士的求职信
2014/01/03 职场文书
孝老爱亲模范事迹
2014/01/24 职场文书
师范学院美术系毕业生自我鉴定
2014/01/29 职场文书
小兵张嘎观后感300字
2015/06/03 职场文书
同事离别感言
2015/08/04 职场文书
机关单位2016年法制宣传日活动总结
2016/04/01 职场文书
vue实现滑动解锁功能
2022/03/03 Vue.js