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

    相关专题

    更多
    php源码安装教程大全
    php源码安装教程大全

    本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

    65

    2025.12.31

    php网站源码教程大全
    php网站源码教程大全

    本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

    43

    2025.12.31

    视频文件格式
    视频文件格式

    本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

    35

    2025.12.31

    不受国内限制的浏览器大全
    不受国内限制的浏览器大全

    想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

    41

    2025.12.31

    出现404解决方法大全
    出现404解决方法大全

    本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

    204

    2025.12.31

    html5怎么播放视频
    html5怎么播放视频

    想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

    9

    2025.12.31

    关闭win10系统自动更新教程大全
    关闭win10系统自动更新教程大全

    本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

    8

    2025.12.31

    阻止电脑自动安装软件教程
    阻止电脑自动安装软件教程

    本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

    3

    2025.12.31

    html5怎么使用
    html5怎么使用

    想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

    2

    2025.12.31

    热门下载

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

    精品课程

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

    共42课时 | 3.6万人学习

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

    共132课时 | 9.3万人学习

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

    共39课时 | 5.7万人学习

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

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