zoukankan      html  css  js  c++  java
  • 0188 案例:模态框拖拽

    弹出框,我们也称为模态框。

    ​ 1.点击弹出层,会弹出模态框, 并且显示灰色半透明的遮挡层。

    ​ 2.点击关闭按钮,可以关闭模态框,并且同时关闭灰色半透明遮挡层。

    ​ 3.鼠标放到模态框最上面一行,可以按住鼠标拖拽模态框在页面中移动。

    ​ 4.鼠标松开,可以停止拖动模态框移动


    1.1.5 模态框拖拽案例分析

    1. 点击弹出层, 模态框和遮挡层就会显示出来 display:block;
    2. 点击关闭按钮,模态框和遮挡层就会隐藏起来 display:none;
    3. 在页面中拖拽的原理:鼠标按下并且移动, 之后松开鼠标
    4. 触发事件是鼠标按下mousedown,鼠标移动mousemove 鼠标松开 mouseup
    5. 拖拽过程:  鼠标移动过程中,获得最新的值赋值给模态框的left和top值,这样模态框可以跟着鼠标走了
    6. 鼠标按下触发的事件源是最上面一行,就是  id 为 title
    7. 鼠标的坐标减去 鼠标在盒子内的坐标, 才是模态框真正的位置。
    8. 鼠标按下,我们要得到鼠标在盒子的坐标。
    9. 鼠标移动,就让模态框的坐标  设置为  :鼠标坐标 减去盒子坐标即可,注意移动事件写到按下事件里面。
    10. 鼠标松开,就停止拖拽,就是可以让鼠标移动事件解除
    <!DOCTYPE html>
    <html>
    
    <head lang="en">
      <meta charset="UTF-8">
      <title></title>
      <style>
        .login-header {
           100%;
          text-align: center;
          height: 30px;
          font-size: 24px;
          line-height: 30px;
        }
    
        ul,
        li,
        ol,
        dl,
        dt,
        dd,
        div,
        p,
        span,
        h1,
        h2,
        h3,
        h4,
        h5,
        h6,
        a {
          padding: 0px;
          margin: 0px;
        }
    
        .login {
          display: none;
           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 {
           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 {
           50%;
          margin: 30px auto 0px auto;
          line-height: 40px;
          font-size: 14px;
          border: #ebebeb 1px solid;
          text-align: center;
        }
    
        .login-bg {
          display: none;
           100%;
          height: 100%;
          position: fixed;
          top: 0px;
          left: 0px;
          background: rgba(0, 0, 0, .1);
        }
    
        a {
          text-decoration: none;
          color: #000000;
        }
    
        .login-button a {
          display: block;
        }
    
        .login-input input.list-input {
          float: left;
          line-height: 35px;
          height: 35px;
           350px;
          border: #ebebeb 1px solid;
          text-indent: 5px;
        }
    
        .login-input {
          overflow: hidden;
          margin: 0px 0px 20px 0px;
        }
    
        .login-input label {
          float: left;
           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;
           40px;
          height: 40px;
          border-radius: 20px;
        }
      </style>
    </head>
    
    <body>
      <div class="login-header">
        <a id="link" href="javascript:;">点击,弹出登录框</a>
      </div>
    
      <div id="login" class="login">
        <div id="title" class="login-title">
          登录会员
          <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>
      <!-- 遮盖层 -->
      <div id="bg" class="login-bg"></div>
    
      <script>
        // 1. 获取元素
        var login = document.querySelector('.login');
        var mask = document.querySelector('.login-bg');
        var link = document.querySelector('#link');
        var closeBtn = document.querySelector('#closeBtn');
        var title = document.querySelector('#title');
    
        // 2. 点击弹出层这个链接 link  让mask 和login 显示出来
        link.addEventListener('click', function () {
          mask.style.display = 'block';
          login.style.display = 'block';
        })
    
        // 3. 点击 closeBtn 就隐藏 mask 和 login 
        closeBtn.addEventListener('click', function () {
          mask.style.display = 'none';
          login.style.display = 'none';
        })
    
        // 4. 开始拖拽
        // (1) 当我们鼠标按下, 就获得鼠标在盒子内的坐标
        title.addEventListener('mousedown', function (e) {
          var x = e.pageX - login.offsetLeft;
          var y = e.pageY - login.offsetTop;
    
          // (2) 鼠标移动的时候,把鼠标在页面中的坐标,减去 鼠标在盒子内的坐标就是模态框的left和top值
          document.addEventListener('mousemove', move)
    
          function move(e) {
            login.style.left = e.pageX - x + 'px';
            login.style.top = e.pageY - y + 'px';
          }
    
          // (3) 鼠标弹起,就让鼠标移动事件移除
          document.addEventListener('mouseup', function () {
            document.removeEventListener('mousemove', move);
          })
        })
      </script>
    </body>
    
    </html>
    
  • 相关阅读:
    PythonのTkinter基本原理
    使用 Word (VBA) 分割长图到多页
    如何使用 Shebang Line (Python 虚拟环境)
    将常用的 VBScript 脚本放到任务栏 (Pin VBScript to Taskbar)
    关于 VBScript 中的 CreateObject
    Windows Scripting Host (WSH) 是什么?
    Component Object Model (COM) 是什么?
    IOS 打开中文 html 文件,显示乱码的问题
    科技发展时间线(Technology Timeline)
    列置换密码
  • 原文地址:https://www.cnblogs.com/jianjie/p/12184815.html
Copyright © 2011-2022 走看看