Bootstrap实现dialog上一步下一步多个弹窗交互

打印 上一主题 下一主题

主题 653|帖子 653|积分 1959

Bootstrap实现dialog上一步下一步多个弹窗交互

   版本先容:
  

  • Bootstrap v3.3.7
  • jQuery v3.5.1
  一、功能先容


  • 重新设置bootstrap主题色
  • 内容区以card形式展示,纯js实现分页功能
  • 共两步骤,第一步选择模板,第二步举行其他操作
  • 步骤一内的按钮点击下一步,进入第二步;第二步点击上一步,返回第一步
  • 步骤一选择模板时,根据模板id获取模板内容,并展示在第二步中
  • 关闭弹窗时重置数据,当从第二步点击上一步回到第二步时,不重置数据
二、效果图


三、代码


  • index.html
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.   <meta charset="UTF-8">
  5.   <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.   <title>Document</title>
  7.   <link rel="stylesheet" href="./css/bootstrap3.3.7.css">
  8.   <link rel="stylesheet" href="./css/theme.css">
  9.   <link rel="stylesheet" href="./css/index.css">
  10.   <script src="./js/jquery3.5.1.js"></script>
  11.   <script src="./js/bootstrap3.3.7.js"></script>
  12. </head>
  13. <body>
  14.   <!-- Button trigger modal -->
  15.   <button type="button" class="btn btn-primary btn-lg openModule">
  16.     在线生成
  17.   </button>
  18.   <!-- 选择模板 -->
  19.   <div class="modal fade in" id="module" tabindex="-1" role="dialog" aria-labelledby="moduleLabel">
  20.     <div class="modal-dialog" role="document">
  21.       <div class="modal-content">
  22.         <div class="modal-header">
  23.           <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
  24.               aria-hidden="true">&times;</span></button>
  25.           <h4 class="modal-title" id="moduleLabel">生成广告</h4>
  26.         </div>
  27.         <div class="modal-body">
  28.           <!-- 模板列表 -->
  29.           <div class="module-list"></div>
  30.           <!-- 分页 -->
  31.           <nav aria-label="Page navigation" class="pagination-box">
  32.             <ul class="pagination"></ul>
  33.           </nav>
  34.         </div>
  35.         <div class="modal-footer">
  36.           <button type="button" class="btn btn-primary next">下一步</button>
  37.         </div>
  38.       </div>
  39.     </div>
  40.   </div>
  41.   <!-- 生成广告 -->
  42.   <div class="modal fade in" id="advertising" tabindex="-1" role="dialog" aria-labelledby="advertisingLabel">
  43.     <div class="modal-dialog" role="document">
  44.       <div class="modal-content">
  45.         <div class="modal-header">
  46.           <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
  47.               aria-hidden="true">&times;</span></button>
  48.           <h4 class="modal-title" id="advertisingLabel">生成广告</h4>
  49.         </div>
  50.         <div class="modal-body">
  51.           选择模板
  52.         </div>
  53.         <div class="modal-footer">
  54.           <button type="button" class="btn btn-default last">上一步</button>
  55.           <button type="button" class="btn btn-success">生成*.gif</button>
  56.           <button type="button" class="btn btn-primary">生成*.jpg</button>
  57.         </div>
  58.       </div>
  59.     </div>
  60.   </div>
  61.   <script src="./js/index.js"></script>
  62. </body>
  63. </html>
