文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

js如何实现模态框的拖拽效果

2023-07-02 15:11

关注

今天小编给大家分享一下js如何实现模态框的拖拽效果的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

分析思路:

点击弹出层,模态框和遮挡层就会显示出来。display:block
2.点击关闭按钮,模态框和遮挡层就会隐藏。display:none

js如何实现模态框的拖拽效果

在页面中拖拽的步骤:鼠标按下并移动,之后松开鼠标
4.触发事件是鼠标按下mousedown,鼠标移动是mousemove,鼠标松开:mouseup
5.拖拽过程:鼠标移动过程中,获得最新的值赋值给模态框的left和top值,这样模态框就可以跟着鼠标走了
6.鼠标按下触发的时间源是最上面一行,也就是说,鼠标只有放在最上面一行,才能触发该事件。放在其他区域不会触发该事件。
7.鼠标的坐标减去鼠标在盒子内的坐标,才是模态框真正的位置。(因为模态框是可移动的,只有第一次才能拿到模态框的left和top,其他时候并不能直接拿到。所以采用‘鼠标的坐标 - 鼠标在模态框内的坐标’来计算模态框的位置)

js如何实现模态框的拖拽效果

鼠标按下,我们要得到鼠标在盒子内的坐标
9.鼠标移动,就让模态框的坐标设置为:鼠标坐标 - 盒子坐标即可。注意移送事件要写到按下事件里面
10.鼠标松开,就停止拖拽,可以让鼠标移动事件解除

js如何实现模态框的拖拽效果

代码实现:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>模态框拖拽</title>    <style>        * {            margin: 0;            padding: 0;        }        #link {            color: #000;            text-decoration: none;            border: 1px solid #000;        }        .login {            width: 300px;            height: 200px;            background-color: antiquewhite;            position: absolute;            top: 50%;            left: 50%;            transform: translate(-50%, -50%);            z-index: 2;            display: none;        }        .login-title {            text-align: center;            width: 100%;            height: 40px;            line-height: 40px;            background-color: aqua;            cursor: move;        }        .login-title span {            display: block;            height: 30px;            width: 30px;            background-color: antiquewhite;            line-height: 30px;            border-radius: 50%;            position: absolute;            top: -10px;            right: -10px;            font-size: 12px;        }        .login-title span a {            text-decoration: none;            color: #000;        }        .login-input-content {            margin: 15px 20px 0;            line-height: 30px;        }        .login-button {            width: 200px;            height: 20px;            margin: 10px auto;            border: 1px solid rgb(77, 73, 73);            text-align: center;        }        .login-button a {            text-decoration: none;            color: #000;            font-size: 14px;        }        #bg {            display: none;            background-color: #000;            width: 100%;            height: 100%;            opacity: 0.3;            z-index: -1;            position: absolute;            top: 0;            left: 0;        }    </style></head><body>    <div class="login-header"><a href="javascript:;" rel="external nofollow"  id="link">点击,弹出登录框</a></div>    <div class="login" id="login">        <div class="login-title">登录会员            <span><a id="colseBth" href="javascript:void(0);" rel="external nofollow"  rel="external nofollow"  class="close-login">关闭</a></span>        </div>        <div class="login-input-content">            <div class="login-input">                <label for="">用&nbsp; 户&nbsp;名:</label>                <input type="text" placeholder="请输入用户名" name="info[sername]" id="username" class="username">            </div>            <div class="login-inpit">                <label for="">登录密码:</label>                <input type="password" placeholder="请输入登录密码" name="info[password]" id="password">            </div>        </div>        <div class="login-button" id="loginBtn"><a href="javascript:void(0);" rel="external nofollow"  rel="external nofollow"  id="login-button-submit">会员登录</a></div>    </div>    <!-- 遮罩层 -->    <div class="login-bg" id="bg"></div></body><script>    // 1.点击,弹出模态框和遮罩层    // 3.点击关闭模态框和遮罩层自动隐藏    // 4.页面拖拽原理:鼠标按下且移动,之后松开鼠标    // 5.拖拽过程:鼠标移动的时候获得新的值赋值给模态框的left和top值。        //1.获取DOM元素    var oLink = document.querySelector('#link');    var oLogin = document.querySelector('.login');    var oBg = document.querySelector('#bg');    var oClose = oLogin.querySelector('#colseBth');    var title = oLogin.querySelector('.login-title');    //2.点击弹出层这个链接link,让mask和login显示出来    oLink.addEventListener('click', function () {        oLogin.style.display = 'block';        oBg.style.display = 'block';    })    //3.点击closeBtn就隐藏mask和login    oClose.addEventListener('click', function () {        oLogin.style.display = 'none';        oBg.style.display = 'none';    })    //4.开始拖拽    //(1)当我们鼠标按下,就获得鼠标在盒子内的坐标    title.addEventListener('mousedown', function (e) {        var x = e.pageX - oLogin.offsetLeft;        var y = e.pageY - oLogin.offsetTop;        console.log(x, y)                //(2)鼠标移动的时候,把鼠标在页面中的坐标 减去 鼠标在盒子内的坐标就是模态框的left和top值        document.addEventListener('mousemove', move)             function move(e) {                oLogin.style.left = e.pageX - x + 'px';                oLogin.style.top = e.pageY - y + 'px';            }                        //(3)鼠标弹起,就让鼠标移动事件移除            document.addEventListener('mouseup', function () {                document.removeEventListener('mousemove', move);                            })        })    </script></html>

以上就是“js如何实现模态框的拖拽效果”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