原生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 冒号 使用说明
Jun 06 Javascript
js 刷新页面的代码小结 推荐
Apr 02 Javascript
js调用AJAX时Get和post的乱码解决方法
Jun 04 Javascript
jQuery中prevAll()方法用法实例
Jan 08 Javascript
浅析Javascript ES6新增值比较函数Object.is
Aug 24 Javascript
原生JS实现网络彩票投注效果
Sep 25 Javascript
微信小程序 连续旋转动画(this.animation.rotate)详解
Apr 07 Javascript
JavaScript中数组常见操作技巧
Sep 01 Javascript
Node.js dgram模块实现UDP通信示例代码
Sep 26 Javascript
使用rollup打包JS的方法步骤
Dec 05 Javascript
vue实现学生信息管理系统
May 30 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
Aug 13 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
PHP fgetcsv 定义和用法(附windows与linux下兼容问题)
2012/05/29 PHP
php 注册时输入信息验证器的实现详解
2013/07/05 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
2015/07/06 PHP
php判断linux下程序问题实例
2015/07/09 PHP
PHP数组编码gbk与utf8互相转换的两种方法
2016/09/01 PHP
PHP框架自动加载类文件原理详解
2017/06/06 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
JavaScript 无符号右移赋值操作
2009/04/17 Javascript
验证javascript中Object和Function的关系的三段简单代码
2010/06/27 Javascript
Javascript自定义排序 node运行 实例
2013/06/05 Javascript
Jquery实现图片左右自动滚动示例
2013/09/25 Javascript
Javascript Web Slider 焦点图示例源码
2013/10/10 Javascript
Node.js + Redis Sorted Set实现任务队列
2016/09/19 Javascript
微信小程序 动态绑定数据及动态事件处理
2017/03/14 Javascript
jQuery中的deferred对象和extend方法详解
2017/05/08 jQuery
基于angular实现三级联动的生日插件
2017/05/12 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
layer.js之回调销毁对话框的例子
2019/09/11 Javascript
vue 实现LED数字时钟效果(开箱即用)
2019/12/08 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
Vue的自定义组件不能使用click方法的解决
2020/07/28 Javascript
解决antd Form 表单校验方法无响应的问题
2020/10/27 Javascript
分析Python的Django框架的运行方式及处理流程
2015/04/08 Python
Python探索之URL Dispatcher实例详解
2017/10/28 Python
Python算法之图的遍历
2017/11/16 Python
[原创]pip和pygal的安装实例教程
2017/12/07 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
python调用自定义函数的实例操作
2019/06/26 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
2019/08/22 Python
Python大数据之使用lxml库解析html网页文件示例
2019/11/16 Python
思想政治自我鉴定
2013/10/06 职场文书
2014五年级班主任工作总结
2014/12/05 职场文书
党支部对转正的意见
2015/06/02 职场文书
公司联欢会主持词
2015/07/04 职场文书
关于艺术节的开幕致辞
2016/03/04 职场文书
工作建议书范文
2019/07/08 职场文书