复制代码

  • index.js
  1. // TODO
  2. const info = {
  3.   company_name: "测试服务有限公司",
  4.   contact_name: "耿先生",
  5.   contact_phone: "1513006500 195**1155",
  6.   ad_words: "这里是广告语,我们要努力",
  7. };
  8. /**
  9. * @function 获取模板列表数据
  10. * @variable listParams 请求列表分页参数
  11. * @variable total 总条数
  12. * @variable maxPage 最大分页数
  13. */
  14. let listParams = {
  15.   pageSize: 10,
  16.   pageNumber: 1,
  17. };
  18. let total = 0;
  19. let maxPage = 0;
  20. function getList() {
  21.   $.ajax({
  22.     type: "POST",
  23.     url: "http://10.10.25.110:8000/v/vip_temp_list/",
  24.     data: listParams,
  25.   }).done(function (res) {
  26.     if (res.code === 200) {
  27.       console.log(res.result);
  28.       total = res.result.total;
  29.       renderModuleList(res.result.items);
  30.       renderPagination();
  31.       renderActivePagination();
  32.     }
  33.   });
  34. }
  35. /**
  36. * @function 渲染模板列表
  37. */
  38. function renderModuleList(data) {
  39.   // 渲染前先清空
  40.   $(".module-list").empty();
  41.   let ctx = "";
  42.   data.map((item) => {
  43.     ctx +=
  44.       '<div class="module-item" data-kid=' +
  45.       item.id +
  46.       "><div>模板名称:" +
  47.       item.temp_title +
  48.       "</div><div>尺寸:" +
  49.       item.width +
  50.       "x" +
  51.       item.height +
  52.       '</div><div class="module-image"><img src="' +
  53.       item.img_url +
  54.       '" class="img-responsive" alt="' +
  55.       item.temp_title +
  56.       '"></div></div>';
  57.   });
  58.   $(".module-list").append($(ctx));
  59. }
  60. /**
  61. * @function 选择模板
  62. */
  63. $(".module-list").on("click", ".module-item", function () {
  64.   const kid = $(this).data("kid");
  65.   $(this)
  66.     .addClass("module-item-active")
  67.     .siblings()
  68.     .removeClass("module-item-active");
  69.   console.log(kid);
  70. });
  71. /**
  72. * @function 渲染分页
  73. */
  74. function renderPagination() {
  75.   // 渲染前先清空
  76.   $(".pagination").empty();
  77.   maxPage = Math.ceil(total / 10);
  78.   // 1. 上一页
  79.   let page = `<li data-prop="prev">
  80.         <a href="#" aria-label="Previous">
  81.           <span aria-hidden="true">&laquo;</span>
  82.         </a>
  83.       </li>`;
  84.   // 2. 页码
  85.   for (let i = 1; i <= maxPage; i++) {
  86.     page += '<li><a href="#" data-prop="' + i + '">' + i + "</a></li>";
  87.   }
  88.   // 3. 下一页
  89.   page += `<li data-prop="next">
  90.             <a href="#" aria-label="Next">
  91.               <span aria-hidden="true">&raquo;</span>
  92.             </a>
  93.           </li>`;
  94.   $(".pagination").append($(page));
  95. }
  96. /**
  97. * @function 渲染高亮分页
  98. */
  99. function renderActivePagination() {
  100.   $($(".pagination li")[listParams.pageNumber])
  101.     .addClass("active")
  102.     .siblings()
  103.     .removeClass("active");
  104. }
  105. /**
  106. * @function 点击分页
  107. */
  108. $(".pagination").on("click", "li", function () {
  109.   const prop = $(this).data("prop");
  110.   if (prop === "prev") {
  111.     // 上一页
  112.     if (listParams.pageNumber > 1) {
  113.       listParams.pageNumber--;
  114.     }
  115.   } else if (prop === "next") {
  116.     // 下一页
  117.     if (listParams.pageNumber < maxPage) {
  118.       listParams.pageNumber++;
  119.     }
  120.   } else {
  121.     // 页码
  122.     const page = $(this).text();
  123.     listParams.pageNumber = page * 1;
  124.   }
  125.   getList();
  126. });
  127. /**
  128. * @function 重置数据
  129. */
  130. function reset() {
  131.   $(".module-list").empty();
  132.   $(".pagination").empty();
  133.   listParams = {
  134.     pageSize: 10,
  135.     pageNumber: 1,
  136.   };
  137.   total = 0;
  138.   maxPage = 0;
  139. }
  140. /**
  141. * @function 点击在线生成按钮
  142. */
  143. $(".openModule").on("click", function () {
  144.   $("#module").on("show.bs.modal", function () {
  145.     if ($("#advertising").css("display") === "block") {
  146.       return;
  147.     }
  148.     getList();
  149.   });
  150.   $("#module").modal("show");
  151. });
  152. /**
  153. * @function 点击下一步
  154. */
  155. $(".next").click(function () {
  156.   $("#module").modal("hide");
  157.   // 关闭重置数据
  158.   $("#module").on("hidden.bs.modal", function () {
  159.     // 如果是第二步回到第一步,不重置数据
  160.     if ($("#advertising").css("display") === "block") {
  161.       return;
  162.     }
  163.     reset();
  164.   });
  165.   $("#advertising").modal("show");
  166. });
  167. /**
  168. * @function 点击上一步
  169. */
  170. $(".last").click(function () {
  171.   $("#advertising").modal("hide");
  172.   // 关闭生成广告弹窗
  173.   $("#advertising").on("hidden.bs.modal", function () {
  174.     // 如果是第二步回到第一步,不重置数据
  175.     if ($("#module").css("display") === "block") {
  176.       return;
  177.     }
  178.     reset();
  179.   });
  180.   $("#module").modal("show");
  181. });
