step.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. layui.define(['layer', 'carousel'], function (exports) {
  2. var $ = layui.jquery;
  3. var layer = layui.layer;
  4. var carousel = layui.carousel;
  5. // 添加步骤条dom节点
  6. var renderDom = function (elem, stepItems, postion) {
  7. var stepDiv = '<div class="lay-step">';
  8. for (var i = 0; i < stepItems.length; i++) {
  9. stepDiv += '<div class="step-item">';
  10. // 线
  11. if (i < (stepItems.length - 1)) {
  12. if (i < postion) {
  13. stepDiv += '<div class="step-item-tail"><i class="step-item-tail-done"></i></div>';
  14. } else {
  15. stepDiv += '<div class="step-item-tail"><i class=""></i></div>';
  16. }
  17. }
  18. // 数字
  19. var number = stepItems[i].number;
  20. if (!number) {
  21. number = i + 1;
  22. }
  23. if (i == postion) {
  24. stepDiv += '<div class="step-item-head step-item-head-active"><i class="layui-icon">' + number + '</i></div>';
  25. } else if (i < postion) {
  26. stepDiv += '<div class="step-item-head"><i class="layui-icon layui-icon-ok"></i></div>';
  27. } else {
  28. stepDiv += '<div class="step-item-head "><i class="layui-icon">' + number + '</i></div>';
  29. }
  30. // 标题和描述
  31. var title = stepItems[i].title;
  32. var desc = stepItems[i].desc;
  33. if (title || desc) {
  34. stepDiv += '<div class="step-item-main">';
  35. if (title) {
  36. stepDiv += '<div class="step-item-main-title">' + title + '</div>';
  37. }
  38. if (desc) {
  39. stepDiv += '<div class="step-item-main-desc">' + desc + '</div>';
  40. }
  41. stepDiv += '</div>';
  42. }
  43. stepDiv += '</div>';
  44. }
  45. stepDiv += '</div>';
  46. $(elem).prepend(stepDiv);
  47. // 计算每一个条目的宽度
  48. var bfb = 100 / stepItems.length;
  49. $('.step-item').css('width', bfb + '%');
  50. };
  51. var step = {
  52. // 渲染步骤条
  53. render: function (param) {
  54. param.indicator = 'none'; // 不显示指示器
  55. param.arrow = 'always'; // 始终显示箭头
  56. param.autoplay = false; // 关闭自动播放
  57. if (!param.stepWidth) {
  58. param.stepWidth = '400px';
  59. }
  60. // 渲染轮播图
  61. carousel.render(param);
  62. // 渲染步骤条
  63. var stepItems = param.stepItems;
  64. renderDom(param.elem, stepItems, 0);
  65. $('.lay-step').css('width', param.stepWidth);
  66. //监听轮播切换事件
  67. carousel.on('change(' + param.filter + ')', function (obj) {
  68. $(param.elem).find('.lay-step').remove();
  69. renderDom(param.elem, stepItems, obj.index);
  70. $('.lay-step').css('width', param.stepWidth);
  71. });
  72. // 隐藏左右箭头按钮
  73. $(param.elem).find('.layui-carousel-arrow').css('display', 'none');
  74. // 去掉轮播图的背景颜色
  75. $(param.elem).css('background-color', 'transparent');
  76. },
  77. // 下一步
  78. next: function (elem) {
  79. $(elem).find('.layui-carousel-arrow[lay-type=add]').trigger('click');
  80. },
  81. // 上一步
  82. pre: function (elem) {
  83. $(elem).find('.layui-carousel-arrow[lay-type=sub]').trigger('click');
  84. }
  85. };
  86. layui.link(layui.cache.base + 'step-lay/step.css');
  87. exports('step', step);
  88. });