su-fixed.js 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. "use strict";
  2. const common_vendor = require("../../../common/vendor.js");
  3. const sheep_index = require("../../index.js");
  4. require("../../url/index.js");
  5. require("../../store/index.js");
  6. require("../../store/app.js");
  7. require("../../api/promotion/diy.js");
  8. require("../../request/index.js");
  9. require("../../config/index.js");
  10. require("../../platform/index.js");
  11. require("../../platform/provider/wechat/index.js");
  12. require("../../platform/provider/wechat/miniProgram.js");
  13. require("../../api/member/auth.js");
  14. require("../../api/member/social.js");
  15. require("../../api/member/user.js");
  16. require("../../platform/provider/apple/index.js");
  17. require("../../platform/share.js");
  18. require("../../router/index.js");
  19. require("../../hooks/useModal.js");
  20. require("../../helper/index.js");
  21. require("../../helper/test.js");
  22. require("../../helper/digit.js");
  23. require("../../api/member/signin.js");
  24. require("../../helper/throttle.js");
  25. require("../../platform/pay.js");
  26. require("../../api/pay/order.js");
  27. require("../../store/user.js");
  28. require("../../store/cart.js");
  29. require("../../api/trade/cart.js");
  30. require("../../api/pay/wallet.js");
  31. require("../../api/trade/order.js");
  32. require("../../api/promotion/coupon.js");
  33. require("../../store/sys.js");
  34. require("../../store/modal.js");
  35. require("../../config/zIndex.js");
  36. const _sfc_main = {
  37. __name: "su-fixed",
  38. props: {
  39. noNav: {
  40. type: Boolean,
  41. default: false
  42. },
  43. bottom: {
  44. type: Boolean,
  45. default: false
  46. },
  47. bg: {
  48. type: String,
  49. default: ""
  50. },
  51. bgStyles: {
  52. type: Object,
  53. default() {
  54. }
  55. },
  56. val: {
  57. type: Number,
  58. default: 0
  59. },
  60. width: {
  61. type: [String, Number],
  62. default: 0
  63. },
  64. alway: {
  65. type: Boolean,
  66. default: true
  67. },
  68. opacity: {
  69. type: Boolean,
  70. default: false
  71. },
  72. index: {
  73. type: [Number, String],
  74. default: 0
  75. },
  76. placeholder: {
  77. type: [Boolean],
  78. default: false
  79. },
  80. sticky: {
  81. type: [Boolean],
  82. default: false
  83. },
  84. noFixed: {
  85. type: Boolean,
  86. default: false
  87. },
  88. ui: {
  89. type: String,
  90. default: ""
  91. },
  92. clickTo: {
  93. type: Boolean,
  94. default: false
  95. },
  96. //是否需要安全区
  97. isInset: {
  98. type: Boolean,
  99. default: true
  100. }
  101. },
  102. setup(__props) {
  103. const { safeAreaInsets } = sheep_index.sheep.$platform.device;
  104. const vm = common_vendor.getCurrentInstance();
  105. const uuid = sheep_index.sheep.$helper.guid();
  106. const sys_navBar = sheep_index.sheep.$platform.navbar;
  107. const state = common_vendor.reactive({
  108. content: {},
  109. fixed: true,
  110. scrollTop: 0,
  111. opacityVal: 0
  112. });
  113. const insetHeight = common_vendor.computed(() => {
  114. if (state.fixed && props.bottom) {
  115. if (props.isInset) {
  116. return props.val + "px";
  117. } else {
  118. return props.val + safeAreaInsets.bottom + "px";
  119. }
  120. } else {
  121. return "auto";
  122. }
  123. });
  124. const props = __props;
  125. state.fixed = !common_vendor.unref(props.sticky);
  126. common_vendor.onPageScroll((e) => {
  127. let top = e.scrollTop;
  128. state.scrollTop = top;
  129. state.opacityVal = top > sheep_index.sheep.$platform.navbar ? 1 : top * 0.01;
  130. });
  131. common_vendor.onMounted(() => {
  132. common_vendor.nextTick$1(() => {
  133. computedQuery();
  134. });
  135. });
  136. const computedQuery = () => {
  137. common_vendor.index.createSelectorQuery().in(vm).select(`#fixed-${uuid}`).boundingClientRect((data) => {
  138. if (data != null) {
  139. state.content = data;
  140. if (common_vendor.unref(props.sticky)) {
  141. setFixed(state.scrollTop);
  142. }
  143. }
  144. }).exec();
  145. };
  146. const setFixed = (value) => {
  147. if (common_vendor.unref(props.bottom)) {
  148. state.fixed = value >= state.content.bottom - sheep_index.sheep.$platform.device.windowHeight + state.content.height + common_vendor.unref(props.val);
  149. } else {
  150. state.fixed = value >= state.content.top - (common_vendor.unref(props.noNav) ? common_vendor.unref(props.val) : common_vendor.unref(props.val) + sheep_index.sheep.$platform.navbar);
  151. }
  152. };
  153. const toTop = () => {
  154. if (props.hasToTop) {
  155. common_vendor.index.pageScrollTo({
  156. scrollTop: state.content.top,
  157. duration: 100
  158. });
  159. }
  160. };
  161. return (_ctx, _cache) => {
  162. return common_vendor.e({
  163. a: common_vendor.unref(safeAreaInsets).bottom && __props.bottom && __props.isInset
  164. }, common_vendor.unref(safeAreaInsets).bottom && __props.bottom && __props.isInset ? {
  165. b: common_vendor.s({
  166. height: common_vendor.unref(safeAreaInsets).bottom + "px"
  167. })
  168. } : {}, {
  169. c: common_vendor.o(toTop),
  170. d: common_vendor.s({
  171. zIndex: __props.index + common_vendor.unref(sheep_index.sheep).$zIndex.navbar
  172. }),
  173. e: __props.bottom
  174. }, __props.bottom ? {
  175. f: common_vendor.n(__props.bg)
  176. } : {}, {
  177. g: common_vendor.n(__props.ui),
  178. h: common_vendor.n(__props.bg),
  179. i: common_vendor.s({
  180. zIndex: __props.index + common_vendor.unref(sheep_index.sheep).$zIndex.navbar - 1
  181. }),
  182. j: common_vendor.s(__props.bgStyles),
  183. k: common_vendor.s(__props.opacity ? {
  184. opacity: state.opacityVal
  185. } : ""),
  186. l: `fixed-${common_vendor.unref(uuid)}`,
  187. m: common_vendor.n({
  188. fixed: state.fixed
  189. }),
  190. n: common_vendor.s({
  191. left: __props.sticky ? "auto" : "0px",
  192. top: state.fixed && !__props.bottom ? (__props.noNav ? __props.val : __props.val + common_vendor.unref(sys_navBar)) + "px" : "auto",
  193. bottom: insetHeight.value,
  194. zIndex: __props.index + common_vendor.unref(sheep_index.sheep).$zIndex.navbar
  195. }),
  196. o: common_vendor.s(!__props.alway ? {
  197. opacity: state.opacityVal
  198. } : ""),
  199. p: __props.sticky ? state.fixed : __props.placeholder && state.fixed
  200. }, (__props.sticky ? state.fixed : __props.placeholder && state.fixed) ? {
  201. q: common_vendor.s({
  202. height: state.content.height + "px",
  203. width: __props.width + "px"
  204. })
  205. } : {});
  206. };
  207. }
  208. };
  209. const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__file", "D:/zx/mall-front-app/sheep/ui/su-fixed/su-fixed.vue"]]);
  210. wx.createComponent(Component);