js实现模态弹窗

一.实现弹窗原理:

弹窗的实现:

(1)先写出一个div,弹出窗的样式,然后使用display样式进行隐藏;

(2)当点击登录时,弹出窗口,这时display样式变为block

(3)遮罩层的实现,使用一个div,让它占据整个屏幕,刚开始时隐藏,当点击登录时,遮罩层的display样式变为block,只是设计时,让遮罩层的z-index的值,小于弹窗的Z-index值,确保弹窗在屏幕的最上层。

(4)弹窗位置的实现中,还使用了document.documentElement.clientHeight,document.documentElement.clientWidth,来实现随着屏幕大小的变化,使弹框始终位于屏幕的中间位置。

二.具体实现:

html代码如下:

<header>
    <img src="../img/logoo.png" alt="图标">
    <ul id="menu">
        <li id="menuli"><a href="#">庄园介绍</a>
        </li>
        <li id="menuli2"><a href="#">图片集</a>
        </li>
        <li><a href="#">相关介绍</a>
        </li>
    </ul>
    <div class="login"><a href="#">登录</a>
    </div>
</header>
<div id="article">
        <h3>欢迎来到薰衣草庄园</h3>
 
        <h5>放松自己,享受心情</h5>
 
</div>
//弹窗的部分html设计
<div id="login">
     <h2><img src="../img/login_wrong.png" class="close">登录弹窗</h2> 
    <form action="">
        <div class="form-group">
            <label for="user">用户名</label>
            <input type="text" id="user" name="user" class="form-control" placeholder=" 请输入用户名">
        </div>
        <div class="form-group">
            <label for="pwd">密 码</label>
            <input type="password" id="pwd" name="pwd" placeholder=" 请输入密码" class="form-control">
        </div>
        <button class="btn">登 录</button>    
        <div id="other">    <a href="#">忘记密码</a>|<a href="#">注册用户</a> 
        </div>
    </form>
</div>
//遮罩层的div
<div id="dropback"></div>

css代码:

* {
    margin: 0;
    padding: 0;
}
body {
    background: url("../img/login_bg.png");
}
//遮罩层的css实现
#dropback {
    position: absolute;
    top:0;
    left:0;
    right:0;
    bottom: 0;
    background: #444;
    z-index: 1000;
    opacity: 0.9;
    display: none;
}
//弹窗的css实现
#login {
    width: 300px;
    height: 250px;
    position: absolute;
    border:1px solid #E5E5E5;
    display: none;
    z-index: 100;
    color:#666;
    border-radius: 4px;
    z-index: 1020;
    background: #fff;
}
//弹窗上关闭X号按钮的实现
.close {
    position: relative;
    float:right;
    top:3px;
    right:5px;
    padding:5px;
    cursor: pointer;
}
//表单的css实现
.form-group {
    margin-bottom: 10px;
    margin-left: 5px;
}
label {
    display: inline-block;
    width: 20%;
}
.form-control {
    width: 70%;
    height: 20px;
    padding: 6px 0;
    font-size: 14px;
    line-height: 1.42857143;
    letter-spacing: 2px;
    color: #555;
    background-color: #fff;
    border: 1px solid #ccc;
    border-radius: 4px;
    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
    transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
}
.form-control:focus {
    border-color: #66afe9;
    outline: 0;
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, .075), 0 0 8px #F9F8FE;
}
.btn {
    display: inline-block;
    width: 40%;
    margin-left: 30%;
    margin-top: 10px;
    padding: 6px 12px;
    margin-bottom: 0;
    font-size: 14px;
    font-weight: normal;
    line-height: 1.42857143;
    text-align: center;
    white-space: nowrap;
    vertical-align: middle;
    cursor: pointer;
    color: #fff;
    background-color: #5cb85c;
    border-color: #4cae4c;
    border: 1px solid transparent;
    border-radius: 5px;
}
.btn:focus {
    color: #fff;
    background-color: #449d44;
    border-color: #398439;
    text-decoration: none;
}
#other {
    float:right;
    margin-top:20px;
}
#other a {
    color:#888;
    text-decoration: none;
}
#other a:hover {
    color:red;
    text-decoration: none;
}
//整体的其他css样式实现
header {
    width: 100%;
    height:50px;
    background: #FFFEFE;
    border:1px solid #E5E5E5;
}
img {
    display: block;
    float:left;
    /*border-radius: 4px; */
}
ul {
    list-style-type: none;
    margin-left:150px;
    text-align: center;
}
ul>li {
    float:left;
}
ul>li>a {
    display: block;
    text-decoration: none;
    padding:5px 30px;
    color:#666;
    letter-spacing: 2px;
    line-height: 40px;
}
ul>li>a:hover {
    color:#000;
    background: #f1f1f1;
}
.login {
    float: right;
    margin-right: 30px;
    padding: 15px 0;
    letter-spacing: 2px;
    cursor: pointer;
}
.login>a {
    text-decoration:none;
    color: #666;
    display: block;
}
.login>a:hover {
    transform: scale(1.5);
    background: #f1f1f1;
    color:#000;
}

#article {
    width: 400px;
    margin-left: 20px;
}
h3 {
    color:white;
    letter-spacing: 3px;
    margin:12px;
    text-align: center;
    font-size: 32px;
}
h5 {
    color:white;
    letter-spacing: 3px;
    margin:12px;
    text-align: left;
    font-size: 26px;
    text-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
}
h2 {
    width: 100%;
    height: 30px;
    border-bottom: 1px solid #e5e5e5;
    text-align: center;
    margin-bottom: 25px;
    letter-spacing: 2px;
    color:#666;
    background-color: #f1f1f1;
    opacity: 0.8;
}

