js实现拖动模态框

模态框,我们也叫弹出框,可以在网易云,京东等之类的网页中看到。

效果如下:

代码思路:

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

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

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

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

5.在页面中拖拽的原理︰鼠标按下并且移动,之后松开鼠标

6.触发事件是鼠标按下mousedown,鼠标移动mousemove鼠标松开mouseup

7.拖拽过程:鼠标移动过程中,获得最新的值赋值给模态框的left和top值,这样模态框可以跟着鼠标走了

8.鼠标按下触发的事件源是最上面一行.就是id 为title

9.鼠标的坐标减去鼠标在盒子内的坐标,才是模态框真正的位置。

10.鼠标按下,我们要得到鼠标在盒子的坐标。

11.鼠标移动,就让模态框的坐标设置为︰鼠标坐标减去盒子坐标即可,注意移动事件写到按下事件里面。

代码步骤:

1.点击弹出层,模态框和遮挡层就会显示出来 display:block
1.1点击弹出层这个链接link  让mark 和login 显示出来

2. 点击关闭按钮,模态框和遮挡层就会隐藏出来 display:none
2.1点击弹出层这个关闭按钮closeBtn  让mark 和login 隐藏起来

3.开始拖拽
1)当鼠标按下,就获得鼠标在盒子内的坐标
2)鼠标移动的时候,把鼠标在页面中的坐标 减去 鼠标在盒子中的坐标就是模态框的left和top值 注意移动事件写到按下事件里面。
(3)鼠标弹起,就让鼠标事件移除

具体每一步的步骤也会在代码中写出来

html部分:

<div class="login-header">
            <a href="javascript:;" id="link">
                点击,弹出登录框
            </a>
        </div>
        <div id="login" class="login">
            <div id="title" class="login-title">登录会员
                <span>
                    <a href="javascript:void(0);" id="closeBtn">
                        关闭
                    </a>
                </span>
            </div>
            <div class="login-input-content">
                <div class="login-input">
                    <label>用户名:</label>
                    <input type="text" name="info[name]" id="username" placeholder="请输入用户名" />
                </div>
                <div class="login-input">
                    <label>登录密码</label>
                    <input type="password" name="info[password]" id="password" placeholder="请输入登录密码" />
                </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>

css部分:

