当前位置: 首页 > news >正文

Javascript弹出层-初探

IFE2016 task 37

1 生成遮罩层


    function addMask(){
        var body = document.getElementsByTagName("body")[0];
        body.style.overflow = "hidden";
    
        var scrollH = document.documentElement.clientHeight;
        var oMask = document.createElement("div");
        oMask.style.cssText = "position:absolute;top:0;left:0;height:"+scrollH+"px;width:100%;background-color:#000;opacity:0.6;z-index:1000;";
        document.body.appendChild(oMask);
    
        var float = document.createElement("div");
        float.id = "float";
        float.style.cssText = "position:absolute;top:50%;left:50%;height:200px;width:400px;transform:translate(-50%,-50%);background-color:#ccc;z-index:1001;";
        document.body.appendChild(float);
    
        oMask.onclick = function(){
            document.body.removeChild(oMask);
            document.body.removeChild(float);
            body.style.overflow = "auto";
        }
        drag();
    }
新建 遮罩层  和 弹出层
oMask的宽度高度 给到当前屏幕可视区域的 宽高
float居中定位
position:absolute;
top:50%;
left:50%;
transform:translate(-50%,-50%);
body.style.overflow = "hidden";
body.style.overflow = "auto";

这两行代码
在遮罩层弹出时 禁止界面滑动

2.弹出层的移动

     function drag(){
            var float = document.getElementById("float");
        
            float.addEventListener("mousedown",function(event){
                startX = event.pageX - float.offsetLeft;
                startY= event.pageY - float.offsetTop;
                draging = true;
            },false);
        
            document.addEventListener("mousemove",function(event){
                var nowX= event.pageX;
                var nowY= event.pageY;
                var moveX = 0;
                var moveY = 0;
                if (draging === true) {
                    moveX = nowX- startX ;
                    moveY = nowY - startY;
                    //控制DIV不超出屏幕边界
                    var scrollW = document.documentElement.clientWidth;
                    var scrollH = document.documentElement.clientHeight;
                    var divW = float.offsetWidth;
                    var divH = float.offsetHeight;
                    var maxX = scrollW - divW/2;
                    var maxY = scrollH - divH/2;
        
                    moveX = Math.min( maxX , Math.max(divW/2,moveX) );
                    moveY = Math.min( maxY , Math.max(divH/2,moveY) );
        
                    float.style.left = moveX + "px";
                    float.style.top = moveY + "px";
                }
            },false);

通过startX startY nowX nowY
确定鼠标移动的距离 moveX moveY
mousemove属性设置在document 避免鼠标速度过快离开 弹出层
可以添加CSS 属性 corsor 来改变鼠标样式

点此查看详情

3.DIV大小的改变

#float{
    overflow: auto;
    resize: both;
}

定义和用法

resize 属性规定是否可由用户调整元素的尺寸。

注释:如果希望此属性生效,需要设置元素的 overflow 属性,值可以是 auto、hidden 或 scroll。

相关文章:

  • Java json工具类,jackson工具类,ObjectMapper工具类
  • PostgreSQL 最佳实践 - 任意时间点恢复源码分析
  • 第一次作业p7 1-1 1-2 1-6
  • 华为VRRP配置
  • 你掌握的技术排第几?
  • 解决mysql 1062 主从错误
  • LINKEDSERVER 与 ALIAS
  • while、dowhile、switchcase 循环嵌套、穷举、迭代
  • Git安装
  • 你真的了解UIScrollView吗?
  • Python中的split()函数的使用方法 详解
  • Percona TokuDB
  • IOS 打包所遇到的问题以及解决方案
  • APP测试总结2
  • iOS视频压缩存储至本地并上传至服务器-b
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Django 博客开发教程 16 - 统计文章阅读量
  • IDEA常用插件整理
  • IP路由与转发
  • Javascript设计模式学习之Observer(观察者)模式
  • js操作时间(持续更新)
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • SQLServer之创建数据库快照
  • VuePress 静态网站生成
  • vuex 学习笔记 01
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 基于遗传算法的优化问题求解
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 每天10道Java面试题,跟我走,offer有!
  • 如何设计一个微型分布式架构?
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 一天一个设计模式之JS实现——适配器模式
  • 怎样选择前端框架
  • ionic异常记录
  • kubernetes资源对象--ingress
  • mysql面试题分组并合并列
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​LeetCode解法汇总518. 零钱兑换 II
  • # 数论-逆元
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)Thymeleaf用法——Thymeleaf简介
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .libPaths()设置包加载目录
  • .Net FrameWork总结
  • .net web项目 调用webService
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)