loading.js 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. //未曾遗忘的青春
  2. //github https://github.com/IFmiss/loading
  3. //显示Loading
  4. (function($){
  5. $.fn.loading = function(options){
  6. var $this = $(this);
  7. var _this = this;
  8. return this.each(function(){
  9. var loadingPosition ='';
  10. var defaultProp = {
  11. direction: 'column', //方向,column纵向 row 横向
  12. animateIn: 'fadeInNoTransform', //进入类型
  13. title: '请稍等...', //显示什么内容
  14. name: 'loadingName', //loading的data-name的属性值 用于删除loading需要的参数
  15. type: 'origin', //pic origin
  16. discription: '这是一个描述', //loading的描述
  17. titleColor: 'rgba(255,255,255,0.7)', //title文本颜色
  18. discColor: 'rgba(255,255,255,0.7)', //disc文本颜色
  19. loadingWidth: 260, //中间的背景宽度width
  20. loadingBg: 'rgba(0, 0, 0, 0.6)', //中间的背景色
  21. borderRadius: 12, //中间的背景色的borderRadius
  22. loadingMaskBg: 'transparent', //背景遮罩层颜色
  23. zIndex: 1000001, //层级
  24. // 这是圆形旋转的loading样式
  25. originDivWidth: 60, //loadingDiv的width
  26. originDivHeight: 60, //loadingDiv的Height
  27. originWidth: 8, //小圆点width
  28. originHeight: 8, //小圆点Height
  29. originBg: '#fefefe', //小圆点背景色
  30. smallLoading: false, //显示小的loading
  31. // 这是图片的样式 (pic)
  32. imgSrc: 'http://www.daiwei.org/index/images/logo/dw.png', //默认的图片地址
  33. imgDivWidth: 80, //imgDiv的width
  34. imgDivHeight: 80, //imgDiv的Height
  35. flexCenter: false, //是否用flex布局让loading-div垂直水平居中
  36. flexDirection: 'row', //row column flex的方向 横向 和 纵向
  37. mustRelative: false, //$this是否规定relative
  38. };
  39. var opt = $.extend(defaultProp,options || {});
  40. //根据用户是针对body还是元素 设置对应的定位方式
  41. if($this.selector == 'body'){
  42. $('body,html').css({
  43. overflow:'hidden',
  44. });
  45. loadingPosition = 'fixed';
  46. }else if(opt.mustRelative){
  47. $this.css({
  48. position:'fixed',
  49. });
  50. loadingPosition = 'fixed';
  51. }else{
  52. loadingPosition = 'fixed';
  53. }
  54. defaultProp._showOriginLoading = function(){
  55. var smallLoadingMargin = opt.smallLoading ? 0 : '-10px';
  56. if(opt.direction == 'row'){smallLoadingMargin='-6px'}
  57. //悬浮层
  58. _this.cpt_loading_mask = $('<div class="cpt-loading-mask animated '+opt.animateIn+' '+opt.direction+'" data-name="'+opt.name+'"></div>').css({
  59. 'background':opt.loadingMaskBg,
  60. 'z-index':opt.zIndex,
  61. 'position':loadingPosition,
  62. }).appendTo($this);
  63. //中间的显示层
  64. _this.div_loading = $('<div class="div-loading"></div>').css({
  65. 'background':opt.loadingBg,
  66. 'width':opt.loadingWidth,
  67. 'height':opt.loadingHeight,
  68. '-webkit-border-radius':opt.borderRadius,
  69. '-moz-border-radius':opt.borderRadius,
  70. 'border-radius':opt.borderRadius,
  71. }).appendTo(_this.cpt_loading_mask);
  72. if(opt.flexCenter){
  73. _this.div_loading.css({
  74. "display": "-webkit-flex",
  75. "display": "flex",
  76. "-webkit-flex-direction":opt.flexDirection,
  77. "flex-direction":opt.flexDirection,
  78. "-webkit-align-items": "center",
  79. "align-items": "center",
  80. "-webkit-justify-content": "center",
  81. "justify-content":"center",
  82. });
  83. }
  84. //loading标题
  85. _this.loading_title = $('<p class="loading-title txt-textOneRow"></p>').css({
  86. color:opt.titleColor,
  87. }).html(opt.title).appendTo(_this.div_loading);
  88. //loading中间的内容 可以是图片或者转动的小圆球
  89. _this.loading = $('<div class="loading '+opt.type+'"></div>').css({
  90. 'width':opt.originDivWidth,
  91. 'height':opt.originDivHeight,
  92. }).appendTo(_this.div_loading);
  93. //描述
  94. _this.loading_discription = $('<p class="loading-discription txt-textOneRow"></p>').css({
  95. color:opt.discColor,
  96. }).html(opt.discription).appendTo(_this.div_loading);
  97. if(opt.type == 'origin'){
  98. _this.loadingOrigin = $('<div class="div-loadingOrigin"><span></span></div><div class="div-loadingOrigin"><span></span></div><div class="div_loadingOrigin"><span></span></div><div class="div_loadingOrigin"><span></span></div><div class="div_loadingOrigin"><span></span></div>').appendTo(_this.loading);
  99. _this.loadingOrigin.children().css({
  100. "margin-top":smallLoadingMargin,
  101. "margin-left":smallLoadingMargin,
  102. "width":opt.originWidth,
  103. "height":opt.originHeight,
  104. "background":opt.originBg,
  105. });
  106. }
  107. if(opt.type == 'pic'){
  108. _this.loadingPic = $('<img src="'+opt.imgSrc+'" alt="loading" />').appendTo(_this.loading);
  109. }
  110. //关闭事件冒泡 和默认的事件
  111. _this.cpt_loading_mask.on('touchstart touchend touchmove click',function(e){
  112. e.stopPropagation();
  113. e.preventDefault();
  114. });
  115. };
  116. defaultProp._createLoading = function(){
  117. //不能生成两个loading data-name 一样的loading
  118. if($(".cpt-loading-mask[data-name="+opt.name+"]").length > 0){
  119. // console.error('loading mask cant has same date-name('+opt.name+'), you cant set "date-name" prop when you create it');
  120. return
  121. }
  122. defaultProp._showOriginLoading();
  123. };
  124. defaultProp._createLoading();
  125. });
  126. }
  127. })(jQuery)
  128. //关闭Loading
  129. function removeLoading(loadingName){
  130. var loadingName = loadingName || '';
  131. $('body,html').css({
  132. overflow:'auto',
  133. });
  134. if(loadingName == ''){
  135. $(".cpt-loading-mask").remove();
  136. }else{
  137. var name = loadingName || 'loadingName';
  138. $(".cpt-loading-mask[data-name="+name+"]").remove();
  139. }
  140. }