博客
关于我
js实现模态框拖拽
阅读量:126 次
发布时间:2019-02-27

本文共 1961 字,大约阅读时间需要 6 分钟。

效果展示和需求分析

效果展示展示了一个完整的登录模态框界面,其中包括登录表单、背景遮罩和关闭按钮。模态框支持以下功能:

  • 点击登录按钮后,登录表单和遮罩层会同时显示
  • 点击关闭按钮后,表单和遮罩层会隐藏
  • 密码输入时支持明文查看或隐藏
  • 表单标题可以通过拖拽移动
  • 鼠标弹起后拖拽结束
  • 需求分析系统需求如下:

  • 登录后显示登录表单和遮罩层
  • 支持明文和隐藏密码显示切换
  • 允许用户拖拽表单标题区域
  • 拖拽结束后自动调整表单位置
  • 代码分析HTML代码

    账号登录

    关闭

    JS代码

    var eyeState = document.querySelector('#eye-state');var pswInput = document.querySelector('#psw');var login = document.querySelector('.login');var loginBg = document.querySelector('#bg');var loginForm = document.querySelector('form');var closeBtn = document.querySelector('.close-btn');var eyeFlag = 0;eyeState.onclick = setEye;login.onclick = goLogin;closeBtn.onclick = leaveLogin;loginForm.children[0].addEventListener('mousedown', dragForm);loginForm.onselectstart = function(e) {    e.preventDefault();};function setEye() {    if (!eyeFlag) {        eyeState.className = 'open';        pswInput.type = 'text';        eyeFlag = 1;    } else {        eyeState.className = 'close';        pswInput.type = 'password';        eyeFlag = 0;    }}function goLogin() {    loginBg.style.visibility = 'visible';    loginForm.style.display = 'block';    login.style.display = 'none';}function leaveLogin() {    loginBg.style.visibility = 'hidden';    loginForm.style.display = 'none';    login.style.display = 'block';}function dragForm(e) {    var x = e.pageX - this.parentNode.offsetLeft;    var y = e.pageY - this.parentNode.offsetTop;    document.addEventListener('mousemove', move);    this.addEventListener('mouseup', function() {        document.removeEventListener('mousemove', move);    });    function move(event) {        loginForm.style.left = event.pageX - x + 'px';        loginForm.style.top = event.pageY - y + 'px';    }}

    分析

  • 密码输入框通过 eyeFlag 变量控制 type 属性和小眼睛图标状态
  • 拖拽效果通过 mousemove 事件绑定给 document 实现
  • mouseup 事件绑定给标题元素确保拖拽结束时移除事件
  • 表单标题区域通过 mousedown 事件实现拖拽效果
  • 密度跟随鼠标实现基于鼠标位置的动态调整
  • 转载地址:http://neqf.baihongyu.com/

    你可能感兴趣的文章
    PHP-希尔排序
    查看>>
    PHP-快速排序的2种实现方法
    查看>>
    Redis使用lua脚本
    查看>>
    php-数据结构-二叉树的构建、前序遍历,中序遍历,后序遍历,查找,打印
    查看>>
    php-有序数组合并后仍有序
    查看>>
    redis使用
    查看>>
    Redis以及Redis的php扩展安装
    查看>>
    PHP-算法-最少比较次数获取最大值最小值
    查看>>
    php-约瑟夫问题
    查看>>
    Redis从库不能同步报Can’t save in background: fork: Cannot allocate memory错误
    查看>>
    Redis从入门到精通|干货篇
    查看>>
    php.ini maxfileuploads,细说PHP高洛峰文件上传类源文件
    查看>>
    php.ini中常见的配置信息选项
    查看>>
    php.ini配置中有10处设置不当,会使网站存在安全问题
    查看>>
    php/jsp/asp的区别
    查看>>
    php20个主流框架
    查看>>
    php301到https,虚拟主机设置自动301跳转到HTTPS
    查看>>
    php5 apache 配置
    查看>>
    php5 升级 php7 版本遇到的问题处理方法总结
    查看>>
    PHP5.3.3安装Mcrypt扩展
    查看>>