0

0

基于Layer+jQuery的自定义弹框

高洛峰

高洛峰

发布时间:2016-12-08 14:18:08

|

1559人浏览过

|

来源于php中文网

原创

目的:xxxx项目中,很多的弹窗是利用freemarker的网页标签追加的形式实现的,网页弹框只是将隐藏的div显示出来,这样会使网页在预加载时速度变慢,增加页面加载和响应时间

解决方法如下:

1.弹框页面部分的html代码和css抽离

html : html/configure/layer-win/_group-add-layer.html
css : css/common/componnentWin.css
子层html: _group-add-layer.html





group Add




  ····



 



   

父层html : group-manager.html

<#include "/html/config/configure.html"/>
<@menuConfig likey="stationGroup">
 
    
    
 
       
    
      
     
 
  ·····

   

通用弹窗 html :

添加分中心
名称
经度
纬度
描述

   

2.子父层都需要引入layer.js

3.子层js

/**
 * <分中心管理>
 * 添加分中心
 * Author  :  Yiyuery
 * Date   :  2016/10/19
 */
;(function($,w,document,undefined){
  $(document).ready(function(){
    validatorInit();
    clickEventBind();
  });
 
  var addGroupValidator = new Validator();
  var contextPath = "/ZJDZYW";
 
  /**
   * 表单验证初始化
   * @returns
   */
  function validatorInit(){
    addGroupValidator.init(function(obj, msg){
      layer.tips(msg,obj,{
         style: ['background-color:#78BA32; color:#fff', '#78BA32'],
         maxWidth:185,
         time: 2000,         
         tips: 1,
        });
    });
  }
  /**
   * 点击事件绑定
   * @returns
   */
  function clickEventBind(){
    addNewGroupClick();
  }
 
  /**
   * 分中心相关点击事件
   * @returns
   */
  function addNewGroupClick(){
    $("#addNewGroupSure").click(function(){
      addNewGroupSure();    
    });
    $("#addNewGroupCancle").click(function(){
      addNewGroupCancle();     
    });  
  }
 
  /**
   * 添加新的分中心 [确定]
   * @returns
   */
  function addNewGroupSure(){
    validatorInput();     
  }
  /**
   * 添加分中心 [取消]
   */
  function addNewGroupCancle(){   
    closeLayerWin(); 
  }
 
  /**
   * 关闭当前打开的layer弹窗
   */
  function closeLayerWin(){
    var index = parent.layer.getFrameIndex(window.name);
    parent.layer.close(index); //再执行关闭
  }
 
  /**
   * 表单提交输入验证
   */
  function validatorInput(){
    /**
     * 输入校验
     */
    if(!addGroupValidator.validate("addNewGroupWin")){
      return;
    }   
    var paras = {
        "group_name"  : $("#newGroupName").val(),
        "longitude"   : $("#newGroupLng").val(),
        "latitude"   : $("#newGroupLat").val(),
        "group_desc"  : $("#newGroupDesc").val(),
      };
    $.ajaxSettings.async = false ;
    $.getJSON(contextPath+"/stationGroup/add", paras, function(resp){        
      if(resp.code !=undefined && resp.code == 0){
        console.log("分中心列表刷新!");
      }
    });
    $.ajaxSettings.async = true ;
    closeLayerWin();
  }
})(jQuery,window,document);

   

4.父层js

基于dialogbox修改可自定义按钮及事件的弹出框插件
基于dialogbox修改可自定义按钮及事件的弹出框插件

基于dialogbox1.0修改可自定义按钮及事件的弹出框插件,每个按钮可绑定单独的触发事件,并且能支持将弹出框作为一个表单来填入数据并获取

下载
$("#addGroup").click(function(){       
  layer.config({
    path : '${contextPath}/js/lib/layer'
  });
  index = layer.open({
    type: 2,
     area: ['520px', '400px'],
     fix: false, //不固定
     title: '',
     maxmin: false,
     scrollbar:false,
     shade:0.5,
     shadeColse:true,
     content:capsule.request.path.groupMan.layer.groupManAddLayerShow,      
     end:function(){
       loadGroupCenterInfo();
     }
  });
 
});

   

loadGroupCenterInfo :父层js的方法,在关闭layer弹窗时调用父层方法刷新分中心列表

5.父层的layer弹窗此处是无法跳出父页面的所嵌套的iframe的,由于添加分中心的操作loadGroupCenterInfo,中嵌套着点击事件的重新激活clickEventInit该方法不是全局的,无法通过end传递到父页面中再次执行