.login-header>a {
                position: fixed;
                top: 20px;
                left: 40%;
                font-size: 30px;
 
            }
 
            .login {
                display: none;
                width: 512px;
                height: 280px;
                position: fixed;
                border: 1px solid #EBEBEB;
                left: 50%;
                top: 50%;
                background-color: #fff;
                box-shadow: 0 0 20px #ddd;
                z-index: 999;
                transform: translate(-50%, -50%);
            }
 
            .login-title {
                width: 100%;
                margin: 10px 0 0 0;
                text-align: center;
                line-height: 40px;
                height: 40px;
                position: relative;
                cursor: move;
            }
 
            .login-input-content {
                margin-top: 20px;
            }
 
            .login-button {
                width: 50%;
                margin: 30px auto 0 auto;
                line-height: 40px;
                font-size: 14px;
                border: 1px solid #EBEBEB;
                text-align: center;
            }
 
            .login-bg {
                display: none;
                width: 100%;
                height: 100%;
                position: fixed;
                top: 0;
                left: 0;
                background: rgba(0, 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;
                width: 350px;
                border: 1px solid #EBEBEB;
                text-indent: 5px;
            }
 
            .login-input {
                overflow: hidden;
                margin: 0 0 20px 40px;
            }
 
            .login-input label {
                float: left;
                width: 90px;
                padding-right: 10px;
                line-height: 35px;
                height: 35px;
                font-size: 14px
            }
 
            .login-title span {
                position: absolute;
                font-size: 12px;
                right: -10px;
                top: -30px;
                background-color: #fff;
                border: 1px solid #ebebeb;
                width: 40px;
                height: 40px;
                border-radius: 20px;
            }

javascript部分:

//1.获取元素
var login = document.querySelector('.login');
//遮盖层
var mark = document.querySelector('.login-bg');
// 显示按钮
var link = document.querySelector('#link');
//关闭按钮
var closeBtn = document.querySelector('#closeBtn');
//在title区域按下鼠标才可以拖动
var title = document.querySelector('#title')
 
// 2.点击弹出层这个链接link  让mark 和login 显示出来    
link.addEventListener('click', function() {
            mark.style.display = 'block'
            login.style.display = 'block'
        })
 
        // 3.点击弹出层这个关闭按钮closeBtn  让mark 和login 隐藏起来
        closeBtn.addEventListener('click', function() {
            mark.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(e) {
                    document.removeEventListener('mousemove', move)
            })
        })

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • JavaScript实现可拖动模态框

    本文实例为大家分享了JavaScript实现可拖动模态框的具体代码,供大家参考,具体内容如下 代码: HTML代码部分: <style> * { margin: 0px; padding: 0px; } .login-header { width: 100%; text-align: center; height: 30px; font-size: 24px; line-height: 30px; cursor: pointer; } .login { display: none; width

  • js实现拖动模态框效果

    本文实例为大家分享了js实现拖动模态框效果的具体代码,供大家参考,具体内容如下 1.实现效果: 点击链接,弹出模态框.点击关闭,关闭模态框. 点击标题部分,可以随意移动模态框的位置. 主要是获取鼠标位置. 2.思路: 3.代码: <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <meta http-equiv="

  • JS实现拖动模态框案例

    本文实例为大家分享了JS实现拖动模态框的具体代码,供大家参考,具体内容如下 效果图: 需求分析: 点击登录后登录表单和遮罩层显示,点击关闭按钮隐藏. 输入密码时可以明文查看或者隐藏. 在表单的头部按下鼠标后可以拖拽表单. 鼠标弹起拖拽结束. 话不多说,我们直接上代码: <!DOCTYPE html> <html>   <head lang="en">     <meta charset="UTF-8">     <

  • js实现拖动模态框

    模态框,我们也叫弹出框,可以在网易云,京东等之类的网页中看到. 效果如下: 代码思路: 1.点击弹出层,会弹出模态框,并且显示灰色半透明的遮挡层. 2.点击关闭按钮,可以关闭模态框,并且同时关闭灰色半透明遮挡层. 3.鼠标放到模态框最上面一行,可以按住鼠标拖拽模态框在页面中移动. 4.鼠标松开,可以停止拖动模态框移动. 5.在页面中拖拽的原理︰鼠标按下并且移动,之后松开鼠标 6.触发事件是鼠标按下mousedown,鼠标移动mousemove鼠标松开mouseup 7.拖拽过程:鼠标移动过程中,

  • JS实现简单拖动模态框案例

    本文实例为大家分享了JS实现简单拖动模态框的具体代码,供大家参考,具体内容如下 需要实现的效果: ①点击“点击,弹出登录框”后模态框和遮挡层就会显示出来 ②点击关闭按钮,模态框和遮盖层就会隐藏起来 ③页面拖拽 功能分析: 首先给上面的"点击,弹出登录框"设置点击事件,点击之后就显示遮罩层和模态框,然后给模态框上面的关闭按钮设置点击事件,点击之后就隐藏遮罩层和模态框.然后是拖拽过程,这个过程的实现较为复杂,主要分为下面几步: 1.明确模态框的真正位置是鼠标的坐标减去鼠标在模态框内的坐标.

  • JS实现拖动模糊框特效

    本文实例为大家分享了JS实现拖动模糊框特效的具体代码,供大家参考,具体内容如下 需求: 在图片上拖动按钮,图片蒙层慢慢覆盖,当蒙层边缘碰到左右下角文字时,文字隐藏. 技术: 监听器,鼠标坐标获取 效果图 源码分享: HTML <h1>Image Comparison Slider</h1> <nav> <!--底层图--> <img src="img/img-original.jpg" alt=""> &l

  • JavaScript实现拖动模态框

    本文实例为大家分享了JavaScript实现拖动模态框的具体代码,供大家参考,具体内容如下 案例:模态框拖拽 弹出框,我们也称为模态框. 1.点击弹出层,会弹出模态框,并且显示灰色半透明的遮挡层.2.点击关闭按钮,可以关闭模态框,并且同时关闭灰色半透明遮挡层.3.鼠标放到模态框最上面一行,可以按住鼠标拖拽模态框在页面中移动.4.鼠标松开,可以停止拖动模态框移动. 案例分析 ①点击弹出层,模态框和遮挡层就会显示出来display:block;②点击关闭按钮,模态框和遮挡层就会隐藏起来display

  • Vue.js弹出模态框组件开发的示例代码

    前言 在开发项目的过程中,经常会需要开发一些弹出框效果,但原生的alert和confirm往往都无法满足项目的要求.这次在开发基于Vue.js的读书WebApp的时候总共有两处需要进行提示的地方,因为一开始就没有引入其他的组件库,现在只好自己写一个模态框组件了.目前只是一个仅满足当前项目需求的初始版本,因为这个项目比较简单,也就没有保留很多的扩展功能.这个组件还是有很多扩展空间的,可以增加更多的自定义内容和样式.这里只介绍如何去开发一个模态框组件,有需要进行更多扩展的,可以根据自己的需求自行开发

  • js实现简单模态框实例

    模态框在网页中很常见就是在当前页面中弹出一个框供与客户交互. 类似于这样. 首先我们要明白该框工作原理至于怎样与后端进行交互联系这边先不做介绍我们首先是单纯的了解怎样在网页中实现这样的一个框图的显现.值得注意的是框图产生时一般的我们滚动鼠标发现网页仍在移动.实现这样框图就是加了两个盒子 第一个盒子实现背景: 将整个页面覆盖(透明色) 第二个盒子实现交互框. 小编这边来实现一个最简单的交互框(代码量可能相对多了一点,主要是因为样式多了一点整体结构还是非常简单的) 代码如下: 模拟框最关键的一步就是

  • JS实现简单可拖动的模态框

    本文实例为大家分享了JS实现简单可拖动的模态框的具体代码,供大家参考,具体内容如下 这篇博文有 简单实现 和 带样式且稍微复杂一点 的两个版本 简单版本 效果图: 实现思路: 给可拖动部分添加点击事件,触发时计算鼠标在可拖动部分中的坐标( e.pageX - box.offsetLeft ),得到 x y . 给 document 添加鼠标移动事件,因为当鼠标拖动模态框的时候,是在整个DOM窗口内移动的.保持鼠标与模态框的相对位置不变,所以需要计算此时的模态框的位置(e.pageX - x ),

随机推荐