复制代码

  • index.css
  1. .modal{
  2.   overflow-x: hidden;
  3.   overflow-y: auto;
  4. }
  5. /* 模板列表*/
  6. .module-list{
  7.   display: flex;
  8.   flex-wrap: wrap;
  9. }
  10. .module-item {
  11.   box-sizing: border-box;
  12.   width: calc(50% - 20px);
  13.   display: flex;
  14.   flex-direction: column;
  15.   padding: 10px;
  16.   margin: 10px;
  17.   border: 1px solid #e5e5e5;
  18.   border-radius: 10px;
  19.   cursor: pointer;
  20. }
  21. .module-item:hover {
  22.   border-color: #c6e2ff;
  23.   background-color: #ecf5ff;
  24. }
  25. .module-item:active,.module-item:focus {
  26.   border-color: #409eff;
  27.   background-color: #ecf5ff;
  28. }
  29. .module-item-active,.module-item-active:hover{
  30.   border-color: #409eff;
  31.   background-color: #ecf5ff;
  32. }
  33. .module-image{
  34.   flex: 1;
  35.   display: flex;
  36.   justify-content: flex-end;
  37.   align-items: end;
  38.   margin-top: 5px;
  39. }
  40. .module-image img {
  41.   max-width: 100px;
  42.   max-height: 100px;
  43. }
  44. /* 分页容器 */
  45. .pagination-box{
  46.   display: flex;
  47.   justify-content: center;
  48. }
复制代码

  • 用于修改bootstrap主题的css文件:theme.css:
  1. /* 默认按钮 */
  2. .btn-default{
  3.   border-color: #dcdfe6;
  4.   background-color: #ffffff;
  5. }
  6. .btn-default:hover{
  7.   border-color: #c6e2ff;
  8.   background-color: #ecf5ff;
  9. }
  10. .btn-default:active{
  11.   color: #409eff;
  12.   border-color: #409eff;
  13.   background-color: #ecf5ff;
  14.   outline:none;
  15. }
  16. .btn-default:focus{
  17.   border-color: #dcdfe6!important;
  18.   background-color: #ffffff!important;
  19.   outline:none!important;
  20. }
  21. /* 主要按钮 */
  22. .btn-primary{
  23.   border-color: #409EFF;
  24.   background-color: #409EFF;
  25. }
  26. .btn-primary:hover{
  27.   border-color: #79bbff;
  28.   background-color: #79bbff;
  29. }
  30. .btn-primary:active{
  31.   border-color: #337ecc;
  32.   background-color: #337ecc;
  33.   outline:none;
  34. }
  35. .btn-primary:focus{
  36.   border-color: #409EFF!important;
  37.   background-color: #409EFF!important;
  38.   outline:none!important;
  39. }
  40. /* 成功按钮 */
  41. .btn-success{
  42.   border-color: #67c23a;
  43.   background-color: #67c23a;
  44. }
  45. .btn-success:hover{
  46.   border-color: #95d475;
  47.   background-color: #95d475;
  48. }
  49. .btn-success:active{
  50.   border-color: #529b2e;
  51.   background-color: #529b2e;
  52.   outline:none;
  53. }
  54. .btn-success:focus{
  55.   border-color: #67c23a!important;
  56.   background-color: #67c23a!important;
  57.   outline:none!important;
  58. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

罪恶克星

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表