/**
 * 加载分中心
 */
function loadGroupCenterInfo(){
  $.ajaxSettings.async = false ;
  $.getJSON(capsule.request.path.groupMan.getJson.loadCenterGroup,{},function(data){
    $("#groupCenterArea").empty();
    $.each(data.list,function(i,obj){
      groupMap.setKeyValue(obj.id,obj.group_name);
      var count = obj.c_num;
      if(obj.c_num == null || obj.c_num == "null"){
        count = 0;
      }
      var html = '
' + '基于Layer+jQuery的自定义弹框'+obj.group_name+"("+count+")"+'
  • '; $("#groupCenterArea").append(html); }); clickEventInit(); }); $.ajaxSettings.async = true ; }

       

    因此:当回调函数涉及当前层的函数互相调用时,是无法使用通用layer最外层弹框来实现的,只能在当前页面的js中重新模块化引入layer 
    [后来发现,其实是可以的,只需要将回调函数直接写在调用方法中即可,参见:javascript中的方法回调和父页面Iframe的方法调用]

    layer.config({
            path : '${contextPath}/js/lib/layer'
          });
          index = layer.open({
            type: 2,
             area: ['520px', '400px'],
             fix: false, //不固定
             title: '',
             maxmin: false,
             scrollbar:false,
             shade:0.5,
             shadeColse:true,
             content:capsule.request.path.groupMan.layer.groupManAddLayerShow,      
             end:function(){
               loadGroupCenterInfo();
             }
          });

       

    6.通用弹窗样式css

    @charset "utf-8";
    /*-------功能性按钮------*/
     
    body,html{
      width:100%;
      height:100%;
      margin:0px;
      padding:0px;
    }
    .capsule-btn {
      height: 40px;
      width: 50px;
      background-color: #5093e1;
      border: 0;
      border-radius: 2px;
      color: #fff;
      margin: 15px 0px 10px 15px;
      float: left;
    }
    /*----------------------------------------- 弹框按钮 -------------------------------------*/
    .capsule-win .btn-bottom{width: 100px; height: 40px; background-color: #4f94e0; font-size: 16px; border: none; color: #fff; -moz-border-radius: 3px; -khtml-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px;
        cursor: pointer; margin-right: 10px;margin-top: 10px;}
    .centerfix{margin-left: 30%;}
    .btn-cancel {background-color: #f5f5f5 !important; border: 1px #c2c2c2 solid !important;; color: #333 !important;}
    .btn-succ {background-color: #1abd9b;}
    .btn-warn {background-color: #ec962f;}
     
    /*------------弹窗---------------*/
    .capsule-win {
      width: 100%;
      min-height: 100%;
      -moz-border-radius: 5px;
      -khtml-border-radius: 5px;
      -webkit-border-radius: 5px;
      background-color: #fff;
      display: none;
      position: fixed;
    }
     
    .capsule-win-top {
      width: 100%;
      height: 50px;
      background-color: #4f94e0;
      line-height: 50px;
      color: #fff;
      font-size: 16px; 
    }
     
    .capsule-win-center {
      width: 100%;
      min-height: 250px;
      padding: 20px 0px 20px 0px;
      margin:0px 1px 0px 1px;
    }
     
    .capsule-win-bottom {
      width: 100%;
      height: 60px;
      background-color: #ececec;
      padding: 0px;
      position: fixed;
      bottom: 1px;
    }
     
    .capsule-win-center .capsule-item {
      height: 50px !important;
      width: 100%;
      margin: 0px 2px 0px 2px;
      padding: 0px;
    }
     
     
    .capsule-win-center .capsule-item .item-left {
      width: 100px;
      text-align: right;
      margin: 10px 0px 0px 0px;
      float:left;
    }
     
    .capsule-win-center .capsule-item .item-right {
      width: 400px;
      float:right;
    }
    .capsule-win-center .capsule-item .item-right input[type=text]{
      width:75%;
      height: 35px;
    }
     
    .capsule-win-center .capsule-item .item-right input[type=checkbox]{
      width:20px;
      marin:2px -5px 2px 0px;
      padding:10px;
    }
     
    .capsule-win-center .capsule-item .item-right textarea{
      width:75%;
      height:50px;
      margin-bottom: 10px;
      overflow-y:auto;
    } 
    .capsule-win-center .capsule-item .item-right select{
      width:90%;
    }
     
    .hide{
      display : none;
    }
    .show{
      display : block;
    }
     
    .capsule-win-center .capsule-item-table{
      width: 445px;
      height: 120px;
      margin: 5px 10px 0px 75px;
      overflow-y:auto; 
    }
     
    .capsule-win-center .capsule-item-table table{
      border-collapse:collapse;
      width:100%;
     
    }
    .capsule-win-center .capsule-item-table table,th, td{
      border: 1px solid #ccc;
    }
    .capsule-win-center .capsule-item-table th{
      height:30px;
      text-align: center;
    }
    .capsule-win-center .capsule-item-table td{
      text-align: center;
    }
    .capsule-win-center .capsule-item-table input[type=text] {
      width:100% !important;
    }
    .textCenter {
      text-align: center;
    }
     
    .capsule-win-top span {
      margin : 10px;
    }

       

    最终效果: 

    20161031140826605.jpg

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

    更多
    c语言中/相关合集
    c语言中/相关合集

    本专题整合了c语言中/的用法、含义解释。阅读专题下面的文章了解更多详细内容。

    0

    2026.02.03

    漫蛙漫画网页版入口与正版在线阅读 漫蛙MANWA官网访问专题
    漫蛙漫画网页版入口与正版在线阅读 漫蛙MANWA官网访问专题

    本专题围绕漫蛙漫画(Manwa / Manwa2)官网网页版入口进行整理,涵盖漫蛙漫画官方主页访问方式、网页版在线阅读入口、台版正版漫画浏览说明及基础使用指引,帮助用户快速进入漫蛙漫画官网,稳定在线阅读正版漫画内容,避免误入非官方页面。

    0

    2026.02.03

    Yandex官网入口与俄罗斯搜索引擎访问指南 Yandex中文登录与网页版入口
    Yandex官网入口与俄罗斯搜索引擎访问指南 Yandex中文登录与网页版入口

    本专题汇总了俄罗斯知名搜索引擎 Yandex 的官网入口、免登录访问地址、中文登录方法与网页版使用指南,帮助用户稳定访问 Yandex 官网,并提供一站式入口汇总。无论是登录入口还是在线搜索,用户都能快速获取最新稳定的访问链接与使用指南。

    3

    2026.02.03

    Java 设计模式与重构实践
    Java 设计模式与重构实践

    本专题专注讲解 Java 中常用的设计模式,包括单例模式、工厂模式、观察者模式、策略模式等,并结合代码重构实践,帮助学习者掌握 如何运用设计模式优化代码结构,提高代码的可读性、可维护性和扩展性。通过具体示例,展示设计模式如何解决实际开发中的复杂问题。

    2

    2026.02.03

    C# 并发与异步编程
    C# 并发与异步编程

    本专题系统讲解 C# 异步编程与并发控制,重点介绍 async 和 await 关键字、Task 类、线程池管理、并发数据结构、死锁与线程安全问题。通过多个实战项目,帮助学习者掌握 如何在 C# 中编写高效的异步代码,提升应用的并发性能与响应速度。

    0

    2026.02.03

    Python 强化学习与深度Q网络(DQN)
    Python 强化学习与深度Q网络(DQN)

    本专题深入讲解 Python 在强化学习(Reinforcement Learning)中的应用,重点介绍 深度Q网络(DQN) 及其实现方法,涵盖 Q-learning 算法、深度学习与神经网络的结合、环境模拟与奖励机制设计、探索与利用的平衡等。通过构建一个简单的游戏AI,帮助学习者掌握 如何使用 Python 训练智能体在动态环境中作出决策。

    2

    2026.02.03

    python end=
    python end=

    本专题整合了python中end=的相关内容,阅读专题下面的文章了解更多详细内容。

    0

    2026.02.03

    python运算符优先级
    python运算符优先级

    本专题整合了python运算符优先级排序、用法相关内容,阅读专题下面的文章了解更多详细内容。

    1

    2026.02.03

    python print用法与作用
    python print用法与作用

    本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

    1

    2026.02.03

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    jQuery 教程
    jQuery 教程

    共42课时 | 5.4万人学习

    HTML+CSS基础与实战
    HTML+CSS基础与实战

    共132课时 | 10.2万人学习

    tp6+adminlte搭建通用后台
    tp6+adminlte搭建通用后台

    共39课时 | 5.8万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号