js代码如下:

window.onload = function () {
 
    var close = document.getElementsByClassName(‘close‘);
    var login = document.getElementById(‘login‘);
    var logins = document.getElementsByClassName(‘login‘);
    var screen = document.getElementById(‘dropback‘);
    var bodyobj = document.body;
 
    function show(obj) {
        //获取浏览器的宽和高
        var top = (document.documentElement.clientHeight - 250) / 2 - 150;
        var left = (document.documentElement.clientWidth - 300) / 2;
        //当点击登录按钮时,登录弹窗出现,遮罩层显示
        screen.style.display = ‘block‘; //遮罩层显示
        obj.style.display = ‘block‘; //登录弹窗出现
        obj.style.left = left + ‘px‘; //登录弹窗在屏幕中的位置
        obj.style.top = top + ‘px‘;
 
    }
 
    function hide(obj) {
        //点击差号时,登录弹窗消失,遮罩层消失
        obj.style.display = ‘none‘;
        screen.style.display = ‘none‘;
    }
 
    close[0].addEventListener("click", function () {
        hide(login)
    }, false);
    logins[0].addEventListener("click", function () {
        show(login)
    }, false);
 
}

三.效果图展示

初始页面

点击页面登录:弹出窗口页面如下:

四.总结

弹窗的是实现其实很简单,就是用display属性就可以解决,遮罩层也是控制其css属性,就可以实现。还有一点没有实现,就是弹窗会随着鼠标进行移动,这个在后续的学习中继续完成。

时间: 2024-10-12 21:46:54

js实现模态弹窗的相关文章

bootstrap的模态弹窗 和CKEditor的模态弹窗冲突问题解决

bootstrap的模态弹窗 和CKEditor的模态弹窗,使用时.会造成编辑器的弹出框中的文本框不能编辑. 解决办法: 在页面中添加一段代码即可: $.fn.modal.Constructor.prototype.enforceFocus = function () { modal_this = this $(document).on('focusin.modal', function (e) { if (modal_this.$element[0] !== e.target && !m

JS模拟土豆弹窗——链式运动

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>JS模拟土豆弹窗——链式运动</title> <style> *{padding: 0; margin: 0;} body{ font-size: 12px; font-family: "微软雅黑"; overflow: hidden;} #foot{ width:

项目期复习:JS操作符,弹窗与调试,注释,数据类型转换

1.JS操作符 ① 除法运算后,是有小数存在的,跟C语言不同之处 var num = 67/4;         ----------> 输出:16.75 console.log(num); ② 通常情况下,操作符与数值/变量之间需要有空格隔开 1) 赋值操作符  = 2) 算数操作符  + .- .*. / .% , 除法是可以有小数存在的 ③  取余 最后结果正负与被除数有关 与除无关  如: (-7)%3 = -1         7%3=1    (-7)%(-3)=-1    7%(-

Ouibounce – 在用户离开你网站时显示模态弹窗

Ouibounce 是一个微小的库,用于实现在用户离开你的网站的时候显示一个模式窗口.这个库可以帮助你增加着陆页的转换率. Ouibounce 会在当鼠标光标移动到接近(或通过)视口(viewport)的顶部的时候触发. 默认情况下, Ouibounce 只会为每个访问者触发一次.当 Ouibounce 触发后,将会创建一个 Cookie,以确保非侵扰性的使用体验.这个库可以帮助你实现在访客离开你网站的时候提供一些有价值的内容. 您可能感兴趣的相关文章 太赞了!超炫的页面切换动画效果[附源码下载

cocos2dx --- 关于模态弹窗中按钮响应的问题

<span style="font-size:14px;">在自定义的模态弹窗中,因为注册了: </span> <span style="font-size:14px;">void WWDialog::registerWithTouchDispatcher(){ cocos2d::CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegat

JS中模态窗口(showModalDialog)的详细使用

基本介绍: showModalDialog() (IE 4+ 支持) showModelessDialog() (IE 5+ 支持) window.showModalDialog() 方法用来创建一个显示HTML内容的模态对话框. window.showModelessDialog() 方法用来创建一个显示HTML内容的非模态对话框.使用方法:          vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatur

使用异步js解决模态窗口切换的办法

核心代码 js ="setTimeout(function(){document.getElementsByTagName('Button')[3].click()},100);" 下面是我的实验过的示例代码: 实验地址: http://pyselenium-d1826.coding.io/exapage.html 1 #-*- coding: utf-8 -*- 2 __author__ = 'ray' 3 from selenium import webdriver 4 impor

关于Bootstrap之JS插件模态框的重要注意事项

用modal.js插件的模态框时,根据参考文档写下了如下代码: $('#myModal').modal('toggle').on('shown.bs.modal', function (e) { //TODO something }); 运行结果: chrome正常! IE8+(低版本没试)不响应事件,竟然不响应事件! >>排查步骤: 翻看文档,看有没有介绍此处存在兼容问题,结果没有: 既然不存在兼容问题,就是代码的编写问题了,问题变得好办了,顺序翻转: $('#myModal').on('s

抄袭几个好看的模态弹窗(可用为弹窗登录)

先写上一段js代码: 1 var overlay = document.querySelector( '.md-overlay' ); 2 3 [].slice.call( document.querySelectorAll( '.md-trigger' ) ).forEach( function( el, i ) { 4 5 var modal = document.querySelector( '#' + el.getAttribute( 'data-modal' ) ), 6 close