欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

#jquery 和 animate 封装一个带动画的弹框

程序员文章站 2022-05-31 13:26:17
...

jquery 和 animate 封装一个带动画的弹框

前言:前段时间在做一个ERP系统的时候,看到ui图,和需求,发现页面中有好多个弹层,刚开始的时候是用最简单的,设置一个灰色层,相对于窗口进行定位,然后弹框设置display为none来隐藏,block来显示。作为一个有追求的前端开发人员,显然这是不符合我的追求,所以在晚上空余的时间的时候,研究了下animate的动画,并且配合jquery来封装一个带动画的弹框。引入jquery和animate.css

设计思想:一般情况下我们点出一个弹出层,然后关闭它时,可以用过点击’X’或者点击取消或者点击弹出框外面的页面,传入进入和出去时所需的动画。

代码下载地址:https://github.com/Hugo-Jiang/jquery-animate 如果感觉可以给个赞哦!

#jquery 和 animate 封装一个带动画的弹框

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>利用jauery+animate封装一个常用的弹层<</title>
    <link rel="stylesheet" href="animate.css">
    <style>
        /*灰色层相对于body行进定位,并设置它的层级为998,灰色层刚开始时,隐藏*/
        #mask {
            background-color: #000;
            opacity: .5;
            position: absolute;
            left: 0;
            top: 0;
            z-index: 998;
            display: none;
        }
        /*弹出框刚开始隐藏,相对于窗口进行定位,但是它的层级一定要比灰色层的层级高*/
        #popup {
            position: fixed;
            width: 300px;
            height: 330px;
            z-index: 999;
            background-color: #fff6e2;
            border-radius: 15px;
            box-shadow: 0 5px 6px #ccc;
            display: none;
        }
    </style>
    <script src="jquery-3.2.1.min.js"></script>
    <script>
        $(function () {

//            设计思想: 一般情况下我们点出一个弹出层,然后关闭它时,可以用过点击'X'或者点击取消或者点击弹出框外面的页面
            function showPopup(id,className,inter,outer) {
                var mask = $('#mask');
                var popup = $('#'+id);
                var bWidth = $(document.body).outerWidth(true);//获取body的宽度,传递参数true,包括外边距,则宽度=padding+border+margin
                var bHeight = $(document.body).outerHeight(true);//跟上面相似
                var cHeight = $(window).height(); //获取浏览器的可视区高度
                var pWidth = popup.width(); // 弹出款的宽度
                var pHeight = popup.height(); //弹出框的高度
                var left = (bWidth-pWidth)/2; //计算相对于窗口定位的时,left值
                var top = (cHeight-pHeight)/2; //------------------,top---
//                设置灰色层的,高度和宽度必须等于body的宽度,不然在鼠标滚动的时候,会出现非灰色层
                //console.log(222);
                popup.removeClass(inter);
                popup.removeClass(outer);
                mask.css({
                    'display': 'block',
                    'width': bWidth + 'px',
                    'height': bHeight + 'px'
                });
                popup.css({
                    'display': 'block',
                    'top': top + 'px',
                    'left': left + 'px'
                }).addClass(inter);//进入时的动画
                //console.log(popup.removeClass(outer));
                $('.' + className).unbind('click').click(function () {
                    closePopup()

                });
                mask.unbind('click').click(function () {
                    closePopup();
                });
                function closePopup() {
                    mask.hide();
                    popup.addClass(outer);
                    setTimeout(function () {
                        popup.hide();
                    },500)
                }

            }
            $('#btnLogin').unbind('click').click(function () {
                showPopup('popup', 'btn1','rotateInDownLeft','rotateOutDownLeft');
                return false;
            });
        })
    </script>
</head>
<body>
<div id="mask"></div>
<div style="width: 1000px;height: 900px;">
    <button id="btnLogin">btnLogin</button>
</div>
<div id="popup" class="animated">
    <button class="btn1">关闭</button>
</div>
</body>
</html>