原生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 相关文章推荐
js下判断 iframe 是否加载完成的完美方法
Oct 26 Javascript
基于jquery的多功能软键盘插件
Jul 25 Javascript
JavaScript中constructor()方法的使用简介
Jun 05 Javascript
js文本框走动跑马灯效果代码分享
Aug 25 Javascript
谈一谈bootstrap响应式布局
May 23 Javascript
浅谈jquery中的each方法$.each、this.each、$.fn.each
Jun 23 Javascript
用Vue写一个分页器的示例代码
Apr 22 Javascript
vue1.0和vue2.0的watch监听事件写法详解
Sep 11 Javascript
Vue实现剪贴板复制功能
Dec 31 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
Jul 22 Javascript
javascript实现图片轮换动作方法
Aug 07 Javascript
原生JS生成指定位数的验证码
Oct 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
PHP中对用户身份认证实现两种方法
2011/06/04 PHP
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
2011/11/10 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
PHP面向对象程序设计之对象生成方法详解
2016/12/02 PHP
PHP PDOStatement::nextRowset讲解
2019/02/01 PHP
JObj预览一个JS的框架
2008/03/13 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
2014/04/14 Javascript
用js替换除数字与逗号以外的所有字符的代码
2014/06/07 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
2015/07/28 Javascript
bootstrap3 兼容IE8浏览器!
2016/05/02 Javascript
jquery获取form表单input元素值的简单实例
2016/05/30 Javascript
js canvas实现擦除动画
2016/07/16 Javascript
手机图片预览插件photoswipe.js使用总结
2016/08/25 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
详解js的事件代理(委托)
2016/12/22 Javascript
Vue实现双向绑定的方法
2016/12/22 Javascript
[02:38]2018DOTA2亚洲邀请赛赛前采访-VGJ.T
2018/04/03 DOTA
[01:11:11]Alliance vs RNG 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
[01:33]PWL开团时刻DAY2-开雾与反开雾
2020/10/31 DOTA
Python工程师面试题 与Python基础语法相关
2016/01/14 Python
python数据清洗系列之字符串处理详解
2017/02/12 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
2018/06/13 Python
python生成多个只含0,1元素的随机数组或列表的实例
2018/11/12 Python
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
2018/11/29 Python
pytorch:model.train和model.eval用法及区别详解
2020/02/20 Python
关于python 的legend图例,参数使用说明
2020/04/17 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
Python类及获取对象属性方法解析
2020/06/15 Python
Artist Guitars新西兰:乐器在线商店
2017/09/17 全球购物
英国蛋糕装饰用品一站式商店:Craft Company
2019/03/18 全球购物
Ramy Brook官网:美国现代女装品牌
2019/06/18 全球购物
毕业生物理教师求职信
2013/10/17 职场文书
银行批评与自我批评
2014/02/10 职场文书
优秀班主任推荐材料
2014/12/17 职场文书
满月酒邀请函
2015/01/30 职场文书
Python图像处理库PIL详细使用说明
2022/04/06 Python