原生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代码
Sep 22 Javascript
jquery给图片添加鼠标经过时的边框效果
Nov 12 Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
Jul 23 Javascript
javascript中的__defineGetter__和__defineSetter__介绍
Aug 15 Javascript
JavaScript数据类型判定的总结笔记
Jul 31 Javascript
深入理解bootstrap框架之入门准备
Oct 09 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
Oct 19 Javascript
Node.js中process模块常用的属性和方法
Dec 13 Javascript
javascript使用递归算法求两个数字组合功能示例
Jan 03 Javascript
vue2单元测试环境搭建
May 24 Javascript
全网小程序接口请求封装实例代码
Nov 06 Javascript
Vue使用Proxy代理后仍无法生效的解决
Nov 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学习教程之第2天
2008/06/15 PHP
基于PHP读取TXT文件向数据库导入海量数据的方法
2013/04/23 PHP
功能强大的PHP POST提交数据类
2016/07/15 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
jQuery教程 $()包装函数来实现数组元素分页效果
2013/08/13 Javascript
javascript ajax的5种状态介绍
2014/08/18 Javascript
Javascript基础之数组的使用
2016/05/13 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
2016/12/15 Javascript
纯JS实现表单验证实例
2016/12/24 Javascript
原生JS实现图片懒加载(lazyload)实例
2017/06/13 Javascript
解决vue里碰到 $refs 的问题的方法
2017/07/13 Javascript
JavaScript实现图片懒加载的方法分析
2018/07/05 Javascript
Vue常用指令详解分析
2018/08/19 Javascript
angularjs http与后台交互的实现示例
2018/12/21 Javascript
使用ThinkJs搭建微信中控服务的实现方法
2019/08/08 Javascript
vue-model实现简易计算器
2020/08/17 Javascript
Openlayers学习之加载鹰眼控件
2020/09/28 Javascript
[02:31]DOTA2帕克 英雄基础教程
2013/11/26 DOTA
[01:08:30]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第一场 2月28日
2021/03/11 DOTA
python多行字符串拼接使用小括号的方法
2020/03/19 Python
Linux下安装python3.6和第三方库的教程详解
2018/11/09 Python
python实现异常信息堆栈输出到日志文件
2019/12/26 Python
Django中modelform组件实例用法总结
2020/02/10 Python
如何写python的配置文件
2020/06/07 Python
美国医疗用品、医疗设备和家庭保健用品商店:Medical Supply Depot
2018/07/08 全球购物
中东奢侈品购物网站:Ounass
2020/09/02 全球购物
企业活动策划方案
2014/06/02 职场文书
大学毕业生求职自荐书
2014/06/05 职场文书
群众路线个人整改方案
2014/10/25 职场文书
杭州黄龙洞导游词
2015/02/10 职场文书
硕士毕业答辩开场白
2015/05/27 职场文书
《秋天的图画》教学反思
2016/02/19 职场文书
36个正则表达式(开发效率提高80%)
2021/11/17 Javascript
一篇文章告诉你如何实现Vue前端分页和后端分页
2022/02/18 Vue.js