博客
关于我
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/

    你可能感兴趣的文章
    Openlayers实战:水电站管道站点信息管理示例
    查看>>
    Openlayers实战:测量长度,测量面积
    查看>>
    Openlayers实战:点击某点,overlay显示经纬度坐标
    查看>>
    Openlayers实战:界面控制综合演示
    查看>>
    Openlayers实战:移动鼠标至重叠几何图形上,获取多层所有features信息
    查看>>
    Openlayers实战:绘制图形,导出geojson文件
    查看>>
    Openlayers实战:绘制图形,导出KML文件
    查看>>
    Openlayers实战:绘制多边形,导出CSV文件
    查看>>
    Openlayers实战:绘制带箭头的线
    查看>>
    Openlayers实战:绘制点、线、圆、多边形
    查看>>
    Openlayers实战:绘制矩形,正方形,正六边形
    查看>>
    Openlayers实战:自定义放大缩小,显示zoom等级
    查看>>
    Openlayers实战:自定义版权属性信息
    查看>>
    Openlayers实战:输入WKT数据,输出GML、Polyline、GeoJSON格式数据
    查看>>
    Openlayers实战:选择feature,列表滑动,定位到相应的列表位置
    查看>>
    Openlayers实战:非4326,3857的投影
    查看>>
    Openlayers高级交互(1/20): 控制功能综合展示(版权、坐标显示、放缩、比例尺、测量等)
    查看>>
    Openlayers高级交互(10/20):绘制矩形,截取对应部分的地图并保存
    查看>>
    Openlayers高级交互(11/20):显示带箭头的线段轨迹,箭头居中
    查看>>