简单JS实现弹出层效果

yvsm9个月前前端开发23240

简单JS实现弹出层效果

// 动态创建弹出层容器
function createLayerContainer() {
    // 检查容器是否已存在,避免重复创建
    if ($('#customLayer').length > 0) {
        return;
    }
    
    // 创建弹出层HTML结构
    var layerHtml = `
        <div id="customLayer" style="display:none;position:fixed;top:0;left:0;width:100%;height:100%;z-index:9999;">
            <!-- 遮罩层 -->
            <div class="layer-mask" style="position:absolute;top:0;left:0;width:100%;height:100%;background:#000;opacity:0.3;transition:opacity 0.3s;"></div>
            <!-- 弹窗主体 -->
            <div class="layer-dialog" style="position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;border-radius:6px;overflow:hidden;min-width:300px;max-width:90%;box-shadow:0 2px 12px rgba(0,0,0,0.1);transition:all 0.3s;">
                <!-- 标题栏 -->
                <div class="layer-title" style="padding:14px 16px;border-bottom:1px solid #eee;font-size:16px;color:#333;line-height:1;">
                    <span class="title-text"></span>
                    <span class="layer-close" style="float:right;cursor:pointer;color:#909399;font-size:18px;line-height:1;margin-top:-2px;">×</span>
                </div>
                <!-- 内容区 -->
                <div class="layer-content" style="padding:20px;"></div>
            </div>
        </div>
    `;
    
    // 将创建的结构添加到body中
    $('body').append(layerHtml);
}

// 封装弹出层方法
function layerOpen(options) {
    // 先创建容器(如果不存在)
    createLayerContainer();
    
    // 默认配置
    var defaults = {
        title: '信息',       // 标题
        content: '',         // 内容(支持HTML)
        area: 'auto',        // 尺寸,如['300px', '200px']或'auto'
        shadeClose: true     // 点击遮罩是否关闭
    };
    
    // 合并配置
    var opts = $.extend({}, defaults, options);
    
    // 填充内容
    $('#customLayer .title-text').text(opts.title);
    $('#customLayer .layer-content').html(opts.content);
    
    // 设置尺寸
    if (opts.area !== 'auto') {
        var width = opts.area[0] || 'auto';
        var height = opts.area[1] || 'auto';
        $('#customLayer .layer-dialog').css({
            width: width,
            height: height
        });
    } else {
        $('#customLayer .layer-dialog').css({
            width: 'auto',
            height: 'auto'
        });
    }
    
    // 显示弹出层
    $('#customLayer').show();
    
    // 关闭事件
    var closeLayer = function() {
        $('#customLayer').hide();
        // 解绑事件避免重复绑定
        $('#customLayer .layer-close').off('click');
        $('#customLayer .layer-mask').off('click');
    };
    
    // 关闭按钮事件
    $('#customLayer .layer-close').on('click', closeLayer);
    
    // 遮罩点击关闭
    if (opts.shadeClose) {
        $('#customLayer .layer-mask').on('click', closeLayer);
    }
    
    // ESC键关闭
    $(document).on('keyup.layer', function(e) {
        if (e.keyCode === 27) {
            closeLayer();
            $(document).off('keyup.layer');
        }
    });
    
    // 返回关闭方法
    return {
        close: closeLayer
    };
}


调用示例:

    $('#btn1').on('click', function() {
        layerOpen({
            title: '提示',
            content: '这是一个基础弹出层'
        });
    });


标签: jquery弹出层

相关文章

React 19 重大更新:Actions 与 Server Components 实战指南

React 19 重大更新:Actions 与 Server Components 实战指南 React 19 概述 React 19 是 React 框架的最新版本,带来了革命性的更新。Serve...

Tailwind CSS 常用Class样式速查指南

Tailwind CSS 常用Class样式速查指南

一、布局与尺寸控制类用于快速定义元素宽高、内外边距、定位、弹性布局等基础布局样式,是Tailwind最核心的使用场景之一。功能分类常用Class说明宽高控制w-20、h-16、w-1/2、h-full...

全面解析SEO核心标签:从基础配置到进阶优化指南

在搜索引擎优化(SEO)中,HTML标签是传递页面核心信息、引导搜索引擎抓取、提升页面权重与展示效果的关键载体。对于企业网站而言,合理配置SEO标签不仅能帮助搜索引擎快速理解网站内容,还能优化用户体验...

JS实现内容复制功能

要在JavaScript中实现内容复制功能,你可以使用document.execCommand()方法或Clipboard API。下面我将为您提供两种实现方法的示例代码,同时满足您的各种要求。方法一...

Tailwind CSS 全解析:从基础到实战,打造高效前端开发流程

Tailwind CSS 全解析:从基础到实战,打造高效前端开发流程

一、Tailwind CSS 的核心优势原子化工具类,提升开发效率Tailwind 内置了数千个预定义的 CSS 类,涵盖布局、间距、颜色、字体等几乎所有样式需求。例如,flex实现弹性布局、p-4设...

什么是自适应网格布局?深入理解CSS grid-template-columns 属性

一、什么是grid-template-columns?grid-template-columns 是CSS Grid布局中最核心的属性之一,用于定义网格容器的列数和每列的宽度。   &n...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。